vedeu 0.4.5 → 0.4.6
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/bin/vedeu +0 -3
- data/examples/borders_app.rb +0 -3
- data/examples/colours_app.rb +0 -3
- data/examples/configuration_app.rb +0 -3
- data/examples/cursor_app.rb +0 -3
- data/examples/focus_app.rb +0 -3
- data/examples/geometry_app.rb +0 -3
- data/examples/lines_app.rb +0 -3
- data/examples/view_templates_app/template.erb +1 -0
- data/examples/view_templates_app/view_templates_app.rb +82 -0
- data/lib/vedeu/all.rb +0 -1
- data/lib/vedeu/application.rb +7 -6
- data/lib/vedeu/bindings.rb +8 -8
- data/lib/vedeu/buffers/buffer.rb +14 -4
- data/lib/vedeu/buffers/display_buffer.rb +2 -2
- data/lib/vedeu/configuration/cli.rb +7 -1
- data/lib/vedeu/configuration/configuration.rb +4 -2
- data/lib/vedeu/cursor/all.rb +1 -1
- data/lib/vedeu/cursor/cursor.rb +29 -2
- data/lib/vedeu/cursor/move_cursor.rb +20 -6
- data/lib/vedeu/cursor/toggle_cursor.rb +2 -0
- data/lib/vedeu/distributed/client.rb +2 -0
- data/lib/vedeu/distributed/server.rb +3 -1
- data/lib/vedeu/distributed/subprocess.rb +6 -1
- data/lib/vedeu/distributed/test_application.rb +32 -9
- data/lib/vedeu/distributed/uri.rb +7 -1
- data/lib/vedeu/dsl/components/border.rb +2 -0
- data/lib/vedeu/dsl/components/geometry.rb +2 -0
- data/lib/vedeu/dsl/components/keymap.rb +2 -0
- data/lib/vedeu/dsl/components/menu.rb +3 -1
- data/lib/vedeu/dsl/composition.rb +31 -2
- data/lib/vedeu/dsl/group.rb +2 -0
- data/lib/vedeu/dsl/interface.rb +3 -1
- data/lib/vedeu/dsl/line.rb +2 -0
- data/lib/vedeu/dsl/shared/style.rb +1 -1
- data/lib/vedeu/dsl/shared/text.rb +1 -2
- data/lib/vedeu/dsl/stream.rb +2 -0
- data/lib/vedeu/dsl/view.rb +1 -1
- data/lib/vedeu/events/all.rb +1 -1
- data/lib/vedeu/events/event.rb +26 -10
- data/lib/vedeu/events/trigger.rb +11 -3
- data/lib/vedeu/geometry/all.rb +2 -0
- data/lib/vedeu/geometry/bounding_area.rb +7 -2
- data/lib/vedeu/geometry/content_geometry.rb +2 -0
- data/lib/vedeu/geometry/coordinate.rb +15 -6
- data/lib/vedeu/geometry/grid.rb +3 -1
- data/lib/vedeu/geometry/index_position.rb +77 -0
- data/lib/vedeu/geometry/limit.rb +15 -1
- data/lib/vedeu/geometry/position.rb +7 -2
- data/lib/vedeu/{output → geometry}/position_index.rb +12 -2
- data/lib/vedeu/geometry/position_validator.rb +9 -1
- data/lib/vedeu/input/all.rb +0 -1
- data/lib/vedeu/input/input.rb +2 -0
- data/lib/vedeu/input/keymap.rb +5 -3
- data/lib/vedeu/input/mapper.rb +7 -1
- data/lib/vedeu/launcher.rb +1 -1
- data/lib/vedeu/models/all.rb +6 -3
- data/lib/vedeu/models/char.rb +157 -0
- data/lib/vedeu/models/{view/composition.rb → composition.rb} +1 -4
- data/lib/vedeu/models/geometry.rb +36 -12
- data/lib/vedeu/models/group.rb +7 -3
- data/lib/vedeu/models/{view/interface.rb → interface.rb} +26 -10
- data/lib/vedeu/models/{view/line.rb → line.rb} +8 -4
- data/lib/vedeu/models/menu.rb +11 -3
- data/lib/vedeu/models/{view/stream.rb → stream.rb} +9 -4
- data/lib/vedeu/output/all.rb +3 -2
- data/lib/vedeu/output/background.rb +2 -2
- data/lib/vedeu/output/border.rb +65 -22
- data/lib/vedeu/output/char_builder.rb +36 -0
- data/lib/vedeu/output/clear.rb +62 -0
- data/lib/vedeu/output/colour.rb +15 -7
- data/lib/vedeu/output/compositor.rb +3 -1
- data/lib/vedeu/output/esc.rb +2 -2
- data/lib/vedeu/output/foreground.rb +2 -2
- data/lib/vedeu/output/html_char.rb +2 -0
- data/lib/vedeu/output/html_renderer.rb +6 -3
- data/lib/vedeu/output/output.rb +20 -92
- data/lib/vedeu/output/presentation.rb +21 -21
- data/lib/vedeu/output/renderer.rb +2 -0
- data/lib/vedeu/output/style.rb +4 -2
- data/lib/vedeu/output/text.rb +7 -1
- data/lib/vedeu/output/translator.rb +4 -2
- data/lib/vedeu/output/viewport.rb +4 -2
- data/lib/vedeu/output/virtual_buffer.rb +11 -1
- data/lib/vedeu/output/virtual_terminal.rb +34 -11
- data/lib/vedeu/output/wordwrap.rb +31 -20
- data/lib/vedeu/repositories/all.rb +3 -0
- data/lib/vedeu/repositories/collection.rb +83 -0
- data/lib/vedeu/repositories/collections.rb +35 -0
- data/lib/vedeu/{models → repositories}/model.rb +2 -0
- data/lib/vedeu/repositories/repository.rb +7 -1
- data/lib/vedeu/support/log.rb +1 -1
- data/lib/vedeu/support/sentence.rb +7 -1
- data/lib/vedeu/support/template.rb +14 -2
- data/lib/vedeu/support/terminal.rb +6 -6
- data/lib/vedeu/support/trace.rb +4 -4
- data/lib/vedeu/support/visible.rb +4 -4
- data/test/lib/vedeu/dsl/composition_test.rb +23 -0
- data/test/lib/vedeu/geometry/index_position_test.rb +121 -0
- data/test/lib/vedeu/{output → geometry}/position_index_test.rb +6 -0
- data/test/lib/vedeu/input/keymap_test.rb +2 -2
- data/test/lib/vedeu/models/{view/char_test.rb → char_test.rb} +31 -15
- data/test/lib/vedeu/models/{view/composition_test.rb → composition_test.rb} +0 -0
- data/test/lib/vedeu/models/{view/interface_test.rb → interface_test.rb} +0 -0
- data/test/lib/vedeu/models/line_test.rb +156 -0
- data/test/lib/vedeu/models/{view/stream_test.rb → stream_test.rb} +1 -16
- data/test/lib/vedeu/output/char_builder_test.rb +50 -0
- data/test/lib/vedeu/output/clear_test.rb +26 -0
- data/test/lib/vedeu/output/compositor_test.rb +0 -10
- data/test/lib/vedeu/output/html_renderer_test.rb +8 -3
- data/test/lib/vedeu/output/output_test.rb +0 -39
- data/test/lib/vedeu/output/viewport_test.rb +10 -66
- data/test/lib/vedeu/output/virtual_buffer_test.rb +18 -2
- data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -14
- data/test/lib/vedeu/output/wordwrap_test.rb +8 -15
- data/test/lib/vedeu/repositories/collection_test.rb +108 -0
- data/test/lib/vedeu/repositories/collections_test.rb +71 -0
- data/test/lib/vedeu/{models → repositories}/model_test.rb +0 -0
- data/test/lib/vedeu/support/template_test.rb +21 -1
- data/test/support/helpers/model_test_class.rb +1 -1
- data/test/test_helper.rb +0 -1
- data/vedeu.gemspec +1 -1
- metadata +40 -44
- data/lib/vedeu/events/events.rb +0 -10
- data/lib/vedeu/input/keys.rb +0 -10
- data/lib/vedeu/models/collection.rb +0 -81
- data/lib/vedeu/models/view/all.rb +0 -12
- data/lib/vedeu/models/view/char.rb +0 -99
- data/lib/vedeu/models/view/chars.rb +0 -10
- data/lib/vedeu/models/view/interfaces.rb +0 -10
- data/lib/vedeu/models/view/lines.rb +0 -10
- data/lib/vedeu/models/view/streams.rb +0 -10
- data/lib/vedeu/output/index_position.rb +0 -35
- data/test/lib/vedeu/models/collection_test.rb +0 -112
- data/test/lib/vedeu/models/view/chars_test.rb +0 -16
- data/test/lib/vedeu/models/view/interfaces_test.rb +0 -16
- data/test/lib/vedeu/models/view/line_test.rb +0 -214
- data/test/lib/vedeu/models/view/lines_test.rb +0 -16
- data/test/lib/vedeu/models/view/streams_test.rb +0 -16
- data/test/lib/vedeu/output/index_position_test.rb +0 -64
@@ -4,16 +4,32 @@ module Vedeu
|
|
4
4
|
#
|
5
5
|
class Wordwrap
|
6
6
|
|
7
|
+
# @see {Vedeu::Wordwrap#initialize}
|
8
|
+
def self.for(text, options = {})
|
9
|
+
new(text, options).content
|
10
|
+
end
|
11
|
+
|
7
12
|
# @param text [String]
|
8
13
|
# @param options [Hash]
|
9
|
-
# @option options ellipsis [String]
|
10
|
-
# @option options
|
14
|
+
# @option options ellipsis [String] For when using mode `:prune`.
|
15
|
+
# @option options mode [Symbol] One of :default, :prune, :wrap
|
16
|
+
# @option options width [Fixnum] The width in characters to prune or wrap to.
|
11
17
|
# @return [Vedeu::Wordwrap]
|
12
18
|
def initialize(text, options = {})
|
13
19
|
@text = text
|
14
20
|
@options = defaults.merge!(options)
|
15
21
|
end
|
16
22
|
|
23
|
+
# @return [Vedeu::Lines]
|
24
|
+
def content
|
25
|
+
case(mode)
|
26
|
+
when :prune then to_line_objects(prune)
|
27
|
+
when :wrap then to_line_objects(wrap)
|
28
|
+
else
|
29
|
+
to_line_objects(split_lines)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
17
33
|
# @return [Array<String>|String]
|
18
34
|
def prune
|
19
35
|
return text if text.size <= pruned_width
|
@@ -60,26 +76,15 @@ module Vedeu
|
|
60
76
|
end
|
61
77
|
end
|
62
78
|
|
63
|
-
# @return [Vedeu::Lines]
|
64
|
-
def as_lines
|
65
|
-
if __callee__ == :prune_as_lines
|
66
|
-
to_line_objects(prune)
|
67
|
-
|
68
|
-
elsif __callee__ == :wrap_as_lines
|
69
|
-
to_line_objects(wrap)
|
70
|
-
|
71
|
-
else
|
72
|
-
to_line_objects(split_lines)
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
76
|
-
alias_method :prune_as_lines, :as_lines
|
77
|
-
alias_method :wrap_as_lines, :as_lines
|
78
|
-
|
79
79
|
private
|
80
80
|
|
81
|
-
|
82
|
-
|
81
|
+
# @!attribute [r] text
|
82
|
+
# @return [String]
|
83
|
+
attr_reader :text
|
84
|
+
|
85
|
+
# @!attribute [r] options
|
86
|
+
# @return [Hash]
|
87
|
+
attr_reader :options
|
83
88
|
|
84
89
|
# @param text_as_lines [Array<String>]
|
85
90
|
# @return [Vedeu::Lines]
|
@@ -137,6 +142,11 @@ module Vedeu
|
|
137
142
|
options.fetch(:ellipsis)
|
138
143
|
end
|
139
144
|
|
145
|
+
# @return [Symbol]
|
146
|
+
def mode
|
147
|
+
options.fetch(:mode)
|
148
|
+
end
|
149
|
+
|
140
150
|
# @return [Fixnum]
|
141
151
|
def width
|
142
152
|
options.fetch(:width)
|
@@ -146,6 +156,7 @@ module Vedeu
|
|
146
156
|
def defaults
|
147
157
|
{
|
148
158
|
ellipsis: '...',
|
159
|
+
mode: :default,
|
149
160
|
width: 70,
|
150
161
|
}
|
151
162
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
# Convert an Array into an object which has some meaning in the context it
|
4
|
+
# is being used.
|
5
|
+
#
|
6
|
+
class Collection
|
7
|
+
|
8
|
+
include Enumerable
|
9
|
+
|
10
|
+
# @!attribute [rw] parent
|
11
|
+
# @return [Fixnum]
|
12
|
+
attr_accessor :parent
|
13
|
+
|
14
|
+
# @!attribute [rw] name
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :name
|
17
|
+
|
18
|
+
# @param collection [Array|Vedeu::Collection]
|
19
|
+
# @param parent [void]
|
20
|
+
# @param name [String|NilClass]
|
21
|
+
# @return [Vedeu::Collection]
|
22
|
+
def self.coerce(collection = [], parent = nil, name = nil)
|
23
|
+
if collection.kind_of?(Vedeu::Collection)
|
24
|
+
collection
|
25
|
+
|
26
|
+
else
|
27
|
+
new(Array(collection), parent, name)
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param collection []
|
33
|
+
# @param parent [void]
|
34
|
+
# @param name [String|NilClass]
|
35
|
+
# @return [Vedeu::Collection]
|
36
|
+
def initialize(collection = [], parent = nil, name = nil)
|
37
|
+
@collection = collection
|
38
|
+
@parent = parent
|
39
|
+
@name = name
|
40
|
+
end
|
41
|
+
|
42
|
+
# @param value [Fixnum]
|
43
|
+
# @return [void]
|
44
|
+
def [](value)
|
45
|
+
@collection[value]
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param other [Vedeu::Collection]
|
49
|
+
# @return [Vedeu::Collection]
|
50
|
+
def add(*other)
|
51
|
+
self.class.new(@collection += other, parent, name)
|
52
|
+
end
|
53
|
+
alias_method :<<, :add
|
54
|
+
|
55
|
+
# @return [Array]
|
56
|
+
def all
|
57
|
+
@collection
|
58
|
+
end
|
59
|
+
|
60
|
+
# @param block [Proc]
|
61
|
+
# @return [Enumerator]
|
62
|
+
def each(&block)
|
63
|
+
@collection.each(&block)
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [Boolean]
|
67
|
+
def empty?
|
68
|
+
@collection.empty?
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [Fixnum]
|
72
|
+
def size
|
73
|
+
@collection.size
|
74
|
+
end
|
75
|
+
|
76
|
+
# @return [String]
|
77
|
+
def to_s
|
78
|
+
@collection.map(&:to_s).join
|
79
|
+
end
|
80
|
+
|
81
|
+
end # Collection
|
82
|
+
|
83
|
+
end # Vedeu
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'vedeu/repositories/collection'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
# A collection of {Vedeu::Char} instances.
|
6
|
+
#
|
7
|
+
class Chars < Vedeu::Collection
|
8
|
+
end # Chars
|
9
|
+
|
10
|
+
# A collection of {Vedeu::Event} instances.
|
11
|
+
#
|
12
|
+
class Events < Vedeu::Collection
|
13
|
+
end # Events
|
14
|
+
|
15
|
+
# A collection of {Vedeu::Interface} instances.
|
16
|
+
#
|
17
|
+
class Interfaces < Vedeu::Collection
|
18
|
+
end # Interfaces
|
19
|
+
|
20
|
+
# A collection of {Vedeu::Key} instances.
|
21
|
+
#
|
22
|
+
class Keys < Vedeu::Collection
|
23
|
+
end # Keys
|
24
|
+
|
25
|
+
# A collection of {Vedeu::Line} instances.
|
26
|
+
#
|
27
|
+
class Lines < Vedeu::Collection
|
28
|
+
end # Lines
|
29
|
+
|
30
|
+
# A collection of {Vedeu::Stream} instances.
|
31
|
+
#
|
32
|
+
class Streams < Vedeu::Collection
|
33
|
+
end # Streams
|
34
|
+
|
35
|
+
end # Vedeu
|
@@ -16,7 +16,13 @@ module Vedeu
|
|
16
16
|
include Vedeu::Common
|
17
17
|
include Enumerable
|
18
18
|
|
19
|
-
|
19
|
+
# @!attribute [r] model
|
20
|
+
# @return [void]
|
21
|
+
attr_reader :model
|
22
|
+
|
23
|
+
# @!attribute [r] storage
|
24
|
+
# @return [void]
|
25
|
+
attr_reader :storage
|
20
26
|
|
21
27
|
# @param model [Class]
|
22
28
|
# @param storage [Class|Hash]
|
data/lib/vedeu/support/log.rb
CHANGED
@@ -138,7 +138,7 @@ module Vedeu
|
|
138
138
|
|
139
139
|
# @return [String]
|
140
140
|
def message_type(type)
|
141
|
-
Esc.send(message_types.fetch(type, :default)) { "[#{type}]".ljust(9) }
|
141
|
+
Vedeu::Esc.send(message_types.fetch(type, :default)) { "[#{type}]".ljust(9) }
|
142
142
|
end
|
143
143
|
|
144
144
|
# @return [Hash]
|
@@ -41,7 +41,13 @@ module Vedeu
|
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
|
-
|
44
|
+
# @!attribute [r] elements
|
45
|
+
# @return [Array]
|
46
|
+
attr_reader :elements
|
47
|
+
|
48
|
+
# @!attribute [r] label
|
49
|
+
# @return [String]
|
50
|
+
attr_reader :label
|
45
51
|
|
46
52
|
# @return [Boolean]
|
47
53
|
def one?
|
@@ -17,7 +17,7 @@ module Vedeu
|
|
17
17
|
# @param path [String]
|
18
18
|
# @return [Template]
|
19
19
|
def initialize(object, path)
|
20
|
-
@object, @path = object, path
|
20
|
+
@object, @path = object, path.to_s
|
21
21
|
end
|
22
22
|
|
23
23
|
# @return [void]
|
@@ -27,13 +27,25 @@ module Vedeu
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
|
30
|
+
# @!attribute [r] object
|
31
|
+
# @return [Class]
|
32
|
+
attr_reader :object
|
31
33
|
|
32
34
|
# @return [String]
|
33
35
|
def load
|
34
36
|
File.read(path)
|
35
37
|
end
|
36
38
|
|
39
|
+
# @raise [MissingRequired] when the path is empty.
|
40
|
+
# @raise [MissingRequired] when the path does not exist.
|
41
|
+
# @return [String]
|
42
|
+
def path
|
43
|
+
fail MissingRequired, 'No path to template specified.' if @path.empty?
|
44
|
+
fail MissingRequired, 'Template file cannot be found.' unless File.exist?(@path)
|
45
|
+
|
46
|
+
@path
|
47
|
+
end
|
48
|
+
|
37
49
|
end # Template
|
38
50
|
|
39
51
|
end # Vedeu
|
@@ -167,7 +167,7 @@ module Vedeu
|
|
167
167
|
#
|
168
168
|
# @return [Symbol]
|
169
169
|
def mode
|
170
|
-
@mode ||= Configuration.terminal_mode
|
170
|
+
@mode ||= Vedeu::Configuration.terminal_mode
|
171
171
|
end
|
172
172
|
|
173
173
|
# Returns a coordinate tuple of the format [y, x], where `y` is the row/line
|
@@ -214,8 +214,8 @@ module Vedeu
|
|
214
214
|
#
|
215
215
|
# @return [Fixnum]
|
216
216
|
def width
|
217
|
-
if Configuration.drb?
|
218
|
-
Configuration.drb_width
|
217
|
+
if Vedeu::Configuration.drb?
|
218
|
+
Vedeu::Configuration.drb_width
|
219
219
|
|
220
220
|
else
|
221
221
|
size.last
|
@@ -232,8 +232,8 @@ module Vedeu
|
|
232
232
|
#
|
233
233
|
# @return [Fixnum]
|
234
234
|
def height
|
235
|
-
if Configuration.drb?
|
236
|
-
Configuration.drb_height
|
235
|
+
if Vedeu::Configuration.drb?
|
236
|
+
Vedeu::Configuration.drb_height
|
237
237
|
|
238
238
|
else
|
239
239
|
size.first
|
@@ -259,7 +259,7 @@ module Vedeu
|
|
259
259
|
|
260
260
|
# @return [VirtualTerminal]
|
261
261
|
def virtual
|
262
|
-
@virtual ||= VirtualTerminal.new(height, width)
|
262
|
+
@virtual ||= Vedeu::VirtualTerminal.new(height, width)
|
263
263
|
end
|
264
264
|
|
265
265
|
end # Terminal
|
data/lib/vedeu/support/trace.rb
CHANGED
@@ -90,11 +90,11 @@ module Vedeu
|
|
90
90
|
valclass = value.class.to_s
|
91
91
|
output = (value.is_a?(Proc)) ? '#<Proc:...' : value.inspect
|
92
92
|
|
93
|
-
content = Esc.send(class_colour.fetch(valclass, :white)) { output }
|
93
|
+
content = Vedeu::Esc.send(class_colour.fetch(valclass, :white)) { output }
|
94
94
|
|
95
95
|
entries << sprintf("%33s %-10s = %s %s", " ",
|
96
|
-
Esc.green { variable },
|
97
|
-
Esc.magenta { valclass },
|
96
|
+
Vedeu::Esc.green { variable },
|
97
|
+
Vedeu::Esc.magenta { valclass },
|
98
98
|
content)
|
99
99
|
end
|
100
100
|
entries.join("\n")
|
@@ -232,7 +232,7 @@ module Vedeu
|
|
232
232
|
# 'Vedeu::Menu',
|
233
233
|
# 'Vedeu::Menus',
|
234
234
|
# 'Vedeu::Model',
|
235
|
-
# 'Vedeu::
|
235
|
+
# 'Vedeu::Collection',
|
236
236
|
# 'Vedeu::MoveCursor',
|
237
237
|
# 'Vedeu::Node',
|
238
238
|
# 'Vedeu::Output',
|
@@ -36,10 +36,10 @@ module Vedeu
|
|
36
36
|
# @return [String]
|
37
37
|
def cursor
|
38
38
|
if visible?
|
39
|
-
Esc.string('show_cursor')
|
39
|
+
Vedeu::Esc.string('show_cursor')
|
40
40
|
|
41
41
|
else
|
42
|
-
Esc.string('hide_cursor')
|
42
|
+
Vedeu::Esc.string('hide_cursor')
|
43
43
|
|
44
44
|
end
|
45
45
|
end
|
@@ -56,12 +56,12 @@ module Vedeu
|
|
56
56
|
|
57
57
|
# @return [Visible]
|
58
58
|
def hide
|
59
|
-
Visible.new(false)
|
59
|
+
Vedeu::Visible.new(false)
|
60
60
|
end
|
61
61
|
|
62
62
|
# @return [Visible]
|
63
63
|
def show
|
64
|
-
Visible.new(true)
|
64
|
+
Vedeu::Visible.new(true)
|
65
65
|
end
|
66
66
|
|
67
67
|
# @return [Visible]
|
@@ -32,6 +32,29 @@ module Vedeu
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
describe '#template_for' do
|
36
|
+
let(:_name) {}
|
37
|
+
let(:filename) {}
|
38
|
+
let(:object) {}
|
39
|
+
let(:content) { "Hydrogen\nCarbon\nOxygen\nNitrogen" }
|
40
|
+
let(:as_lines) {
|
41
|
+
[
|
42
|
+
Vedeu::Line.new({ streams: [Vedeu::Stream.new({ value: 'Hydrogen' })] }),
|
43
|
+
Vedeu::Line.new({ streams: [Vedeu::Stream.new({ value: 'Carbon' })] }),
|
44
|
+
Vedeu::Line.new({ streams: [Vedeu::Stream.new({ value: 'Oxygen' })] }),
|
45
|
+
Vedeu::Line.new({ streams: [Vedeu::Stream.new({ value: 'Nitrogen' })] })
|
46
|
+
]
|
47
|
+
}
|
48
|
+
|
49
|
+
before do
|
50
|
+
Vedeu::Template.expects(:parse).with(object, filename).returns(content)
|
51
|
+
end
|
52
|
+
|
53
|
+
subject { instance.template_for(_name, filename, object) }
|
54
|
+
|
55
|
+
it { subject.must_be_instance_of(Vedeu::Interfaces) }
|
56
|
+
end
|
57
|
+
|
35
58
|
end # Composition
|
36
59
|
|
37
60
|
end # DSL
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe IndexPosition do
|
6
|
+
|
7
|
+
let(:described) { Vedeu::IndexPosition }
|
8
|
+
let(:instance) { described.new(iy, ix, oy, ox) }
|
9
|
+
let(:iy) { 6 }
|
10
|
+
let(:ix) { 17 }
|
11
|
+
let(:oy) { 3 }
|
12
|
+
let(:ox) { 5 }
|
13
|
+
|
14
|
+
describe 'alias methods' do
|
15
|
+
it { instance.must_respond_to(:first) }
|
16
|
+
it { instance.must_respond_to(:last) }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#initialize' do
|
20
|
+
it { instance.must_be_instance_of(described) }
|
21
|
+
it { instance.instance_variable_get('@oy').must_equal(3) }
|
22
|
+
it { instance.instance_variable_get('@ox').must_equal(5) }
|
23
|
+
it { instance.instance_variable_get('@iy').must_equal(6) }
|
24
|
+
it { instance.instance_variable_get('@ix').must_equal(17) }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.[]' do
|
28
|
+
subject { described[iy, ix] }
|
29
|
+
|
30
|
+
it { subject.must_be_instance_of(Array) }
|
31
|
+
it { subject.must_equal([7, 18]) }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#[]' do
|
35
|
+
subject { instance.[] }
|
36
|
+
|
37
|
+
it { subject.must_be_instance_of(Array) }
|
38
|
+
it { subject.must_equal([9, 22]) }
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#to_position' do
|
42
|
+
subject { instance.to_position }
|
43
|
+
|
44
|
+
it { subject.must_be_instance_of(Vedeu::Position) }
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#y' do
|
48
|
+
subject { instance.y }
|
49
|
+
|
50
|
+
context 'when iy is <= 0' do
|
51
|
+
let(:iy) { -2 }
|
52
|
+
|
53
|
+
context 'and oy is <= 1' do
|
54
|
+
let(:oy) { -6 }
|
55
|
+
|
56
|
+
it { subject.must_equal(1) }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'and oy is > 1' do
|
60
|
+
let(:oy) { 4 }
|
61
|
+
|
62
|
+
it { subject.must_equal(4) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'when iy is > 0' do
|
67
|
+
let(:iy) { 3 }
|
68
|
+
|
69
|
+
context 'and oy is <= 1' do
|
70
|
+
let(:oy) { -7 }
|
71
|
+
|
72
|
+
it { subject.must_equal(4) }
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'and oy is > 1' do
|
76
|
+
let(:oy) { 5 }
|
77
|
+
|
78
|
+
it { subject.must_equal(8) }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe '#x' do
|
84
|
+
subject { instance.x }
|
85
|
+
|
86
|
+
context 'when ix is <= 0' do
|
87
|
+
let(:ix) { -2 }
|
88
|
+
|
89
|
+
context 'and ox is <= 1' do
|
90
|
+
let(:ox) { -6 }
|
91
|
+
|
92
|
+
it { subject.must_equal(1) }
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'and ox is > 1' do
|
96
|
+
let(:ox) { 4 }
|
97
|
+
|
98
|
+
it { subject.must_equal(4) }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'when ix is > 0' do
|
103
|
+
let(:ix) { 3 }
|
104
|
+
|
105
|
+
context 'and ox is <= 1' do
|
106
|
+
let(:ox) { -7 }
|
107
|
+
|
108
|
+
it { subject.must_equal(4) }
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'and ox is > 1' do
|
112
|
+
let(:ox) { 5 }
|
113
|
+
|
114
|
+
it { subject.must_equal(8) }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
end # IndexPosition
|
120
|
+
|
121
|
+
end # Vedeu
|
@@ -41,6 +41,12 @@ module Vedeu
|
|
41
41
|
it { subject.must_equal([5, 16]) }
|
42
42
|
end
|
43
43
|
|
44
|
+
describe '#to_position' do
|
45
|
+
subject { instance.to_position }
|
46
|
+
|
47
|
+
it { subject.must_be_instance_of(Vedeu::Position) }
|
48
|
+
end
|
49
|
+
|
44
50
|
describe 'attr_reader' do
|
45
51
|
context '#y' do
|
46
52
|
subject { instance.y }
|
@@ -46,7 +46,7 @@ module Vedeu
|
|
46
46
|
subject { instance.key_defined?(input) }
|
47
47
|
|
48
48
|
context 'when the input is defined' do
|
49
|
-
let(:keys) { Vedeu::
|
49
|
+
let(:keys) { Vedeu::Keys.new([key]) }
|
50
50
|
|
51
51
|
it { subject.must_be_instance_of(TrueClass) }
|
52
52
|
end
|
@@ -65,7 +65,7 @@ module Vedeu
|
|
65
65
|
let(:key_a) { Vedeu::Key.new('a') { :key_a } }
|
66
66
|
let(:key_b) { Vedeu::Key.new('b') { :key_b } }
|
67
67
|
let(:key_c) { Vedeu::Key.new('c') { :key_c } }
|
68
|
-
let(:keys) { Vedeu::
|
68
|
+
let(:keys) { Vedeu::Keys.new([key_a, key_b, key_c]) }
|
69
69
|
|
70
70
|
it { subject.must_be_instance_of(Array) }
|
71
71
|
it { subject.must_equal([:key_b]) }
|
@@ -8,15 +8,15 @@ module Vedeu
|
|
8
8
|
let(:instance) { described.new(attributes) }
|
9
9
|
let(:attributes) {
|
10
10
|
{
|
11
|
-
colour:
|
12
|
-
parent:
|
11
|
+
colour: colour,
|
12
|
+
parent: parent,
|
13
13
|
position: position,
|
14
|
-
style:
|
15
|
-
value:
|
14
|
+
style: style,
|
15
|
+
value: value,
|
16
16
|
}
|
17
17
|
}
|
18
18
|
let(:value) { 'a' }
|
19
|
-
let(:parent) { Line.new(parent_attributes) }
|
19
|
+
let(:parent) { Vedeu::Line.new(parent_attributes) }
|
20
20
|
let(:parent_attributes) {
|
21
21
|
{
|
22
22
|
streams: [],
|
@@ -25,6 +25,7 @@ module Vedeu
|
|
25
25
|
style: parent_style,
|
26
26
|
}
|
27
27
|
}
|
28
|
+
let(:border) { nil }
|
28
29
|
let(:colour) { nil }
|
29
30
|
let(:style) { nil }
|
30
31
|
let(:position) { nil }
|
@@ -32,7 +33,8 @@ module Vedeu
|
|
32
33
|
let(:parent_style) { nil }
|
33
34
|
|
34
35
|
describe '#initialize' do
|
35
|
-
it { instance.must_be_instance_of(
|
36
|
+
it { instance.must_be_instance_of(described) }
|
37
|
+
it { instance.instance_variable_get('@border').must_equal(border) }
|
36
38
|
it { instance.instance_variable_get('@colour').must_equal(colour) }
|
37
39
|
it { instance.instance_variable_get('@parent').must_equal(parent) }
|
38
40
|
it { instance.instance_variable_get('@style').must_equal(style) }
|
@@ -41,6 +43,20 @@ module Vedeu
|
|
41
43
|
it { instance.must_respond_to(:value) }
|
42
44
|
end
|
43
45
|
|
46
|
+
describe '#inspect' do
|
47
|
+
let(:colour) { Vedeu::Colour.new({ foreground: '#00ff00',
|
48
|
+
background: '#005500' }) }
|
49
|
+
let(:position) { Vedeu::Position.new(17, 2) }
|
50
|
+
let(:style) { Vedeu::Style.new('underline') }
|
51
|
+
|
52
|
+
|
53
|
+
subject { instance.inspect }
|
54
|
+
|
55
|
+
it { subject.must_equal(
|
56
|
+
"<Vedeu::Char '\\e[17;2H\\e[38;2;0;255;0m\\e[48;2;0;85;0m\\e[4ma\\e[17;2H'>"
|
57
|
+
) }
|
58
|
+
end
|
59
|
+
|
44
60
|
describe '#to_html' do
|
45
61
|
subject { instance.to_html }
|
46
62
|
|
@@ -53,7 +69,7 @@ module Vedeu
|
|
53
69
|
it { subject.must_be_instance_of(String) }
|
54
70
|
|
55
71
|
context 'when a position is specified' do
|
56
|
-
let(:position) { Position.new(17, 2) }
|
72
|
+
let(:position) { Vedeu::Position.new(17, 2) }
|
57
73
|
|
58
74
|
it { subject.must_equal("\e[17;2Ha\e[17;2H") }
|
59
75
|
end
|
@@ -65,12 +81,12 @@ module Vedeu
|
|
65
81
|
end
|
66
82
|
|
67
83
|
context 'when a colour is specified' do
|
68
|
-
let(:colour) { Colour.new({ foreground: '#00ff00',
|
69
|
-
|
84
|
+
let(:colour) { Vedeu::Colour.new({ foreground: '#00ff00',
|
85
|
+
background: '#005500' }) }
|
70
86
|
|
71
87
|
context 'when a parent colour is specified' do
|
72
|
-
let(:parent_colour) { Colour.new({ foreground: '#ff0000',
|
73
|
-
|
88
|
+
let(:parent_colour) { Vedeu::Colour.new({ foreground: '#ff0000',
|
89
|
+
background: '#550000' }) }
|
74
90
|
|
75
91
|
it { subject.must_equal("\e[38;2;0;255;0m\e[48;2;0;85;0ma\e[38;2;255;0;0m\e[48;2;85;0;0m") }
|
76
92
|
end
|
@@ -89,10 +105,10 @@ module Vedeu
|
|
89
105
|
end
|
90
106
|
|
91
107
|
context 'when a style is specified' do
|
92
|
-
let(:style) { Style.new('underline') }
|
108
|
+
let(:style) { Vedeu::Style.new('underline') }
|
93
109
|
|
94
110
|
context 'when a parent style is specified' do
|
95
|
-
let(:parent_style) { Style.new('bold') }
|
111
|
+
let(:parent_style) { Vedeu::Style.new('bold') }
|
96
112
|
|
97
113
|
it { subject.must_equal("\e[4ma\e[1m") }
|
98
114
|
end
|
@@ -118,7 +134,7 @@ module Vedeu
|
|
118
134
|
end
|
119
135
|
|
120
136
|
describe '#x' do
|
121
|
-
let(:position) { Position.new(17, 2) }
|
137
|
+
let(:position) { Vedeu::Position.new(17, 2) }
|
122
138
|
|
123
139
|
subject { instance.x }
|
124
140
|
|
@@ -134,7 +150,7 @@ module Vedeu
|
|
134
150
|
end
|
135
151
|
|
136
152
|
describe '#y' do
|
137
|
-
let(:position) { Position.new(17, 2) }
|
153
|
+
let(:position) { Vedeu::Position.new(17, 2) }
|
138
154
|
|
139
155
|
subject { instance.y }
|
140
156
|
|
File without changes
|
File without changes
|