vedeu 0.6.42 → 0.6.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/vedeu/all.rb +1 -1
- data/lib/vedeu/buffers/buffer.rb +28 -0
- data/lib/vedeu/colours/colour.rb +5 -0
- data/lib/vedeu/cursors/all.rb +1 -0
- data/lib/vedeu/cursors/cursor.rb +28 -8
- data/lib/vedeu/cursors/dsl.rb +68 -0
- data/lib/vedeu/cursors/refresh.rb +11 -9
- data/lib/vedeu/dsl/view.rb +1 -0
- data/lib/vedeu/interfaces/dsl.rb +1 -50
- data/lib/vedeu/interfaces/interface.rb +18 -12
- data/lib/vedeu/models/toggleable.rb +44 -9
- data/lib/vedeu/models/views/view.rb +14 -8
- data/lib/vedeu/null/generic.rb +1 -0
- data/lib/vedeu/output/renderers/all.rb +6 -3
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/buffers/buffer_test.rb +71 -0
- data/test/lib/vedeu/colours/colour_test.rb +6 -0
- data/test/lib/vedeu/cursors/dsl_test.rb +91 -0
- data/test/lib/vedeu/cursors/refresh_test.rb +31 -21
- data/test/lib/vedeu/interfaces/dsl_test.rb +0 -76
- data/test/lib/vedeu/interfaces/interface_test.rb +26 -21
- data/test/lib/vedeu/models/toggleable_test.rb +17 -0
- data/test/lib/vedeu/models/views/view_test.rb +2 -0
- data/test/support/examples/material_colours_app.rb +1 -4
- metadata +5 -11
- data/lib/vedeu/output/renderers/escape_sequence.rb +0 -46
- data/lib/vedeu/output/renderers/null.rb +0 -36
- data/lib/vedeu/output/renderers/text.rb +0 -37
- data/test/lib/vedeu/output/renderers/escape_sequence_test.rb +0 -78
- data/test/lib/vedeu/output/renderers/null_test.rb +0 -36
- data/test/lib/vedeu/output/renderers/text_test.rb +0 -36
|
@@ -28,6 +28,11 @@ module Vedeu
|
|
|
28
28
|
# @return [Fixnum|Float]
|
|
29
29
|
attr_accessor :client
|
|
30
30
|
|
|
31
|
+
# @!attribute [rw] cursor_visible
|
|
32
|
+
# @return [Boolean]
|
|
33
|
+
attr_accessor :cursor_visible
|
|
34
|
+
alias_method :cursor_visible?, :cursor_visible
|
|
35
|
+
|
|
31
36
|
# @!attribute [rw] name
|
|
32
37
|
# @return [String]
|
|
33
38
|
attr_accessor :name
|
|
@@ -49,6 +54,7 @@ module Vedeu
|
|
|
49
54
|
# @param attributes [Hash]
|
|
50
55
|
# @option attributes client [Vedeu::Client]
|
|
51
56
|
# @option attributes colour [Vedeu::Colours::Colour]
|
|
57
|
+
# @option attributes cursor_visible [Boolean]
|
|
52
58
|
# @option attributes value [Vedeu::Views::Lines]
|
|
53
59
|
# @option attributes name [String|Symbol]
|
|
54
60
|
# @option attributes parent [Vedeu::Views::Composition]
|
|
@@ -118,14 +124,14 @@ module Vedeu
|
|
|
118
124
|
# @return [Hash]
|
|
119
125
|
def defaults
|
|
120
126
|
{
|
|
121
|
-
client:
|
|
122
|
-
colour:
|
|
123
|
-
|
|
124
|
-
name:
|
|
125
|
-
parent:
|
|
126
|
-
style:
|
|
127
|
-
value:
|
|
128
|
-
zindex:
|
|
127
|
+
client: nil,
|
|
128
|
+
colour: Vedeu::Colours::Colour.default,
|
|
129
|
+
cursor_visible: true,
|
|
130
|
+
name: '',
|
|
131
|
+
parent: nil,
|
|
132
|
+
style: :normal,
|
|
133
|
+
value: [],
|
|
134
|
+
zindex: 0,
|
|
129
135
|
}
|
|
130
136
|
end
|
|
131
137
|
|
data/lib/vedeu/null/generic.rb
CHANGED
|
@@ -18,6 +18,9 @@ module Vedeu
|
|
|
18
18
|
# @return [Array<void>]
|
|
19
19
|
def clear
|
|
20
20
|
threads = storage.map do |renderer|
|
|
21
|
+
Vedeu.log(type: :output,
|
|
22
|
+
message: "Clearing via #{renderer.class.name}")
|
|
23
|
+
|
|
21
24
|
Thread.new(renderer) do
|
|
22
25
|
mutex.synchronize do
|
|
23
26
|
toggle_cursor { renderer.clear }
|
|
@@ -49,6 +52,9 @@ module Vedeu
|
|
|
49
52
|
# @return [Array<void>]
|
|
50
53
|
def render(output)
|
|
51
54
|
threads = storage.map do |renderer|
|
|
55
|
+
Vedeu.log(type: :output,
|
|
56
|
+
message: "Rendering via #{renderer.class.name}")
|
|
57
|
+
|
|
52
58
|
Thread.new(renderer) do
|
|
53
59
|
mutex.synchronize do
|
|
54
60
|
toggle_cursor { renderer.render(output) }
|
|
@@ -127,10 +133,7 @@ module Vedeu
|
|
|
127
133
|
end # Vedeu
|
|
128
134
|
|
|
129
135
|
require 'vedeu/output/renderers/options'
|
|
130
|
-
require 'vedeu/output/renderers/escape_sequence'
|
|
131
136
|
require 'vedeu/output/renderers/file'
|
|
132
137
|
require 'vedeu/output/renderers/html'
|
|
133
138
|
require 'vedeu/output/renderers/json'
|
|
134
|
-
require 'vedeu/output/renderers/null'
|
|
135
139
|
require 'vedeu/output/renderers/terminal'
|
|
136
|
-
require 'vedeu/output/renderers/text'
|
data/lib/vedeu/version.rb
CHANGED
|
@@ -71,6 +71,77 @@ module Vedeu
|
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
describe '#cursor_visible?' do
|
|
75
|
+
let(:buffer) {
|
|
76
|
+
Vedeu::Views::View.new(value: [Vedeu::Views::Line.new],
|
|
77
|
+
cursor_visible: cursor_visible)
|
|
78
|
+
}
|
|
79
|
+
let(:cursor_visible) { false }
|
|
80
|
+
|
|
81
|
+
subject { instance.cursor_visible? }
|
|
82
|
+
|
|
83
|
+
context 'when there is a front buffer' do
|
|
84
|
+
let(:front) { buffer }
|
|
85
|
+
|
|
86
|
+
context 'when the cursor is visible' do
|
|
87
|
+
let(:cursor_visible) { true }
|
|
88
|
+
|
|
89
|
+
it { subject.must_equal(true) }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context 'when the cursor is not visible' do
|
|
93
|
+
it { subject.must_equal(false) }
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context 'when there is a previous buffer' do
|
|
98
|
+
let(:front) {}
|
|
99
|
+
let(:previous) { buffer }
|
|
100
|
+
|
|
101
|
+
context 'when the cursor is visible' do
|
|
102
|
+
let(:cursor_visible) { true }
|
|
103
|
+
|
|
104
|
+
it { subject.must_equal(true) }
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'when the cursor is not visible' do
|
|
108
|
+
it { subject.must_equal(false) }
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context 'when neither a front or previous buffer exists (yet)' do
|
|
113
|
+
let(:front) {}
|
|
114
|
+
let(:previous) {}
|
|
115
|
+
|
|
116
|
+
context 'when an interface exists' do
|
|
117
|
+
let(:interface) {
|
|
118
|
+
Vedeu::Interfaces::Interface.new(name: _name, cursor_visible: cursor_visible)
|
|
119
|
+
}
|
|
120
|
+
let(:cursor_visible) { false }
|
|
121
|
+
|
|
122
|
+
before do
|
|
123
|
+
Vedeu.interfaces.stubs(:by_name).with(_name).returns(interface)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context 'when the interface cursor_visible is false' do
|
|
127
|
+
it { subject.must_equal(false) }
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
context 'when the interface cursor_visible is true' do
|
|
131
|
+
let(:cursor_visible) { true }
|
|
132
|
+
|
|
133
|
+
it { subject.must_equal(true) }
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context 'when an interface does not exist' do
|
|
138
|
+
it 'uses the Interface::Null cursor_visible (always false)' do
|
|
139
|
+
subject.must_equal(false)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
74
145
|
describe '#front?' do
|
|
75
146
|
subject { instance.front? }
|
|
76
147
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Vedeu
|
|
4
|
+
|
|
5
|
+
module Cursors
|
|
6
|
+
|
|
7
|
+
describe DSL do
|
|
8
|
+
|
|
9
|
+
let(:described) { Vedeu::Cursors::DSL }
|
|
10
|
+
|
|
11
|
+
# describe '#cursor' do
|
|
12
|
+
# let(:_value) {}
|
|
13
|
+
|
|
14
|
+
# before { Vedeu.cursors.reset }
|
|
15
|
+
|
|
16
|
+
# subject { instance.cursor(_value) }
|
|
17
|
+
|
|
18
|
+
# it {
|
|
19
|
+
# subject
|
|
20
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
21
|
+
# }
|
|
22
|
+
|
|
23
|
+
# context 'when the value is false' do
|
|
24
|
+
# let(:_value) { false }
|
|
25
|
+
|
|
26
|
+
# it {
|
|
27
|
+
# subject
|
|
28
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
29
|
+
# }
|
|
30
|
+
# end
|
|
31
|
+
|
|
32
|
+
# context 'when the value is nil' do
|
|
33
|
+
# let(:_value) {}
|
|
34
|
+
|
|
35
|
+
# it {
|
|
36
|
+
# subject
|
|
37
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
38
|
+
# }
|
|
39
|
+
# end
|
|
40
|
+
|
|
41
|
+
# context 'when the value is :show' do
|
|
42
|
+
# let(:_value) { :show }
|
|
43
|
+
|
|
44
|
+
# it {
|
|
45
|
+
# subject
|
|
46
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
47
|
+
# }
|
|
48
|
+
# end
|
|
49
|
+
|
|
50
|
+
# context 'when the value is true' do
|
|
51
|
+
# let(:_value) { true }
|
|
52
|
+
|
|
53
|
+
# it {
|
|
54
|
+
# subject
|
|
55
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
56
|
+
# }
|
|
57
|
+
# end
|
|
58
|
+
|
|
59
|
+
# context 'when the value is :yes' do
|
|
60
|
+
# let(:_value) { :yes }
|
|
61
|
+
|
|
62
|
+
# it {
|
|
63
|
+
# subject
|
|
64
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
65
|
+
# }
|
|
66
|
+
# end
|
|
67
|
+
# end
|
|
68
|
+
|
|
69
|
+
# describe '#cursor!' do
|
|
70
|
+
# subject { instance.cursor! }
|
|
71
|
+
|
|
72
|
+
# it {
|
|
73
|
+
# subject
|
|
74
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
75
|
+
# }
|
|
76
|
+
# end
|
|
77
|
+
|
|
78
|
+
# describe '#no_cursor!' do
|
|
79
|
+
# subject { instance.no_cursor! }
|
|
80
|
+
|
|
81
|
+
# it {
|
|
82
|
+
# subject
|
|
83
|
+
# Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
84
|
+
# }
|
|
85
|
+
# end
|
|
86
|
+
|
|
87
|
+
end # DSL
|
|
88
|
+
|
|
89
|
+
end # Cursors
|
|
90
|
+
|
|
91
|
+
end # Vedeu
|
|
@@ -14,8 +14,15 @@ module Vedeu
|
|
|
14
14
|
let(:instance) { described.new(_name) }
|
|
15
15
|
let(:_name) { 'refresh_cursor' }
|
|
16
16
|
let(:expected) {}
|
|
17
|
+
let(:cursor) {
|
|
18
|
+
Vedeu::Cursors::Cursor.store(name: _name,
|
|
19
|
+
ox: ox,
|
|
20
|
+
oy: oy,
|
|
21
|
+
visible: visible)
|
|
22
|
+
}
|
|
17
23
|
let(:ox) { 0 }
|
|
18
24
|
let(:oy) { 0 }
|
|
25
|
+
let(:visible) { false }
|
|
19
26
|
|
|
20
27
|
describe '#initialize' do
|
|
21
28
|
it { instance.must_be_instance_of(described) }
|
|
@@ -31,38 +38,41 @@ module Vedeu
|
|
|
31
38
|
y 1
|
|
32
39
|
yn 3
|
|
33
40
|
end
|
|
34
|
-
Vedeu
|
|
35
|
-
ox: ox,
|
|
36
|
-
oy: oy)
|
|
37
|
-
|
|
41
|
+
Vedeu.cursors.stubs(:by_name).with(_name).returns(cursor)
|
|
38
42
|
Vedeu::Terminal.stubs(:output).returns(expected)
|
|
39
|
-
|
|
40
|
-
Vedeu.stubs(:trigger)
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
subject { described.by_name(_name) }
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
subject
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
context 'when the cursors offset position is outside the viewable area' do
|
|
51
|
-
let(:ox) { 3 }
|
|
52
|
-
let(:oy) { 3 }
|
|
47
|
+
context 'when the cursor is visible' do
|
|
48
|
+
let(:visible) { true }
|
|
53
49
|
|
|
54
|
-
it '
|
|
55
|
-
|
|
50
|
+
it 'renders the cursor in the terminal' do
|
|
51
|
+
cursor.expects(:render)
|
|
56
52
|
subject
|
|
57
53
|
end
|
|
58
|
-
end
|
|
59
54
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
55
|
+
context 'when the cursors offset position is outside the viewable area' do
|
|
56
|
+
let(:ox) { 3 }
|
|
57
|
+
let(:oy) { 3 }
|
|
58
|
+
|
|
59
|
+
it 'refreshes the view' do
|
|
60
|
+
Vedeu.expects(:trigger).with(:_refresh_view_content_, _name)
|
|
61
|
+
subject
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context 'when the cursors offset position is inside the viewable area' do
|
|
66
|
+
it 'does not refresh the view' do
|
|
67
|
+
Vedeu.expects(:trigger).with(:_refresh_view_content_, _name).never
|
|
68
|
+
subject
|
|
69
|
+
end
|
|
64
70
|
end
|
|
65
71
|
end
|
|
72
|
+
|
|
73
|
+
context 'when the cursor is not visible' do
|
|
74
|
+
it { subject.must_equal(nil) }
|
|
75
|
+
end
|
|
66
76
|
end
|
|
67
77
|
|
|
68
78
|
describe '#by_name' do
|
|
@@ -42,73 +42,6 @@ module Vedeu
|
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
describe '#cursor' do
|
|
46
|
-
let(:_value) {}
|
|
47
|
-
|
|
48
|
-
before { Vedeu.cursors.reset }
|
|
49
|
-
|
|
50
|
-
subject { instance.cursor(_value) }
|
|
51
|
-
|
|
52
|
-
it {
|
|
53
|
-
subject
|
|
54
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
context 'when the value is false' do
|
|
58
|
-
let(:_value) { false }
|
|
59
|
-
|
|
60
|
-
it {
|
|
61
|
-
subject
|
|
62
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
63
|
-
}
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
context 'when the value is nil' do
|
|
67
|
-
let(:_value) {}
|
|
68
|
-
|
|
69
|
-
it {
|
|
70
|
-
subject
|
|
71
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
72
|
-
}
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
context 'when the value is :show' do
|
|
76
|
-
let(:_value) { :show }
|
|
77
|
-
|
|
78
|
-
it {
|
|
79
|
-
subject
|
|
80
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
81
|
-
}
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
context 'when the value is true' do
|
|
85
|
-
let(:_value) { true }
|
|
86
|
-
|
|
87
|
-
it {
|
|
88
|
-
subject
|
|
89
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
90
|
-
}
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
context 'when the value is :yes' do
|
|
94
|
-
let(:_value) { :yes }
|
|
95
|
-
|
|
96
|
-
it {
|
|
97
|
-
subject
|
|
98
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
99
|
-
}
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
describe '#cursor!' do
|
|
104
|
-
subject { instance.cursor! }
|
|
105
|
-
|
|
106
|
-
it {
|
|
107
|
-
subject
|
|
108
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(true)
|
|
109
|
-
}
|
|
110
|
-
end
|
|
111
|
-
|
|
112
45
|
describe '#delay' do
|
|
113
46
|
subject { instance.delay(0.25) }
|
|
114
47
|
|
|
@@ -219,15 +152,6 @@ module Vedeu
|
|
|
219
152
|
}
|
|
220
153
|
end
|
|
221
154
|
|
|
222
|
-
describe '#no_cursor!' do
|
|
223
|
-
subject { instance.no_cursor! }
|
|
224
|
-
|
|
225
|
-
it {
|
|
226
|
-
subject
|
|
227
|
-
Vedeu.cursors.find('actinium').visible?.must_equal(false)
|
|
228
|
-
}
|
|
229
|
-
end
|
|
230
|
-
|
|
231
155
|
describe '#show!' do
|
|
232
156
|
subject {
|
|
233
157
|
Vedeu.interface 'xenon' do
|
|
@@ -10,35 +10,38 @@ module Vedeu
|
|
|
10
10
|
let(:instance) { described.new(attributes) }
|
|
11
11
|
let(:attributes) {
|
|
12
12
|
{
|
|
13
|
-
client:
|
|
14
|
-
colour:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
client: client,
|
|
14
|
+
colour: colour,
|
|
15
|
+
cursor_visible: cursor_visible,
|
|
16
|
+
delay: delay,
|
|
17
|
+
editable: editable,
|
|
18
|
+
group: group,
|
|
19
|
+
name: _name,
|
|
20
|
+
parent: parent,
|
|
21
|
+
style: style,
|
|
22
|
+
visible: visible,
|
|
23
|
+
zindex: zindex,
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
let(:client)
|
|
26
|
-
let(:colour)
|
|
27
|
-
let(:
|
|
28
|
-
let(:
|
|
29
|
-
let(:
|
|
30
|
-
let(:
|
|
31
|
-
let(:
|
|
32
|
-
let(:
|
|
33
|
-
let(:
|
|
34
|
-
let(:
|
|
35
|
-
let(:
|
|
26
|
+
let(:client) {}
|
|
27
|
+
let(:colour) {}
|
|
28
|
+
let(:cursor_visible) { true }
|
|
29
|
+
let(:delay) { 0.0 }
|
|
30
|
+
let(:editable) { false }
|
|
31
|
+
let(:group) { '' }
|
|
32
|
+
let(:_name) { 'hydrogen' }
|
|
33
|
+
let(:parent) {}
|
|
34
|
+
let(:repository) { Vedeu.interfaces }
|
|
35
|
+
let(:style) {}
|
|
36
|
+
let(:visible) { true }
|
|
37
|
+
let(:zindex) { 1 }
|
|
36
38
|
|
|
37
39
|
describe '#initialize' do
|
|
38
40
|
subject { instance }
|
|
39
41
|
|
|
40
42
|
it { subject.must_be_instance_of(described) }
|
|
41
43
|
it { subject.instance_variable_get('@client').must_equal(client) }
|
|
44
|
+
it { subject.instance_variable_get('@cursor_visible').must_equal(cursor_visible) }
|
|
42
45
|
it { subject.instance_variable_get('@delay').must_equal(delay) }
|
|
43
46
|
it { subject.instance_variable_get('@editable').must_equal(editable) }
|
|
44
47
|
it { subject.instance_variable_get('@group').must_equal(group) }
|
|
@@ -55,6 +58,8 @@ module Vedeu
|
|
|
55
58
|
it {
|
|
56
59
|
instance.must_respond_to(:client)
|
|
57
60
|
instance.must_respond_to(:client=)
|
|
61
|
+
instance.must_respond_to(:cursor_visible)
|
|
62
|
+
instance.must_respond_to(:cursor_visible=)
|
|
58
63
|
instance.must_respond_to(:delay)
|
|
59
64
|
instance.must_respond_to(:delay=)
|
|
60
65
|
instance.must_respond_to(:editable)
|