vedeu 0.0.41 → 0.0.42
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/deps.md +37 -41
- data/lib/vedeu/models/composition.rb +8 -0
- data/lib/vedeu/output/render_interface.rb +34 -1
- data/lib/vedeu/parsing/parser.rb +2 -2
- data/test/lib/vedeu/models/composition_test.rb +96 -69
- data/test/lib/vedeu/models/interface_test.rb +14 -14
- data/test/lib/vedeu/models/line_test.rb +2 -2
- data/test/lib/vedeu/output/render_interface_test.rb +16 -5
- data/vedeu.gemspec +1 -1
- metadata +2 -5
- data/lib/vedeu/parsing/compositor.rb +0 -25
- data/test/lib/vedeu/parsing/compositor_test.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a046f5b44b63444927dcb96378474808444b2be
|
4
|
+
data.tar.gz: 70e1e365e7727b181d8fbcc813b7843cfc4ce9d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5265ac3784c962e2405ed0295f66b3b54929272a48745b713c6c8415ecd30763ef29c125f4799ffd84db8063a4d4140dc44e886278ddcc7ad9554e4d9193213f
|
7
|
+
data.tar.gz: 8e6a2a56e74dec0fb18f65a3676047a25266be8a7f7302b1bd87df7b8cfbfc72537ca6e88233627985537c20a01db16abb986942f5e89f74d5c72de898bc2ae8
|
data/deps.md
CHANGED
@@ -22,9 +22,6 @@ Colour
|
|
22
22
|
Composition
|
23
23
|
InterfaceCollection
|
24
24
|
|
25
|
-
Compositor
|
26
|
-
Composition
|
27
|
-
|
28
25
|
Configuration
|
29
26
|
|
30
27
|
Geometry
|
@@ -74,7 +71,7 @@ LineCollection
|
|
74
71
|
Menu
|
75
72
|
|
76
73
|
Parser
|
77
|
-
|
74
|
+
Composition
|
78
75
|
HashParser
|
79
76
|
JSONParser
|
80
77
|
|
@@ -143,51 +140,50 @@ Launcher
|
|
143
140
|
Translator
|
144
141
|
Process
|
145
142
|
Parser
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
143
|
+
Composition
|
144
|
+
InterfaceCollection
|
145
|
+
Persistence
|
146
|
+
Interface
|
147
|
+
ClearInterface
|
148
|
+
Geometry
|
149
|
+
Esc
|
150
|
+
Translator
|
151
|
+
Terminal
|
153
152
|
Esc
|
154
153
|
Translator
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
Line
|
161
|
-
Presentation
|
162
|
-
Colour
|
163
|
-
Esc
|
164
|
-
Translator
|
165
|
-
StreamCollection
|
166
|
-
Collection
|
167
|
-
Stream
|
168
|
-
Presentation
|
169
|
-
Colour
|
170
|
-
Esc
|
171
|
-
Translator
|
172
|
-
Style
|
173
|
-
Esc
|
174
|
-
Translator
|
175
|
-
Style
|
154
|
+
LineCollection
|
155
|
+
Collection
|
156
|
+
Line
|
157
|
+
Presentation
|
158
|
+
Colour
|
176
159
|
Esc
|
177
160
|
Translator
|
178
|
-
|
179
|
-
|
161
|
+
StreamCollection
|
162
|
+
Collection
|
163
|
+
Stream
|
164
|
+
Presentation
|
165
|
+
Colour
|
166
|
+
Esc
|
167
|
+
Translator
|
168
|
+
Style
|
169
|
+
Esc
|
170
|
+
Translator
|
171
|
+
Style
|
180
172
|
Esc
|
181
173
|
Translator
|
182
|
-
|
183
|
-
|
184
|
-
ClearInterface
|
185
|
-
Style
|
186
|
-
Esc
|
187
|
-
Translator
|
188
|
-
Terminal
|
174
|
+
Presentation
|
175
|
+
Colour
|
189
176
|
Esc
|
190
177
|
Translator
|
178
|
+
Queue
|
179
|
+
RenderInterface
|
180
|
+
ClearInterface
|
181
|
+
Style
|
182
|
+
Esc
|
183
|
+
Translator
|
184
|
+
Terminal
|
185
|
+
Esc
|
186
|
+
Translator
|
191
187
|
HashParser
|
192
188
|
TextAdaptor
|
193
189
|
JSONParser
|
@@ -9,6 +9,14 @@ module Vedeu
|
|
9
9
|
|
10
10
|
attribute :interfaces, InterfaceCollection
|
11
11
|
|
12
|
+
def self.enqueue(attributes)
|
13
|
+
new(attributes).enqueue
|
14
|
+
end
|
15
|
+
|
16
|
+
def enqueue
|
17
|
+
interfaces.map { |interface| interface.enqueue }
|
18
|
+
end
|
19
|
+
|
12
20
|
def to_json
|
13
21
|
{
|
14
22
|
interfaces: interfaces
|
@@ -12,7 +12,7 @@ module Vedeu
|
|
12
12
|
|
13
13
|
def render
|
14
14
|
out = [ClearInterface.call(interface)]
|
15
|
-
|
15
|
+
processed_lines.each_with_index do |line, index|
|
16
16
|
out << interface.origin(index)
|
17
17
|
out << line.to_s
|
18
18
|
end
|
@@ -22,5 +22,38 @@ module Vedeu
|
|
22
22
|
private
|
23
23
|
|
24
24
|
attr_reader :interface
|
25
|
+
|
26
|
+
def processed_lines
|
27
|
+
lines.each do |line|
|
28
|
+
if line.streams.any?
|
29
|
+
processed_streams = []
|
30
|
+
line_length = 0
|
31
|
+
line.streams.each do |stream|
|
32
|
+
next if stream.text.empty?
|
33
|
+
|
34
|
+
if (line_length += stream.text.size) >= width
|
35
|
+
remainder = width - line_length
|
36
|
+
stream.text = truncate(stream.text, (remainder - 3))
|
37
|
+
end
|
38
|
+
|
39
|
+
processed_streams << stream
|
40
|
+
end
|
41
|
+
|
42
|
+
line.streams = processed_streams
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def truncate(text, value)
|
48
|
+
text.chomp.slice(0...value)
|
49
|
+
end
|
50
|
+
|
51
|
+
def lines
|
52
|
+
interface.lines
|
53
|
+
end
|
54
|
+
|
55
|
+
def width
|
56
|
+
interface.width
|
57
|
+
end
|
25
58
|
end
|
26
59
|
end
|
data/lib/vedeu/parsing/parser.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'vedeu/
|
1
|
+
require 'vedeu/models/composition'
|
2
2
|
require 'vedeu/parsing/hash_parser'
|
3
3
|
require 'vedeu/parsing/json_parser'
|
4
4
|
require 'vedeu/parsing/menu_parser'
|
@@ -18,7 +18,7 @@ module Vedeu
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def parse
|
21
|
-
|
21
|
+
Composition.enqueue(parsed_output)
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -4,6 +4,42 @@ require 'vedeu/support/persistence'
|
|
4
4
|
|
5
5
|
module Vedeu
|
6
6
|
describe Composition do
|
7
|
+
describe '.enqueue' do
|
8
|
+
it 'enqueues the interfaces for rendering' do
|
9
|
+
attributes = {
|
10
|
+
interfaces: [
|
11
|
+
{
|
12
|
+
name: 'Composition.enqueue_1',
|
13
|
+
width: 35,
|
14
|
+
height: 5,
|
15
|
+
lines: {
|
16
|
+
streams: {
|
17
|
+
text: 'bd459118e6175689e4394e242debc2ae'
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}, {
|
21
|
+
name: 'Composition.enqueue_2',
|
22
|
+
width: 35,
|
23
|
+
height: 5,
|
24
|
+
lines: {
|
25
|
+
streams: {
|
26
|
+
text: '837acb2cb2ea3ef359257851142a7830'
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
]
|
31
|
+
}
|
32
|
+
|
33
|
+
Composition.enqueue(attributes)
|
34
|
+
Persistence
|
35
|
+
.query('Composition.enqueue_1').dequeue
|
36
|
+
.must_match(/bd459118e6175689e4394e242debc2ae/)
|
37
|
+
Persistence
|
38
|
+
.query('Composition.enqueue_2').dequeue
|
39
|
+
.must_match(/837acb2cb2ea3ef359257851142a7830/)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
7
43
|
describe '#interfaces' do
|
8
44
|
it 'returns a collection of interfaces' do
|
9
45
|
Composition.new({
|
@@ -42,54 +78,54 @@ module Vedeu
|
|
42
78
|
|
43
79
|
describe '#to_s' do
|
44
80
|
it 'returns the stringified content for a single interface, single line, single stream' do
|
45
|
-
Persistence.create({ name: 'int1_lin1_str1', y: 3, x: 3, width:
|
81
|
+
Persistence.create({ name: 'int1_lin1_str1', y: 3, x: 3, width: 15, height: 3 })
|
46
82
|
json = File.read('test/support/json/int1_lin1_str1.json')
|
47
83
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
48
84
|
|
49
85
|
Composition.new(attributes).to_s.must_equal(
|
50
|
-
"\e[3;3H
|
51
|
-
"\e[4;3H
|
52
|
-
"\e[5;3H
|
86
|
+
"\e[3;3H \e[3;3H" \
|
87
|
+
"\e[4;3H \e[4;3H" \
|
88
|
+
"\e[5;3H \e[5;3H" \
|
53
89
|
"\e[3;3HSome text..."
|
54
90
|
)
|
55
91
|
end
|
56
92
|
|
57
93
|
it 'returns the stringified content for a single interface, single line, multiple streams' do
|
58
|
-
Persistence.create({ name: 'int1_lin1_str3', y: 3, x: 3, width:
|
94
|
+
Persistence.create({ name: 'int1_lin1_str3', y: 3, x: 3, width: 30, height: 3 })
|
59
95
|
json = File.read('test/support/json/int1_lin1_str3.json')
|
60
96
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
61
97
|
|
62
98
|
Composition.new(attributes).to_s.must_equal(
|
63
|
-
"\e[3;3H
|
64
|
-
"\e[4;3H
|
65
|
-
"\e[5;3H
|
99
|
+
"\e[3;3H \e[3;3H" \
|
100
|
+
"\e[4;3H \e[4;3H" \
|
101
|
+
"\e[5;3H \e[5;3H" \
|
66
102
|
"\e[3;3HSome text... more text..."
|
67
103
|
)
|
68
104
|
end
|
69
105
|
|
70
106
|
it 'returns the stringified content for a single interface, multiple lines, single stream' do
|
71
|
-
Persistence.create({ name: 'int1_lin2_str1', y: 3, x: 3, width:
|
107
|
+
Persistence.create({ name: 'int1_lin2_str1', y: 3, x: 3, width: 15, height: 3 })
|
72
108
|
json = File.read('test/support/json/int1_lin2_str1.json')
|
73
109
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
74
110
|
|
75
111
|
Composition.new(attributes).to_s.must_equal(
|
76
|
-
"\e[3;3H
|
77
|
-
"\e[4;3H
|
78
|
-
"\e[5;3H
|
112
|
+
"\e[3;3H \e[3;3H" \
|
113
|
+
"\e[4;3H \e[4;3H" \
|
114
|
+
"\e[5;3H \e[5;3H" \
|
79
115
|
"\e[3;3HSome text..." \
|
80
116
|
"\e[4;3HSome text..."
|
81
117
|
)
|
82
118
|
end
|
83
119
|
|
84
120
|
it 'returns the stringified content for a single interface, multiple lines, multiple streams' do
|
85
|
-
Persistence.create({ name: 'int1_lin2_str3', y: 3, x: 3, width:
|
121
|
+
Persistence.create({ name: 'int1_lin2_str3', y: 3, x: 3, width: 30, height: 3 })
|
86
122
|
json = File.read('test/support/json/int1_lin2_str3.json')
|
87
123
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
88
124
|
|
89
125
|
Composition.new(attributes).to_s.must_equal(
|
90
|
-
"\e[3;3H
|
91
|
-
"\e[4;3H
|
92
|
-
"\e[5;3H
|
126
|
+
"\e[3;3H \e[3;3H" \
|
127
|
+
"\e[4;3H \e[4;3H" \
|
128
|
+
"\e[5;3H \e[5;3H" \
|
93
129
|
"\e[3;3HSome text... more text..." \
|
94
130
|
"\e[4;3HSome text... more text..."
|
95
131
|
)
|
@@ -98,109 +134,100 @@ module Vedeu
|
|
98
134
|
it 'returns the stringified content for a single interface, multiple lines, multiple streams, streams contain styles' do
|
99
135
|
json = File.read('test/support/json/int1_lin2_str3_styles.json')
|
100
136
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
101
|
-
Persistence.create({ name: 'int1_lin2_str3_styles', y: 3, x: 3, width:
|
137
|
+
Persistence.create({ name: 'int1_lin2_str3_styles', y: 3, x: 3, width: 30, height: 3 })
|
102
138
|
|
103
139
|
Composition.new(attributes).to_s.must_equal(
|
104
|
-
"\e[3;3H
|
105
|
-
"\e[4;3H
|
106
|
-
"\e[5;3H
|
107
|
-
"\e[3;3H\e[38;5;16m\e[48;5;
|
140
|
+
"\e[3;3H \e[3;3H" \
|
141
|
+
"\e[4;3H \e[4;3H" \
|
142
|
+
"\e[5;3H \e[5;3H" \
|
143
|
+
"\e[3;3H\e[38;5;16m\e[48;5;21mSome text...\e[38;5;226m\e[48;5;46m \e[38;5;231m\e[48;5;201mmore text..."
|
108
144
|
)
|
109
145
|
end
|
110
146
|
|
111
147
|
it 'returns the stringified content for multiple interfaces, single line, single stream' do
|
112
|
-
Persistence.create({ name: 'int2_lin1_str1_1', y: 3, x: 3, width:
|
113
|
-
Persistence.create({ name: 'int2_lin1_str1_2', y: 6, x: 6, width:
|
148
|
+
Persistence.create({ name: 'int2_lin1_str1_1', y: 3, x: 3, width: 15, height: 3 })
|
149
|
+
Persistence.create({ name: 'int2_lin1_str1_2', y: 6, x: 6, width: 15, height: 3 })
|
114
150
|
json = File.read('test/support/json/int2_lin1_str1.json')
|
115
151
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
116
152
|
|
117
153
|
Composition.new(attributes).to_s.must_equal(
|
118
|
-
"\e[3;3H
|
119
|
-
"\e[4;3H
|
120
|
-
"\e[5;3H
|
154
|
+
"\e[3;3H \e[3;3H" \
|
155
|
+
"\e[4;3H \e[4;3H" \
|
156
|
+
"\e[5;3H \e[5;3H" \
|
121
157
|
"\e[3;3HSome text..." \
|
122
|
-
"\e[6;6H
|
123
|
-
"\e[7;6H
|
124
|
-
"\e[8;6H
|
158
|
+
"\e[6;6H \e[6;6H" \
|
159
|
+
"\e[7;6H \e[7;6H" \
|
160
|
+
"\e[8;6H \e[8;6H" \
|
125
161
|
"\e[6;6HSome text..."
|
126
162
|
)
|
127
163
|
end
|
128
164
|
|
129
165
|
it 'returns the stringified content for multiple interfaces, single line, multiple streams' do
|
130
|
-
Persistence.create({ name: 'int2_lin1_str3_1', y: 3, x: 3, width:
|
131
|
-
Persistence.create({ name: 'int2_lin1_str3_2', y: 6, x: 6, width:
|
166
|
+
Persistence.create({ name: 'int2_lin1_str3_1', y: 3, x: 3, width: 30, height: 3 })
|
167
|
+
Persistence.create({ name: 'int2_lin1_str3_2', y: 6, x: 6, width: 30, height: 3 })
|
132
168
|
json = File.read('test/support/json/int2_lin1_str3.json')
|
133
169
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
134
170
|
|
135
171
|
Composition.new(attributes).to_s.must_equal(
|
136
|
-
"\e[3;3H
|
137
|
-
"\e[4;3H
|
138
|
-
"\e[5;3H
|
139
|
-
"\e[3;3HSome text... more text..."
|
140
|
-
"\e[6;6H
|
141
|
-
"\e[7;6H
|
142
|
-
"\e[8;6H
|
172
|
+
"\e[3;3H \e[3;3H" \
|
173
|
+
"\e[4;3H \e[4;3H" \
|
174
|
+
"\e[5;3H \e[5;3H" \
|
175
|
+
"\e[3;3HSome text... more text..." \
|
176
|
+
"\e[6;6H \e[6;6H" \
|
177
|
+
"\e[7;6H \e[7;6H" \
|
178
|
+
"\e[8;6H \e[8;6H" \
|
143
179
|
"\e[6;6HSome text... more text..."
|
144
180
|
)
|
145
181
|
end
|
146
182
|
|
147
183
|
it 'returns the stringified content for multiple interfaces, multiple lines, single stream' do
|
148
|
-
Persistence.create({ name: 'int2_lin2_str1_1', y: 3, x: 3, width:
|
149
|
-
Persistence.create({ name: 'int2_lin2_str1_2', y: 6, x: 6, width:
|
184
|
+
Persistence.create({ name: 'int2_lin2_str1_1', y: 3, x: 3, width: 15, height: 3 })
|
185
|
+
Persistence.create({ name: 'int2_lin2_str1_2', y: 6, x: 6, width: 15, height: 3 })
|
150
186
|
json = File.read('test/support/json/int2_lin2_str1.json')
|
151
187
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
152
188
|
|
153
189
|
Composition.new(attributes).to_s.must_equal(
|
154
|
-
"\e[3;3H
|
155
|
-
"\e[4;3H
|
156
|
-
"\e[5;3H
|
190
|
+
"\e[3;3H \e[3;3H" \
|
191
|
+
"\e[4;3H \e[4;3H" \
|
192
|
+
"\e[5;3H \e[5;3H" \
|
157
193
|
"\e[3;3HSome text..." \
|
158
194
|
"\e[4;3HSome text..." \
|
159
|
-
"\e[3;3H
|
160
|
-
"\e[4;3H
|
161
|
-
"\e[5;3H
|
195
|
+
"\e[3;3H \e[3;3H" \
|
196
|
+
"\e[4;3H \e[4;3H" \
|
197
|
+
"\e[5;3H \e[5;3H" \
|
162
198
|
"\e[3;3HSome text..." \
|
163
199
|
"\e[4;3HSome text..."
|
164
200
|
)
|
165
201
|
end
|
166
202
|
|
167
203
|
it 'returns the stringified content for multiple interfaces, multiple lines, multiple streams' do
|
168
|
-
Persistence.create({ name: 'int2_lin2_str3_1', y: 3, x: 3, width:
|
169
|
-
Persistence.create({ name: 'int2_lin2_str3_2', y: 6, x: 6, width:
|
204
|
+
Persistence.create({ name: 'int2_lin2_str3_1', y: 3, x: 3, width: 30, height: 3 })
|
205
|
+
Persistence.create({ name: 'int2_lin2_str3_2', y: 6, x: 6, width: 30, height: 3 })
|
170
206
|
json = File.read('test/support/json/int2_lin2_str3.json')
|
171
207
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
172
208
|
|
173
209
|
Composition.new(attributes).to_s.must_equal(
|
174
|
-
"\e[3;3H
|
175
|
-
"\e[4;3H
|
176
|
-
"\e[5;3H
|
177
|
-
"\e[3;3HSome text... more text..."
|
178
|
-
"\e[4;3HSome text... more text..."
|
179
|
-
"\e[6;6H
|
180
|
-
"\e[7;6H
|
181
|
-
"\e[8;6H
|
182
|
-
"\e[6;6HSome text... more text..."
|
210
|
+
"\e[3;3H \e[3;3H" \
|
211
|
+
"\e[4;3H \e[4;3H" \
|
212
|
+
"\e[5;3H \e[5;3H" \
|
213
|
+
"\e[3;3HSome text... more text..." \
|
214
|
+
"\e[4;3HSome text... more text..." \
|
215
|
+
"\e[6;6H \e[6;6H" \
|
216
|
+
"\e[7;6H \e[7;6H" \
|
217
|
+
"\e[8;6H \e[8;6H" \
|
218
|
+
"\e[6;6HSome text... more text..." \
|
183
219
|
"\e[7;6HSome text... more text..."
|
184
220
|
)
|
185
221
|
end
|
186
222
|
|
187
223
|
it 'returns the stringified content for multiple interfaces, multiple lines, multiple streams, streams contain styles' do
|
188
|
-
Persistence.create({ name: 'int2_lin2_str3_styles_1', y: 3, x: 3, width:
|
189
|
-
Persistence.create({ name: 'int2_lin2_str3_styles_2', y: 6, x: 6, width:
|
224
|
+
Persistence.create({ name: 'int2_lin2_str3_styles_1', y: 3, x: 3, width: 30, height: 3 })
|
225
|
+
Persistence.create({ name: 'int2_lin2_str3_styles_2', y: 6, x: 6, width: 30, height: 3 })
|
190
226
|
json = File.read('test/support/json/int2_lin2_str3_styles.json')
|
191
227
|
attributes = JSON.load(json, nil, symbolize_names: true)
|
192
228
|
|
193
229
|
Composition.new(attributes).to_s.must_equal(
|
194
|
-
"\e[3;3H
|
195
|
-
"\e[4;3H \e[4;3H" \
|
196
|
-
"\e[5;3H \e[5;3H" \
|
197
|
-
"\e[3;3H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text..." \
|
198
|
-
"\e[4;3H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text..." \
|
199
|
-
"\e[6;6H \e[6;6H" \
|
200
|
-
"\e[7;6H \e[7;6H" \
|
201
|
-
"\e[8;6H \e[8;6H" \
|
202
|
-
"\e[6;6H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text..." \
|
203
|
-
"\e[7;6H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text..."
|
230
|
+
"\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3H\e[38;5;16m\e[48;5;21mSome text...\e[38;5;226m\e[48;5;46m \e[38;5;231m\e[48;5;201mmore text...\e[4;3H\e[38;5;16m\e[48;5;21mSome text...\e[38;5;226m\e[48;5;46m \e[38;5;231m\e[48;5;201mmore text...\e[6;6H \e[6;6H\e[7;6H \e[7;6H\e[8;6H \e[8;6H\e[6;6H\e[38;5;16m\e[48;5;21mSome text...\e[38;5;226m\e[48;5;46m \e[38;5;231m\e[48;5;201mmore text...\e[7;6H\e[38;5;16m\e[48;5;21mSome text...\e[38;5;226m\e[48;5;46m \e[38;5;231m\e[48;5;201mmore text..."
|
204
231
|
)
|
205
232
|
end
|
206
233
|
end
|
@@ -68,14 +68,14 @@ module Vedeu
|
|
68
68
|
Queue.reset
|
69
69
|
interface = Interface.new({
|
70
70
|
name: 'Interface#enqueue',
|
71
|
-
width:
|
71
|
+
width: 8,
|
72
72
|
height: 2,
|
73
73
|
lines: [ { streams: { text: 'a8f39' } } ]
|
74
74
|
})
|
75
75
|
interface.enqueue
|
76
76
|
interface.dequeue.must_equal(
|
77
|
-
"\e[1;1H
|
78
|
-
"\e[2;1H
|
77
|
+
"\e[1;1H \e[1;1H" \
|
78
|
+
"\e[2;1H \e[2;1H" \
|
79
79
|
"\e[1;1Ha8f39"
|
80
80
|
)
|
81
81
|
end
|
@@ -140,7 +140,7 @@ module Vedeu
|
|
140
140
|
foreground: '#ff0000',
|
141
141
|
background: '#000000'
|
142
142
|
},
|
143
|
-
width:
|
143
|
+
width: 11,
|
144
144
|
height: 3
|
145
145
|
}
|
146
146
|
interface = Interface.new(attributes)
|
@@ -149,9 +149,9 @@ module Vedeu
|
|
149
149
|
Terminal.stub(:output, nil) do
|
150
150
|
interface.refresh.must_equal(
|
151
151
|
"\e[38;5;196m\e[48;5;16m" \
|
152
|
-
"\e[1;1H
|
153
|
-
"\e[2;1H
|
154
|
-
"\e[3;1H
|
152
|
+
"\e[1;1H \e[1;1H" \
|
153
|
+
"\e[2;1H \e[2;1H" \
|
154
|
+
"\e[3;1H \e[3;1H" \
|
155
155
|
"\e[1;1H#refresh" \
|
156
156
|
"\e[2;1H#refresh" \
|
157
157
|
"\e[3;1H#refresh"
|
@@ -167,14 +167,14 @@ module Vedeu
|
|
167
167
|
foreground: '#ff0000',
|
168
168
|
background: '#000000'
|
169
169
|
},
|
170
|
-
width:
|
170
|
+
width: 11,
|
171
171
|
height: 3
|
172
172
|
}
|
173
173
|
interface = Interface.new(attributes)
|
174
174
|
interface.current = "\e[38;5;196m\e[48;5;16m" \
|
175
|
-
"\e[1;1H
|
176
|
-
"\e[2;1H
|
177
|
-
"\e[3;1H
|
175
|
+
"\e[1;1H \e[1;1H" \
|
176
|
+
"\e[2;1H \e[2;1H" \
|
177
|
+
"\e[3;1H \e[3;1H" \
|
178
178
|
"\e[1;1H#refresh" \
|
179
179
|
"\e[2;1H#refresh" \
|
180
180
|
"\e[3;1H#refresh"
|
@@ -182,9 +182,9 @@ module Vedeu
|
|
182
182
|
Terminal.stub(:output, nil) do
|
183
183
|
interface.refresh.must_equal(
|
184
184
|
"\e[38;5;196m\e[48;5;16m" \
|
185
|
-
"\e[1;1H
|
186
|
-
"\e[2;1H
|
187
|
-
"\e[3;1H
|
185
|
+
"\e[1;1H \e[1;1H" \
|
186
|
+
"\e[2;1H \e[2;1H" \
|
187
|
+
"\e[3;1H \e[3;1H" \
|
188
188
|
"\e[1;1H#refresh" \
|
189
189
|
"\e[2;1H#refresh" \
|
190
190
|
"\e[3;1H#refresh"
|
@@ -28,13 +28,13 @@ module Vedeu
|
|
28
28
|
end
|
29
29
|
|
30
30
|
describe '#to_json' do
|
31
|
-
it 'returns
|
31
|
+
it 'returns a String' do
|
32
32
|
line.to_json.must_equal("{\"colour\":{\"foreground\":\"#ff0000\",\"background\":\"#000000\"},\"style\":[\"normal\"],\"streams\":[]}")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
describe '#to_s' do
|
37
|
-
it 'returns
|
37
|
+
it 'returns a String' do
|
38
38
|
line.to_s.must_equal(
|
39
39
|
"\e[38;5;196m\e[48;5;16m" \
|
40
40
|
"\e[24m\e[21m\e[27m"
|
@@ -12,18 +12,29 @@ module Vedeu
|
|
12
12
|
interface = Interface.new({
|
13
13
|
name: '.call',
|
14
14
|
width: 32,
|
15
|
-
height:
|
15
|
+
height: 3,
|
16
16
|
lines: 'RenderInterface.call',
|
17
17
|
lines: [
|
18
|
-
{
|
19
|
-
|
18
|
+
{
|
19
|
+
streams: [{ text: 'this is the first' }]
|
20
|
+
}, {
|
21
|
+
streams: { text: 'this is the second and it is long' }
|
22
|
+
}, {
|
23
|
+
streams: [
|
24
|
+
{ text: 'this is the third, ' },
|
25
|
+
{ text: 'it is even longer ' },
|
26
|
+
{ text: 'and still truncated' }
|
27
|
+
]
|
28
|
+
}
|
20
29
|
]
|
21
30
|
})
|
22
31
|
RenderInterface.call(interface).must_equal(
|
23
32
|
"\e[1;1H \e[1;1H" \
|
24
33
|
"\e[2;1H \e[2;1H" \
|
25
|
-
"\e[
|
26
|
-
"\e[
|
34
|
+
"\e[3;1H \e[3;1H" \
|
35
|
+
"\e[1;1Hthis is the first" \
|
36
|
+
"\e[2;1Hthis is the second and it is " \
|
37
|
+
"\e[3;1Hthis is the third, it is even"
|
27
38
|
)
|
28
39
|
end
|
29
40
|
end
|
data/vedeu.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'vedeu'
|
7
|
-
spec.version = '0.0.
|
7
|
+
spec.version = '0.0.42'
|
8
8
|
spec.authors = ['Gavin Laking']
|
9
9
|
spec.email = ['gavinlaking@gmail.com']
|
10
10
|
spec.summary = %q{A terminal case of wonderland.}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vedeu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.42
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -189,7 +189,6 @@ files:
|
|
189
189
|
- lib/vedeu/output/clear_interface.rb
|
190
190
|
- lib/vedeu/output/render_interface.rb
|
191
191
|
- lib/vedeu/output/template.rb
|
192
|
-
- lib/vedeu/parsing/compositor.rb
|
193
192
|
- lib/vedeu/parsing/hash_parser.rb
|
194
193
|
- lib/vedeu/parsing/json_parser.rb
|
195
194
|
- lib/vedeu/parsing/menu_parser.rb
|
@@ -226,7 +225,6 @@ files:
|
|
226
225
|
- test/lib/vedeu/output/clear_interface_test.rb
|
227
226
|
- test/lib/vedeu/output/render_interface_test.rb
|
228
227
|
- test/lib/vedeu/output/template.rb
|
229
|
-
- test/lib/vedeu/parsing/compositor_test.rb
|
230
228
|
- test/lib/vedeu/parsing/hash_parser_test.rb
|
231
229
|
- test/lib/vedeu/parsing/json_parser_test.rb
|
232
230
|
- test/lib/vedeu/parsing/parser_test.rb
|
@@ -304,7 +302,6 @@ test_files:
|
|
304
302
|
- test/lib/vedeu/output/clear_interface_test.rb
|
305
303
|
- test/lib/vedeu/output/render_interface_test.rb
|
306
304
|
- test/lib/vedeu/output/template.rb
|
307
|
-
- test/lib/vedeu/parsing/compositor_test.rb
|
308
305
|
- test/lib/vedeu/parsing/hash_parser_test.rb
|
309
306
|
- test/lib/vedeu/parsing/json_parser_test.rb
|
310
307
|
- test/lib/vedeu/parsing/parser_test.rb
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'vedeu/models/composition'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
class Compositor
|
5
|
-
def self.enqueue(attributes)
|
6
|
-
new(attributes).enqueue
|
7
|
-
end
|
8
|
-
|
9
|
-
def initialize(attributes)
|
10
|
-
@attributes = attributes
|
11
|
-
end
|
12
|
-
|
13
|
-
def enqueue
|
14
|
-
composition.interfaces.map { |interface| interface.enqueue }
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
attr_reader :attributes
|
20
|
-
|
21
|
-
def composition
|
22
|
-
@composition ||= Composition.new(attributes)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'vedeu/parsing/compositor'
|
3
|
-
|
4
|
-
module Vedeu
|
5
|
-
describe Compositor do
|
6
|
-
describe '.enqueue' do
|
7
|
-
it 'enqueues the interfaces for rendering' do
|
8
|
-
attributes = {
|
9
|
-
interfaces: [
|
10
|
-
{
|
11
|
-
name: 'Compositor.enqueue_1',
|
12
|
-
width: 5,
|
13
|
-
height: 5,
|
14
|
-
lines: {
|
15
|
-
streams: {
|
16
|
-
text: 'bd459118e6175689e4394e242debc2ae'
|
17
|
-
}
|
18
|
-
}
|
19
|
-
}, {
|
20
|
-
name: 'Compositor.enqueue_2',
|
21
|
-
width: 5,
|
22
|
-
height: 5,
|
23
|
-
lines: {
|
24
|
-
streams: {
|
25
|
-
text: '837acb2cb2ea3ef359257851142a7830'
|
26
|
-
}
|
27
|
-
}
|
28
|
-
}
|
29
|
-
]
|
30
|
-
}
|
31
|
-
|
32
|
-
Compositor.enqueue(attributes)
|
33
|
-
Persistence
|
34
|
-
.query('Compositor.enqueue_1').dequeue
|
35
|
-
.must_match(/bd459118e6175689e4394e242debc2ae/)
|
36
|
-
Persistence
|
37
|
-
.query('Compositor.enqueue_2').dequeue
|
38
|
-
.must_match(/837acb2cb2ea3ef359257851142a7830/)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|