vedeu 0.7.0 → 0.7.1
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/docs/borders.md +2 -2
- data/examples/284_slow_rendering.rb +2 -2
- data/examples/dsl_alignment.rb +9 -9
- data/examples/dsl_colours.rb +13 -13
- data/examples/dsl_editor.rb +10 -10
- data/lib/vedeu/borders/dsl.rb +84 -0
- data/lib/vedeu/buffers/empty.rb +3 -3
- data/lib/vedeu/buffers/terminal.rb +1 -1
- data/lib/vedeu/buffers/view.rb +1 -1
- data/lib/vedeu/cells/borders/all.rb +1 -0
- data/lib/vedeu/cells/borders/bottom_left.rb +1 -6
- data/lib/vedeu/cells/borders/bottom_right.rb +1 -6
- data/lib/vedeu/cells/borders/corner.rb +20 -0
- data/lib/vedeu/cells/borders/top_left.rb +1 -6
- data/lib/vedeu/cells/borders/top_right.rb +1 -6
- data/lib/vedeu/cells/empty.rb +22 -0
- data/lib/vedeu/cells/escape.rb +47 -0
- data/lib/vedeu/cursors/cursor.rb +6 -6
- data/lib/vedeu/dsl/text.rb +12 -1
- data/lib/vedeu/events/trigger.rb +4 -2
- data/lib/vedeu/input/capture.rb +1 -1
- data/lib/vedeu/input/mouse.rb +3 -2
- data/lib/vedeu/models/all.rb +0 -2
- data/lib/vedeu/models/row.rb +1 -1
- data/lib/vedeu/output/output.rb +8 -8
- data/lib/vedeu/output/text.rb +23 -2
- data/lib/vedeu/renderers/html.rb +4 -4
- data/lib/vedeu/runtime/launcher.rb +1 -1
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/borders/dsl_test.rb +40 -0
- data/test/lib/vedeu/buffers/empty_test.rb +1 -1
- data/test/lib/vedeu/cells/borders/bottom_left_test.rb +0 -14
- data/test/lib/vedeu/cells/borders/bottom_right_test.rb +0 -14
- data/test/lib/vedeu/cells/borders/corner_test.rb +57 -0
- data/test/lib/vedeu/cells/borders/top_left_test.rb +0 -14
- data/test/lib/vedeu/cells/borders/top_right_test.rb +0 -14
- data/test/lib/vedeu/cells/empty_test.rb +33 -0
- data/test/lib/vedeu/cells/escape_test.rb +74 -0
- data/test/lib/vedeu/cursors/cursor_test.rb +17 -11
- data/test/lib/vedeu/dsl/text_test.rb +1 -0
- data/test/lib/vedeu/models/row_test.rb +1 -1
- data/test/lib/vedeu/output/compressor_test.rb +2 -2
- data/test/lib/vedeu/output/output_test.rb +2 -2
- data/test/lib/vedeu/renderers/all_test.rb +2 -2
- data/test/lib/vedeu/renderers/terminal_test.rb +6 -6
- data/test/support/examples/material_colours_app.rb +13 -10
- metadata +4 -7
- data/lib/vedeu/models/cell.rb +0 -91
- data/lib/vedeu/models/escape.rb +0 -90
- data/test/lib/vedeu/models/cell_test.rb +0 -117
- data/test/lib/vedeu/models/escape_test.rb +0 -87
data/lib/vedeu/cells/escape.rb
CHANGED
@@ -17,6 +17,53 @@ module Vedeu
|
|
17
17
|
#
|
18
18
|
class Escape < Vedeu::Cells::Empty
|
19
19
|
|
20
|
+
include Vedeu::Geometries::Positionable
|
21
|
+
|
22
|
+
# @return [Boolean]
|
23
|
+
def cell?
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [NilClass]
|
28
|
+
def null
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
alias_method :background, :null
|
32
|
+
alias_method :colour, :null
|
33
|
+
alias_method :foreground, :null
|
34
|
+
alias_method :style, :null
|
35
|
+
|
36
|
+
# Return an empty hash as most escape sequences won't make
|
37
|
+
# sense as JSON.
|
38
|
+
#
|
39
|
+
# @return [Hash<void>]
|
40
|
+
def to_h
|
41
|
+
{}
|
42
|
+
end
|
43
|
+
alias_method :to_hash, :to_h
|
44
|
+
|
45
|
+
# Return an empty string as most escape sequences won't make
|
46
|
+
# sense as HTML.
|
47
|
+
#
|
48
|
+
# @param _options [Hash] Ignored.
|
49
|
+
# @return [String]
|
50
|
+
def to_html(_options = {})
|
51
|
+
''.freeze
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [String]
|
55
|
+
def to_s
|
56
|
+
"#{position}#{value}".freeze
|
57
|
+
end
|
58
|
+
alias_method :to_str, :to_s
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# @return [Hash]
|
63
|
+
def defaults
|
64
|
+
super.merge!(position: [1, 1], value: '')
|
65
|
+
end
|
66
|
+
|
20
67
|
end # Escape
|
21
68
|
|
22
69
|
end # Cells
|
data/lib/vedeu/cursors/cursor.rb
CHANGED
@@ -88,7 +88,7 @@ module Vedeu
|
|
88
88
|
# @return [String]
|
89
89
|
def inspect
|
90
90
|
"<#{self.class.name} name:'#{name}', x:#{x}, y:#{y}, ox:#{ox}, " \
|
91
|
-
"oy:#{oy}, visible:#{visible}>"
|
91
|
+
"oy:#{oy}, visible:#{visible}>".freeze
|
92
92
|
end
|
93
93
|
|
94
94
|
# Moves the cursor down by one row.
|
@@ -160,7 +160,7 @@ module Vedeu
|
|
160
160
|
|
161
161
|
# Renders the cursor.
|
162
162
|
#
|
163
|
-
# @return [Array<Vedeu::
|
163
|
+
# @return [Array<Vedeu::Cells::Escape>]
|
164
164
|
def render
|
165
165
|
Vedeu.render_output(escape_sequence)
|
166
166
|
end
|
@@ -193,7 +193,7 @@ module Vedeu
|
|
193
193
|
# Vedeu.hide_cursor(Vedeu.focus)
|
194
194
|
# Vedeu.hide_cursor
|
195
195
|
#
|
196
|
-
# @return [Vedeu::
|
196
|
+
# @return [Vedeu::Cells::Escape]
|
197
197
|
def hide
|
198
198
|
super
|
199
199
|
|
@@ -230,7 +230,7 @@ module Vedeu
|
|
230
230
|
# Vedeu.show_cursor(Vedeu.focus)
|
231
231
|
# Vedeu.show_cursor
|
232
232
|
#
|
233
|
-
# @return [Vedeu::
|
233
|
+
# @return [Vedeu::Cells::Escape]
|
234
234
|
def show
|
235
235
|
super
|
236
236
|
|
@@ -287,9 +287,9 @@ module Vedeu
|
|
287
287
|
}
|
288
288
|
end
|
289
289
|
|
290
|
-
# @return [Vedeu::
|
290
|
+
# @return [Vedeu::Cells::Escape]
|
291
291
|
def escape_sequence
|
292
|
-
Vedeu::
|
292
|
+
Vedeu::Cells::Escape.new(position: position, value: visibility)
|
293
293
|
end
|
294
294
|
|
295
295
|
# @return [Hash<Symbol => Fixnum>]
|
data/lib/vedeu/dsl/text.rb
CHANGED
@@ -64,7 +64,7 @@ module Vedeu
|
|
64
64
|
# string is shorter than the specified width.
|
65
65
|
# @return [String]
|
66
66
|
def text(value = '', options = {})
|
67
|
-
options.merge!(anchor: __callee__
|
67
|
+
options.merge!(text_options).merge!(anchor: __callee__)
|
68
68
|
|
69
69
|
Vedeu::Output::Text.add(value, options)
|
70
70
|
end
|
@@ -80,6 +80,17 @@ module Vedeu
|
|
80
80
|
alias_method :left=, :text
|
81
81
|
alias_method :right=, :text
|
82
82
|
|
83
|
+
private
|
84
|
+
|
85
|
+
# @return [Hash<Symbol => void>]
|
86
|
+
def text_options
|
87
|
+
{
|
88
|
+
client: client,
|
89
|
+
model: model,
|
90
|
+
name: model.name,
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
83
94
|
end # Text
|
84
95
|
|
85
96
|
end # DSL
|
data/lib/vedeu/events/trigger.rb
CHANGED
@@ -38,8 +38,10 @@ module Vedeu
|
|
38
38
|
#
|
39
39
|
# @return [Array]
|
40
40
|
def trigger
|
41
|
-
|
42
|
-
|
41
|
+
if results.empty?
|
42
|
+
Vedeu.log(type: :event,
|
43
|
+
message: "No action for: '#{name.inspect}'".freeze)
|
44
|
+
end
|
43
45
|
|
44
46
|
return results[0] if results.one?
|
45
47
|
|
data/lib/vedeu/input/capture.rb
CHANGED
@@ -111,7 +111,7 @@ module Vedeu
|
|
111
111
|
def click?(input)
|
112
112
|
return false if input.nil? || input.is_a?(Symbol)
|
113
113
|
|
114
|
-
input.is_a?(Vedeu::Cursors::Cursor) || input.start_with?("\e[M")
|
114
|
+
input.is_a?(Vedeu::Cursors::Cursor) || input.start_with?("\e[M".freeze)
|
115
115
|
end
|
116
116
|
|
117
117
|
# @return [IO]
|
data/lib/vedeu/input/mouse.rb
CHANGED
@@ -27,7 +27,8 @@ module Vedeu
|
|
27
27
|
# @return [void]
|
28
28
|
def click
|
29
29
|
Vedeu.log(type: :input,
|
30
|
-
message: "Mouse pressed: '#{button}'
|
30
|
+
message: "Mouse pressed: '#{button}' " \
|
31
|
+
"(x: #{x}, y: #{y})".freeze)
|
31
32
|
|
32
33
|
Vedeu.trigger(:_mouse_event_, input)
|
33
34
|
|
@@ -43,7 +44,7 @@ module Vedeu
|
|
43
44
|
else
|
44
45
|
Vedeu.log(type: :input,
|
45
46
|
message: 'Vedeu does not support mouse button ' \
|
46
|
-
"'#{button}' yet.")
|
47
|
+
"'#{button}' yet.".freeze)
|
47
48
|
|
48
49
|
end
|
49
50
|
end
|
data/lib/vedeu/models/all.rb
CHANGED
data/lib/vedeu/models/row.rb
CHANGED
data/lib/vedeu/output/output.rb
CHANGED
@@ -10,7 +10,7 @@ module Vedeu
|
|
10
10
|
class Output
|
11
11
|
|
12
12
|
# @param output [Array<Array<Vedeu::Views::Char>>|
|
13
|
-
# NilClass|Vedeu::
|
13
|
+
# NilClass|Vedeu::Cells::Escape]
|
14
14
|
# @return [Array]
|
15
15
|
def self.buffer_update(output)
|
16
16
|
return nil if output.nil?
|
@@ -19,7 +19,7 @@ module Vedeu
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# @param output [Array<Array<Vedeu::Views::Char>>|
|
22
|
-
# NilClass|Vedeu::
|
22
|
+
# NilClass|Vedeu::Cells::Escape]
|
23
23
|
# @return [Array]
|
24
24
|
def self.buffer_write(output)
|
25
25
|
return nil if output.nil?
|
@@ -28,7 +28,7 @@ module Vedeu
|
|
28
28
|
end
|
29
29
|
|
30
30
|
# @param output [Array<Array<Vedeu::Views::Char>>|
|
31
|
-
# NilClass|Vedeu::
|
31
|
+
# NilClass|Vedeu::Cells::Escape]
|
32
32
|
# @return [Array<String>]
|
33
33
|
def self.direct_write(output)
|
34
34
|
return nil if output.nil?
|
@@ -39,7 +39,7 @@ module Vedeu
|
|
39
39
|
# Writes output to the defined renderers.
|
40
40
|
#
|
41
41
|
# @param output [Array<Array<Vedeu::Views::Char>>|
|
42
|
-
# NilClass|Vedeu::
|
42
|
+
# NilClass|Vedeu::Cells::Escape]
|
43
43
|
# @return [Array|NilClass|String]
|
44
44
|
def self.render_output(output)
|
45
45
|
return nil if output.nil?
|
@@ -50,7 +50,7 @@ module Vedeu
|
|
50
50
|
# Return a new instance of Vedeu::Output::Output.
|
51
51
|
#
|
52
52
|
# @param output [Array<Array<Vedeu::Views::Char>>|
|
53
|
-
# NilClass|Vedeu::
|
53
|
+
# NilClass|Vedeu::Cells::Escape]
|
54
54
|
# @return [Vedeu::Output::Output]
|
55
55
|
def initialize(output)
|
56
56
|
@output = output
|
@@ -72,7 +72,7 @@ module Vedeu
|
|
72
72
|
end
|
73
73
|
|
74
74
|
# Send the view to the renderers. If the output is a
|
75
|
-
# {Vedeu::
|
75
|
+
# {Vedeu::Cells::Escape} object (typical when showing or
|
76
76
|
# hiding the cursor) then we bypass the
|
77
77
|
# {Vedeu::Buffers::Terminal} and write directly to the terminal
|
78
78
|
# because escape sequences only make sense to the terminal and
|
@@ -93,7 +93,7 @@ module Vedeu
|
|
93
93
|
|
94
94
|
# @!attribute [r] output
|
95
95
|
# @return [Array<Array<Vedeu::Views::Char>>|
|
96
|
-
# NilClass|Vedeu::
|
96
|
+
# NilClass|Vedeu::Cells::Escape]
|
97
97
|
attr_reader :output
|
98
98
|
|
99
99
|
private
|
@@ -115,7 +115,7 @@ module Vedeu
|
|
115
115
|
|
116
116
|
# @return [Boolean]
|
117
117
|
def escape_sequence?
|
118
|
-
output.is_a?(Vedeu::
|
118
|
+
output.is_a?(Vedeu::Cells::Escape)
|
119
119
|
end
|
120
120
|
|
121
121
|
end # Output
|
data/lib/vedeu/output/text.rb
CHANGED
@@ -6,6 +6,8 @@ module Vedeu
|
|
6
6
|
#
|
7
7
|
class Text
|
8
8
|
|
9
|
+
include Vedeu::Common
|
10
|
+
|
9
11
|
# @see Vedeu::DSL::Text#text
|
10
12
|
def self.add(value = '', options = {})
|
11
13
|
new(value, options).add
|
@@ -27,6 +29,7 @@ module Vedeu
|
|
27
29
|
# @option options model
|
28
30
|
# [Vedeu::Views::View|Vedeu::Views::Line|Vedeu::Views::Stream]
|
29
31
|
# @option options mode (see Vedeu::Output::Wordwrap#mode)
|
32
|
+
# @option options name [String|Symbol]
|
30
33
|
# @option options pad [String]
|
31
34
|
# @option options width [Integer]
|
32
35
|
# @return [Vedeu::Output::Text]
|
@@ -131,11 +134,17 @@ module Vedeu
|
|
131
134
|
colour: nil,
|
132
135
|
model: nil,
|
133
136
|
mode: :default,
|
137
|
+
name: '',
|
134
138
|
pad: ' ',
|
135
139
|
width: nil,
|
136
140
|
}
|
137
141
|
end
|
138
142
|
|
143
|
+
# @return [NilClass|Vedeu::Geometries::Geometry]
|
144
|
+
def geometry
|
145
|
+
Vedeu.geometries.by_name(name)
|
146
|
+
end
|
147
|
+
|
139
148
|
# The string padded to width, left justified.
|
140
149
|
#
|
141
150
|
# @return [String]
|
@@ -164,6 +173,11 @@ module Vedeu
|
|
164
173
|
options[:mode]
|
165
174
|
end
|
166
175
|
|
176
|
+
# @return [String|Symbol]
|
177
|
+
def name
|
178
|
+
options[:name]
|
179
|
+
end
|
180
|
+
|
167
181
|
# The character to use for padding the string.
|
168
182
|
#
|
169
183
|
# @return [String]
|
@@ -225,11 +239,18 @@ module Vedeu
|
|
225
239
|
string.slice(0, width)
|
226
240
|
end
|
227
241
|
|
228
|
-
# Return the width
|
242
|
+
# Return the width of the interface when a name is given,
|
243
|
+
# otherwise use the given width.
|
229
244
|
#
|
230
245
|
# @return [Fixnum]
|
231
246
|
def width
|
232
|
-
options[:
|
247
|
+
if present?(options[:name])
|
248
|
+
geometry.bordered_width
|
249
|
+
|
250
|
+
elsif present?(options[:width])
|
251
|
+
options[:width]
|
252
|
+
|
253
|
+
end
|
233
254
|
end
|
234
255
|
|
235
256
|
# Return a boolean indicating whether the string should be
|
data/lib/vedeu/renderers/html.rb
CHANGED
@@ -34,7 +34,7 @@ module Vedeu
|
|
34
34
|
#
|
35
35
|
# @return [String]
|
36
36
|
def clear
|
37
|
-
@output = Vedeu::
|
37
|
+
@output = Vedeu::Cells::Escape.new
|
38
38
|
|
39
39
|
''
|
40
40
|
end
|
@@ -49,7 +49,7 @@ module Vedeu
|
|
49
49
|
|
50
50
|
# @return [String]
|
51
51
|
def html_body
|
52
|
-
return '' if output.is_a?(Vedeu::
|
52
|
+
return '' if output.is_a?(Vedeu::Cells::Escape)
|
53
53
|
|
54
54
|
out = ''
|
55
55
|
|
@@ -65,12 +65,12 @@ module Vedeu
|
|
65
65
|
private
|
66
66
|
|
67
67
|
# Returns a boolean indicating whether the output is a
|
68
|
-
# {Vedeu::
|
68
|
+
# {Vedeu::Cells::Escape}. If it is, it won't be rendered in
|
69
69
|
# HTML.
|
70
70
|
#
|
71
71
|
# @return [Boolean]
|
72
72
|
def escape?
|
73
|
-
output.is_a?(Vedeu::
|
73
|
+
output.is_a?(Vedeu::Cells::Escape)
|
74
74
|
end
|
75
75
|
|
76
76
|
# @return [Array<Array<Vedeu::Views::Char>>]
|
@@ -70,7 +70,7 @@ module Vedeu
|
|
70
70
|
|
71
71
|
rescue StandardError => uncaught_exception
|
72
72
|
output = if Vedeu::Configuration.debug?
|
73
|
-
uncaught_exception.message + "\n" +
|
73
|
+
uncaught_exception.message + "\n".freeze +
|
74
74
|
uncaught_exception.backtrace.join("\n".freeze)
|
75
75
|
else
|
76
76
|
uncaught_exception.message
|
data/lib/vedeu/version.rb
CHANGED
@@ -68,6 +68,26 @@ module Vedeu
|
|
68
68
|
it { subject.must_be_instance_of(TrueClass) }
|
69
69
|
end
|
70
70
|
|
71
|
+
describe '#top_horizontal' do
|
72
|
+
let(:char) { 'T' }
|
73
|
+
let(:options) { {} }
|
74
|
+
|
75
|
+
subject { instance.top_horizontal(char, options) }
|
76
|
+
|
77
|
+
it { subject.must_be_instance_of(Vedeu::Cells::TopHorizontal) }
|
78
|
+
it { instance.must_respond_to(:top_horizontal=) }
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#bottom_horizontal' do
|
82
|
+
let(:char) { 'B' }
|
83
|
+
let(:options) { {} }
|
84
|
+
|
85
|
+
subject { instance.bottom_horizontal(char, options) }
|
86
|
+
|
87
|
+
it { subject.must_be_instance_of(Vedeu::Cells::BottomHorizontal) }
|
88
|
+
it { instance.must_respond_to(:bottom_horizontal=) }
|
89
|
+
end
|
90
|
+
|
71
91
|
describe '#horizontal' do
|
72
92
|
let(:char) { 'H' }
|
73
93
|
let(:options) { {} }
|
@@ -246,6 +266,26 @@ module Vedeu
|
|
246
266
|
end
|
247
267
|
end
|
248
268
|
|
269
|
+
describe '#left_vertical' do
|
270
|
+
let(:char) { 'V' }
|
271
|
+
let(:options) { {} }
|
272
|
+
|
273
|
+
subject { instance.left_vertical(char, options) }
|
274
|
+
|
275
|
+
it { subject.must_be_instance_of(Vedeu::Cells::LeftVertical) }
|
276
|
+
it { instance.must_respond_to(:left_vertical=) }
|
277
|
+
end
|
278
|
+
|
279
|
+
describe '#right_vertical' do
|
280
|
+
let(:char) { 'V' }
|
281
|
+
let(:options) { {} }
|
282
|
+
|
283
|
+
subject { instance.right_vertical(char, options) }
|
284
|
+
|
285
|
+
it { subject.must_be_instance_of(Vedeu::Cells::RightVertical) }
|
286
|
+
it { instance.must_respond_to(:right_vertical=) }
|
287
|
+
end
|
288
|
+
|
249
289
|
describe '#vertical' do
|
250
290
|
let(:char) { 'V' }
|
251
291
|
let(:options) { {} }
|
@@ -61,7 +61,7 @@ module Vedeu
|
|
61
61
|
|
62
62
|
it { subject.must_be_instance_of(Array) }
|
63
63
|
it { subject.first.must_be_instance_of(Array) }
|
64
|
-
it { subject.first.first.must_be_instance_of(Vedeu::
|
64
|
+
it { subject.first.first.must_be_instance_of(Vedeu::Cells::Empty) }
|
65
65
|
|
66
66
|
it { subject.size.must_equal(3) }
|
67
67
|
it { subject.first.size.must_equal(9) }
|
@@ -9,20 +9,6 @@ module Vedeu
|
|
9
9
|
let(:described) { Vedeu::Cells::BottomLeft }
|
10
10
|
let(:instance) { described.new }
|
11
11
|
|
12
|
-
describe '#position' do
|
13
|
-
let(:geometry) {
|
14
|
-
Vedeu::Geometries::Geometry.new(x: 5, xn: 15, y: 3, yn: 9)
|
15
|
-
}
|
16
|
-
|
17
|
-
subject { instance.position }
|
18
|
-
|
19
|
-
before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
|
20
|
-
|
21
|
-
it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
|
22
|
-
it { subject.x.must_equal(5) }
|
23
|
-
it { subject.y.must_equal(9) }
|
24
|
-
end
|
25
|
-
|
26
12
|
describe '#type' do
|
27
13
|
subject { instance.type }
|
28
14
|
|