vedeu 0.7.4 → 0.8.0
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/.rubocop.yml +3 -0
- data/docs/api.md +5 -1
- data/docs/borders.md +2 -26
- data/docs/dsl.md +4 -4
- data/docs/dsl_elements.md +100 -0
- data/docs/events/by_name/action.md +3 -0
- data/docs/events/by_name/cursor_hide.md +3 -0
- data/docs/events/by_name/cursor_reset.md +3 -0
- data/docs/events/by_name/cursor_show.md +3 -0
- data/docs/events/by_name/geometry_down.md +3 -0
- data/docs/events/by_name/geometry_left.md +3 -0
- data/docs/events/by_name/geometry_right.md +3 -0
- data/docs/events/by_name/geometry_up.md +3 -0
- data/docs/events/by_name/hide_view.md +3 -0
- data/docs/events/by_name/set_border_caption.md +13 -0
- data/docs/events/by_name/set_border_title.md +13 -0
- data/docs/events/by_name/show_view.md +3 -0
- data/docs/events/by_name/standalone.md +3 -0
- data/docs/events/by_name/toggle_view.md +3 -0
- data/docs/events/by_name/view_down.md +4 -0
- data/docs/events/by_name/view_left.md +4 -0
- data/docs/events/by_name/view_right.md +4 -0
- data/docs/events/by_name/view_up.md +4 -0
- data/examples/views/empty_template.rb +46 -0
- data/examples/views/expected/line.out +1 -0
- data/examples/views/expected/lines.out +1 -0
- data/examples/views/expected/lines_alignment.out +1 -0
- data/examples/views/line.rb +220 -0
- data/examples/views/lines.rb +281 -0
- data/examples/views/lines_alignment.rb +231 -0
- data/examples/views/lines_line_stream.rb +99 -0
- data/examples/views/lines_line_streams.rb +73 -0
- data/examples/views/lines_line_streams_stream.rb +83 -0
- data/examples/views/lines_line_streams_stream_stream.rb +53 -0
- data/examples/views/lines_streams.rb +50 -0
- data/examples/views/lines_streams_stream.rb +51 -0
- data/examples/views/runner.sh +27 -0
- data/lib/vedeu/all.rb +6 -2
- data/lib/vedeu/application/controller.rb +1 -1
- data/lib/vedeu/boolean.rb +35 -0
- data/lib/vedeu/borders/border.rb +3 -3
- data/lib/vedeu/borders/caption.rb +1 -1
- data/lib/vedeu/borders/dsl.rb +1 -20
- data/lib/vedeu/borders/title.rb +6 -8
- data/lib/vedeu/buffers/buffer.rb +2 -2
- data/lib/vedeu/buffers/refresh.rb +1 -1
- data/lib/vedeu/cells/border.rb +0 -11
- data/lib/vedeu/cells/empty.rb +4 -4
- data/lib/vedeu/{geometries/alignment → coercers}/alignment.rb +50 -53
- data/lib/vedeu/coercers/all.rb +16 -0
- data/lib/vedeu/coercers/colour.rb +78 -0
- data/lib/vedeu/coercers/colour_attributes.rb +122 -0
- data/lib/vedeu/coercers/horizontal_alignment.rb +28 -0
- data/lib/vedeu/coercers/vertical_alignment.rb +27 -0
- data/lib/vedeu/colours/all.rb +1 -0
- data/lib/vedeu/colours/background.rb +13 -2
- data/lib/vedeu/colours/colour.rb +16 -31
- data/lib/vedeu/colours/foreground.rb +13 -2
- data/lib/vedeu/colours/translator.rb +21 -59
- data/lib/vedeu/colours/validator.rb +84 -0
- data/lib/vedeu/common.rb +52 -0
- data/lib/vedeu/configuration/api.rb +4 -10
- data/lib/vedeu/configuration/configuration.rb +4 -4
- data/lib/vedeu/cursors/coordinate.rb +1 -1
- data/lib/vedeu/cursors/cursor.rb +1 -1
- data/lib/vedeu/cursors/dsl.rb +1 -28
- data/lib/vedeu/dsl/all.rb +7 -7
- data/lib/vedeu/dsl/attributes.rb +224 -0
- data/lib/vedeu/dsl/border.rb +127 -0
- data/lib/vedeu/dsl/cursors.rb +44 -0
- data/lib/vedeu/dsl/dsl.rb +9 -0
- data/lib/vedeu/dsl/elements.rb +335 -0
- data/lib/vedeu/dsl/geometry.rb +113 -0
- data/lib/vedeu/dsl/string/align.rb +127 -0
- data/lib/vedeu/dsl/string/all.rb +14 -0
- data/lib/vedeu/dsl/string/text.rb +107 -0
- data/lib/vedeu/dsl/string/truncate.rb +111 -0
- data/lib/vedeu/{output → dsl/string}/wordwrap.rb +10 -6
- data/lib/vedeu/dsl/view.rb +124 -248
- data/lib/vedeu/dsl/views.rb +244 -0
- data/lib/vedeu/editor/cursor.rb +1 -1
- data/lib/vedeu/editor/delete.rb +3 -1
- data/lib/vedeu/editor/insert.rb +22 -6
- data/lib/vedeu/editor/line.rb +15 -9
- data/lib/vedeu/editor/lines.rb +27 -18
- data/lib/vedeu/esc/actions.rb +73 -26
- data/lib/vedeu/esc/all.rb +2 -0
- data/lib/vedeu/esc/background.rb +219 -0
- data/lib/vedeu/esc/borders.rb +72 -26
- data/lib/vedeu/esc/colours.rb +26 -27
- data/lib/vedeu/esc/esc.rb +4 -4
- data/lib/vedeu/esc/foreground.rb +219 -0
- data/lib/vedeu/esc/mouse.rb +16 -13
- data/lib/vedeu/events/aliases.rb +2 -2
- data/lib/vedeu/events/event.rb +1 -1
- data/lib/vedeu/geometries/all.rb +0 -1
- data/lib/vedeu/geometries/area/dimension.rb +2 -2
- data/lib/vedeu/geometries/dsl/dsl.rb +3 -51
- data/lib/vedeu/geometries/dsl/validator.rb +4 -4
- data/lib/vedeu/geometries/geometry.rb +10 -10
- data/lib/vedeu/geometries/move.rb +4 -4
- data/lib/vedeu/groups/dsl.rb +1 -0
- data/lib/vedeu/groups/group.rb +1 -1
- data/lib/vedeu/input/all.rb +1 -0
- data/lib/vedeu/input/capture.rb +14 -10
- data/lib/vedeu/input/dsl.rb +20 -26
- data/lib/vedeu/input/key.rb +0 -6
- data/lib/vedeu/input/keymap.rb +4 -9
- data/lib/vedeu/input/keys.rb +13 -0
- data/lib/vedeu/input/mapper.rb +29 -14
- data/lib/vedeu/input/read.rb +4 -2
- data/lib/vedeu/interfaces/dsl.rb +23 -22
- data/lib/vedeu/interfaces/interface.rb +2 -2
- data/lib/vedeu/logging/debug.rb +33 -0
- data/lib/vedeu/logging/log.rb +42 -33
- data/lib/vedeu/menus/dsl.rb +7 -18
- data/lib/vedeu/menus/menu.rb +1 -1
- data/lib/vedeu/models/focus.rb +1 -1
- data/lib/vedeu/models/toggleable.rb +4 -4
- data/lib/vedeu/null/generic.rb +2 -2
- data/lib/vedeu/output/all.rb +0 -2
- data/lib/vedeu/output/compressor_cache.rb +1 -1
- data/lib/vedeu/output/output.rb +5 -20
- data/lib/vedeu/presentation/colour.rb +39 -7
- data/lib/vedeu/presentation/style.rb +25 -11
- data/lib/vedeu/renderers/html.rb +11 -11
- data/lib/vedeu/repositories/assemblage.rb +9 -0
- data/lib/vedeu/repositories/collection.rb +1 -0
- data/lib/vedeu/repositories/defaults.rb +4 -1
- data/lib/vedeu/repositories/model.rb +7 -37
- data/lib/vedeu/repositories/parent.rb +6 -6
- data/lib/vedeu/repositories/registerable.rb +16 -2
- data/lib/vedeu/repositories/repositories.rb +1 -1
- data/lib/vedeu/repositories/repository.rb +2 -12
- data/lib/vedeu/runtime/flags.rb +1 -1
- data/lib/vedeu/terminal/terminal.rb +7 -2
- data/lib/vedeu/version.rb +1 -1
- data/lib/vedeu/views/all.rb +4 -1
- data/lib/vedeu/views/char.rb +5 -4
- data/lib/vedeu/views/chars.rb +42 -0
- data/lib/vedeu/views/composition.rb +15 -30
- data/lib/vedeu/views/default_attributes.rb +74 -0
- data/lib/vedeu/views/html_char.rb +2 -2
- data/lib/vedeu/views/line.rb +27 -53
- data/lib/vedeu/views/lines.rb +31 -0
- data/lib/vedeu/views/stream.rb +31 -78
- data/lib/vedeu/views/streams.rb +42 -0
- data/lib/vedeu/views/value.rb +150 -0
- data/lib/vedeu/views/view.rb +32 -36
- data/lib/vedeu/views/{view_collection.rb → views.rb} +2 -2
- data/test/lib/vedeu/application/application_controller_test.rb +5 -0
- data/test/lib/vedeu/application/controller_test.rb +22 -28
- data/test/lib/vedeu/boolean_test.rb +57 -0
- data/test/lib/vedeu/borders/border_test.rb +130 -36
- data/test/lib/vedeu/borders/dsl_test.rb +63 -10
- data/test/lib/vedeu/borders/title_test.rb +16 -5
- data/test/lib/vedeu/buffers/buffer_test.rb +26 -10
- data/test/lib/vedeu/buffers/empty_test.rb +1 -1
- data/test/lib/vedeu/cells/border_test.rb +0 -6
- data/test/lib/vedeu/cells/clear_test.rb +2 -0
- data/test/lib/vedeu/cells/empty_test.rb +12 -2
- data/test/lib/vedeu/cells/escape_test.rb +7 -2
- data/test/lib/vedeu/{geometries/alignment → coercers}/alignment_test.rb +44 -19
- data/test/lib/vedeu/coercers/colour_attributes_test.rb +168 -0
- data/test/lib/vedeu/coercers/colour_test.rb +75 -0
- data/test/lib/vedeu/{geometries/alignment → coercers}/horizontal_alignment_test.rb +6 -6
- data/test/lib/vedeu/{geometries/alignment → coercers}/vertical_alignment_test.rb +6 -6
- data/test/lib/vedeu/colours/background_test.rb +17 -1
- data/test/lib/vedeu/colours/colour_test.rb +74 -2
- data/test/lib/vedeu/colours/foreground_test.rb +17 -1
- data/test/lib/vedeu/colours/repository_test.rb +1 -1
- data/test/lib/vedeu/colours/translator_test.rb +8 -1
- data/test/lib/vedeu/colours/validator_test.rb +60 -0
- data/test/lib/vedeu/common_test.rb +138 -0
- data/test/lib/vedeu/configuration/api_test.rb +96 -51
- data/test/lib/vedeu/cursors/coordinate_test.rb +58 -117
- data/test/lib/vedeu/cursors/cursor_test.rb +46 -17
- data/test/lib/vedeu/cursors/dsl_test.rb +19 -5
- data/test/lib/vedeu/distributed/client_test.rb +8 -3
- data/test/lib/vedeu/distributed/server_test.rb +8 -0
- data/test/lib/vedeu/distributed/test_application_test.rb +62 -19
- data/test/lib/vedeu/distributed/uri_test.rb +4 -2
- data/test/lib/vedeu/dsl/attributes_test.rb +212 -0
- data/test/lib/vedeu/dsl/border_test.rb +51 -0
- data/test/lib/vedeu/dsl/{lines_test.rb → cursors_test.rb} +2 -2
- data/test/lib/vedeu/dsl/dsl_test.rb +44 -0
- data/test/lib/vedeu/dsl/elements_test.rb +118 -0
- data/test/lib/vedeu/dsl/geometry_test.rb +35 -0
- data/test/lib/vedeu/dsl/presentation_test.rb +52 -11
- data/test/lib/vedeu/dsl/string/align_test.rb +147 -0
- data/test/lib/vedeu/dsl/string/text_test.rb +213 -0
- data/test/lib/vedeu/dsl/string/truncate_test.rb +97 -0
- data/test/lib/vedeu/{output → dsl/string}/wordwrap_test.rb +3 -3
- data/test/lib/vedeu/dsl/view_test.rb +30 -42
- data/test/lib/vedeu/dsl/views_test.rb +61 -0
- data/test/lib/vedeu/editor/cursor_test.rb +30 -12
- data/test/lib/vedeu/editor/document_test.rb +18 -10
- data/test/lib/vedeu/editor/line_test.rb +4 -1
- data/test/lib/vedeu/editor/lines_test.rb +11 -3
- data/test/lib/vedeu/esc/actions_test.rb +42 -4
- data/test/lib/vedeu/esc/background_test.rb +185 -0
- data/test/lib/vedeu/esc/borders_test.rb +37 -9
- data/test/lib/vedeu/esc/colours_test.rb +0 -59
- data/test/lib/vedeu/esc/foreground_test.rb +185 -0
- data/test/lib/vedeu/esc/mouse_test.rb +9 -4
- data/test/lib/vedeu/geometries/area/area_test.rb +34 -11
- data/test/lib/vedeu/geometries/dsl/dsl_test.rb +52 -61
- data/test/lib/vedeu/geometries/geometry_test.rb +62 -18
- data/test/lib/vedeu/geometries/position_test.rb +14 -7
- data/test/lib/vedeu/groups/dsl_test.rb +24 -15
- data/test/lib/vedeu/groups/group_test.rb +18 -8
- data/test/lib/vedeu/input/dsl_test.rb +33 -16
- data/test/lib/vedeu/input/key_test.rb +8 -1
- data/test/lib/vedeu/input/keymap_test.rb +4 -1
- data/test/lib/vedeu/input/keys_test.rb +16 -0
- data/test/lib/vedeu/interfaces/dsl_test.rb +24 -30
- data/test/lib/vedeu/interfaces/interface_test.rb +79 -24
- data/test/lib/vedeu/logging/ips_test.rb +10 -1
- data/test/lib/vedeu/menus/dsl_test.rb +24 -23
- data/test/lib/vedeu/menus/menu_test.rb +18 -8
- data/test/lib/vedeu/models/page_test.rb +5 -1
- data/test/lib/vedeu/models/row_test.rb +4 -0
- data/test/lib/vedeu/models/toggleable_test.rb +10 -6
- data/test/lib/vedeu/null/generic_test.rb +90 -1
- data/test/lib/vedeu/output/viewport_test.rb +11 -10
- data/test/lib/vedeu/plugins/plugin_test.rb +22 -9
- data/test/lib/vedeu/presentation/colour_test.rb +2 -1
- data/test/lib/vedeu/presentation/presentation_test.rb +13 -8
- data/test/lib/vedeu/presentation/style_test.rb +28 -13
- data/test/lib/vedeu/renderers/file_test.rb +4 -2
- data/test/lib/vedeu/renderers/options_test.rb +1 -1
- data/test/lib/vedeu/repositories/assemblage_test.rb +18 -0
- data/test/lib/vedeu/repositories/collection_test.rb +34 -10
- data/test/lib/vedeu/repositories/defaults_test.rb +6 -0
- data/test/lib/vedeu/repositories/model_test.rb +4 -13
- data/test/lib/vedeu/repositories/repository_test.rb +12 -5
- data/test/lib/vedeu/repositories/store_test.rb +9 -0
- data/test/lib/vedeu/runtime/flags_test.rb +6 -4
- data/test/lib/vedeu/runtime/launcher_test.rb +1 -1
- data/test/lib/vedeu/templating/helpers_test.rb +93 -65
- data/test/lib/vedeu/templating/view_template_test.rb +26 -26
- data/test/lib/vedeu/views/char_test.rb +36 -11
- data/test/lib/vedeu/views/chars_test.rb +71 -0
- data/test/lib/vedeu/views/composition_test.rb +17 -16
- data/test/lib/vedeu/views/default_attributes_test.rb +97 -0
- data/test/lib/vedeu/views/line_test.rb +20 -75
- data/test/lib/vedeu/views/lines_test.rb +47 -0
- data/test/lib/vedeu/views/stream_test.rb +38 -63
- data/test/lib/vedeu/views/streams_test.rb +9 -0
- data/test/lib/vedeu/views/value_test.rb +112 -0
- data/test/lib/vedeu/views/view_test.rb +67 -45
- data/test/lib/vedeu/views/views_test.rb +22 -0
- data/test/support/examples/material_colours_app.rb +2 -2
- data/test/support/helpers/model_test_class.rb +1 -0
- data/test/test_helper.rb +3 -1
- data/vedeu.gemspec +2 -2
- metadata +124 -58
- data/lib/vedeu/dsl/composition.rb +0 -150
- data/lib/vedeu/dsl/line.rb +0 -119
- data/lib/vedeu/dsl/lines.rb +0 -23
- data/lib/vedeu/dsl/shared.rb +0 -85
- data/lib/vedeu/dsl/stream.rb +0 -40
- data/lib/vedeu/dsl/streams.rb +0 -23
- data/lib/vedeu/dsl/text.rb +0 -98
- data/lib/vedeu/geometries/alignment/all.rb +0 -11
- data/lib/vedeu/geometries/alignment/horizontal_alignment.rb +0 -27
- data/lib/vedeu/geometries/alignment/vertical_alignment.rb +0 -27
- data/lib/vedeu/output/text.rb +0 -275
- data/test/lib/vedeu/dsl/composition_test.rb +0 -67
- data/test/lib/vedeu/dsl/line_test.rb +0 -85
- data/test/lib/vedeu/dsl/shared_test.rb +0 -66
- data/test/lib/vedeu/dsl/stream_test.rb +0 -30
- data/test/lib/vedeu/dsl/streams_test.rb +0 -13
- data/test/lib/vedeu/dsl/text_test.rb +0 -122
- data/test/lib/vedeu/output/text_test.rb +0 -156
- data/test/lib/vedeu/views/view_collection_test.rb +0 -13
data/lib/vedeu/views/lines.rb
CHANGED
@@ -8,6 +8,37 @@ module Vedeu
|
|
8
8
|
#
|
9
9
|
class Lines < Vedeu::Repositories::Collection
|
10
10
|
|
11
|
+
# @param (see Vedeu::Repositories::Collection#initialize)
|
12
|
+
# @raise [Vedeu::Error::InvalidSyntax] When the collection
|
13
|
+
# cannot be coerced since it is unrecognised or unsupported.
|
14
|
+
# @return [Vedeu::Views::Lines]
|
15
|
+
def self.coerce(collection = [], parent = nil, name = nil)
|
16
|
+
if collection.is_a?(Vedeu::Views::Lines)
|
17
|
+
collection
|
18
|
+
|
19
|
+
elsif collection.is_a?(Array)
|
20
|
+
return new(collection, parent, name) if collection.empty?
|
21
|
+
|
22
|
+
coerced_collection = []
|
23
|
+
collection.each do |element|
|
24
|
+
coerced_collection << element if element.is_a?(Vedeu::Views::Line)
|
25
|
+
end
|
26
|
+
|
27
|
+
new(coerced_collection, parent, name)
|
28
|
+
|
29
|
+
elsif collection.is_a?(Vedeu::Views::Line)
|
30
|
+
new([collection], parent, name)
|
31
|
+
|
32
|
+
else
|
33
|
+
fail Vedeu::Error::InvalidSyntax,
|
34
|
+
'Cannot coerce for Vedeu::View::Lines, as collection ' \
|
35
|
+
'unrecognised.'.freeze
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
alias_method :lines, :value
|
41
|
+
|
11
42
|
end # Lines
|
12
43
|
|
13
44
|
end # Views
|
data/lib/vedeu/views/stream.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'vedeu/dsl/all'
|
2
|
+
|
1
3
|
module Vedeu
|
2
4
|
|
3
5
|
module Views
|
@@ -8,30 +10,50 @@ module Vedeu
|
|
8
10
|
#
|
9
11
|
class Stream
|
10
12
|
|
13
|
+
# Provides DSL methods for Vedeu::Views::Stream objects.
|
14
|
+
#
|
15
|
+
# @api public
|
16
|
+
#
|
17
|
+
class DSL
|
18
|
+
|
19
|
+
include Vedeu::DSL
|
20
|
+
include Vedeu::DSL::Elements
|
21
|
+
|
22
|
+
end # DSL
|
23
|
+
|
24
|
+
extend Forwardable
|
25
|
+
include Vedeu::Views::DefaultAttributes
|
11
26
|
include Vedeu::Repositories::Model
|
12
27
|
include Vedeu::Repositories::Parent
|
13
28
|
include Vedeu::Presentation
|
14
29
|
|
30
|
+
include Vedeu::Views::Value
|
15
31
|
collection Vedeu::Views::Chars
|
16
|
-
|
32
|
+
deputy Vedeu::Views::Stream::DSL
|
33
|
+
entity Vedeu::Views::Char
|
34
|
+
parent Vedeu::Views::Streams
|
17
35
|
|
18
|
-
|
19
|
-
|
20
|
-
|
36
|
+
def_delegators :value,
|
37
|
+
:chars,
|
38
|
+
:size
|
21
39
|
|
22
|
-
# @!attribute [rw] value
|
23
|
-
# @return [String]
|
24
|
-
attr_accessor :value
|
25
40
|
alias_method :content, :value
|
26
41
|
alias_method :text, :value
|
42
|
+
alias_method :chars=, :value=
|
43
|
+
alias_method :chars?, :value?
|
44
|
+
|
45
|
+
# @!attribute [w] value
|
46
|
+
# @return [String]
|
47
|
+
attr_writer :value
|
27
48
|
|
28
49
|
# Returns a new instance of Vedeu::Views::Stream.
|
29
50
|
#
|
30
51
|
# @param attributes [Hash]
|
31
52
|
# @option attributes client [void]
|
32
53
|
# @option attributes colour [Vedeu::Colours::Colour]
|
33
|
-
# @option attributes
|
54
|
+
# @option attributes name [String|Symbol]
|
34
55
|
# @option attributes parent [Vedeu::Views::Line]
|
56
|
+
# @option attributes style [Vedeu::Presentation::Style]
|
35
57
|
# @option attributes value [String]
|
36
58
|
# @return [Vedeu::Views::Stream]
|
37
59
|
def initialize(attributes = {})
|
@@ -47,84 +69,15 @@ module Vedeu
|
|
47
69
|
end
|
48
70
|
alias_method :<<, :add
|
49
71
|
|
50
|
-
# @return [Hash<Symbol => void>]
|
51
|
-
def attributes
|
52
|
-
{
|
53
|
-
client: @client,
|
54
|
-
colour: colour,
|
55
|
-
name: name,
|
56
|
-
parent: parent,
|
57
|
-
style: style,
|
58
|
-
value: value,
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
# Returns an array of characters, each element is the escape
|
63
|
-
# sequences of colours and styles for this stream, the character
|
64
|
-
# itself, and the escape sequences of colours and styles for the
|
65
|
-
# parent of the stream ({Vedeu::Views::Line}).
|
66
|
-
#
|
67
|
-
# @return [Array]
|
68
|
-
def chars
|
69
|
-
return [] if value.empty?
|
70
|
-
|
71
|
-
@chars ||= value.chars.map do |char|
|
72
|
-
member.new(value: char,
|
73
|
-
name: name,
|
74
|
-
parent: parent,
|
75
|
-
colour: colour,
|
76
|
-
style: style,
|
77
|
-
position: nil)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# Returns a DSL instance responsible for defining the DSL
|
82
|
-
# methods of this model.
|
83
|
-
#
|
84
|
-
# @param client [Object|NilClass] The client binding represents
|
85
|
-
# the client application object that is currently invoking a
|
86
|
-
# DSL method. It is required so that we can send messages to
|
87
|
-
# the client application object should we need to.
|
88
|
-
# @return [Vedeu::DSL::Stream] The DSL instance for this model.
|
89
|
-
def deputy(client = nil)
|
90
|
-
Vedeu::DSL::Stream.new(self, client)
|
91
|
-
end
|
92
|
-
|
93
72
|
# An object is equal when its values are the same.
|
94
73
|
#
|
95
74
|
# @param other [Vedeu::Views::Char]
|
96
75
|
# @return [Boolean]
|
97
76
|
def eql?(other)
|
98
|
-
self.class == other.class && value == other.value
|
99
|
-
colour == other.colour && style == other.style &&
|
100
|
-
parent == other.parent
|
77
|
+
self.class == other.class && value == other.value
|
101
78
|
end
|
102
79
|
alias_method :==, :eql?
|
103
80
|
|
104
|
-
# Returns the size of the content in characters without
|
105
|
-
# formatting.
|
106
|
-
#
|
107
|
-
# @return [Fixnum]
|
108
|
-
def size
|
109
|
-
value.size
|
110
|
-
end
|
111
|
-
|
112
|
-
private
|
113
|
-
|
114
|
-
# The default values for a new instance of this class.
|
115
|
-
#
|
116
|
-
# @return [Hash]
|
117
|
-
def defaults
|
118
|
-
{
|
119
|
-
client: nil,
|
120
|
-
colour: nil,
|
121
|
-
name: nil,
|
122
|
-
parent: nil,
|
123
|
-
style: nil,
|
124
|
-
value: '',
|
125
|
-
}
|
126
|
-
end
|
127
|
-
|
128
81
|
end # Stream
|
129
82
|
|
130
83
|
end # Views
|
data/lib/vedeu/views/streams.rb
CHANGED
@@ -8,6 +8,48 @@ module Vedeu
|
|
8
8
|
#
|
9
9
|
class Streams < Vedeu::Repositories::Collection
|
10
10
|
|
11
|
+
# @param (see Vedeu::Repositories::Collection#initialize)
|
12
|
+
# @raise [Vedeu::Error::InvalidSyntax] When the collection
|
13
|
+
# cannot be coerced since it is unrecognised or unsupported.
|
14
|
+
# @return [Vedeu::Views::Streams]
|
15
|
+
def self.coerce(collection = [], parent = nil, name = nil)
|
16
|
+
if collection.is_a?(Vedeu::Views::Streams)
|
17
|
+
collection
|
18
|
+
|
19
|
+
elsif collection.is_a?(Array)
|
20
|
+
return new(collection, parent, name) if collection.empty?
|
21
|
+
|
22
|
+
coerced_collection = []
|
23
|
+
collection.each do |element|
|
24
|
+
if element.is_a?(Vedeu::Views::Stream)
|
25
|
+
coerced_collection << element
|
26
|
+
|
27
|
+
elsif element.is_a?(String)
|
28
|
+
coerced_collection << Vedeu::Views::Stream.new(value: element)
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
new(coerced_collection, parent, name)
|
34
|
+
|
35
|
+
elsif collection.is_a?(Vedeu::Views::Stream)
|
36
|
+
new([collection], parent, name)
|
37
|
+
|
38
|
+
elsif collection.is_a?(String)
|
39
|
+
return new([], parent, name) if collection.empty?
|
40
|
+
|
41
|
+
new([Vedeu::Views::Stream.new(value: collection)], parent, name)
|
42
|
+
|
43
|
+
else
|
44
|
+
fail Vedeu::Error::InvalidSyntax,
|
45
|
+
'Cannot coerce for Vedeu::View::Streams, as collection ' \
|
46
|
+
'unrecognised.'.freeze
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
alias_method :streams, :value
|
52
|
+
|
11
53
|
end # Streams
|
12
54
|
|
13
55
|
end # Views
|
@@ -0,0 +1,150 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Views
|
4
|
+
|
5
|
+
# Provides view model methods for Vedeu::Views.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
#
|
9
|
+
module Value
|
10
|
+
|
11
|
+
# Provides view model class methods for Vedeu::Views.
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
#
|
15
|
+
module ClassMethods
|
16
|
+
|
17
|
+
# @!attribute [w] collection_klass
|
18
|
+
# @return [void]
|
19
|
+
attr_reader :collection_klass
|
20
|
+
|
21
|
+
# @!attribute [w] deputy_klass
|
22
|
+
# @return [void]
|
23
|
+
attr_reader :deputy_klass
|
24
|
+
|
25
|
+
# @!attribute [w] entity_klass
|
26
|
+
# @return [void]
|
27
|
+
attr_reader :entity_klass
|
28
|
+
|
29
|
+
# @!attribute [w] parent_klass
|
30
|
+
# @return [void]
|
31
|
+
attr_reader :parent_klass
|
32
|
+
|
33
|
+
# @param model [void]
|
34
|
+
# @return [void]
|
35
|
+
def collection(model)
|
36
|
+
@collection_klass = model
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param model [void]
|
40
|
+
# @return [void]
|
41
|
+
def deputy(model)
|
42
|
+
@deputy_klass = model
|
43
|
+
end
|
44
|
+
|
45
|
+
# @param model [void]
|
46
|
+
# @return [void]
|
47
|
+
def entity(model)
|
48
|
+
@entity_klass = model
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param model [void]
|
52
|
+
# @return [void]
|
53
|
+
def parent(model)
|
54
|
+
@parent_klass = model
|
55
|
+
end
|
56
|
+
|
57
|
+
end # ClassMethods
|
58
|
+
|
59
|
+
# Provides view model instance methods for Vedeu::Views.
|
60
|
+
#
|
61
|
+
# @api private
|
62
|
+
#
|
63
|
+
module InstanceMethods
|
64
|
+
|
65
|
+
include Vedeu::Common
|
66
|
+
|
67
|
+
# The client binding represents the client application object
|
68
|
+
# that is currently invoking a DSL method. It is required so
|
69
|
+
# that we can send messages to the client application object
|
70
|
+
# should we need to.
|
71
|
+
#
|
72
|
+
# @!attribute [rw] client
|
73
|
+
# @return [void]
|
74
|
+
attr_accessor :client
|
75
|
+
|
76
|
+
# @!attribute [rw] parent
|
77
|
+
# @return [void]
|
78
|
+
attr_accessor :parent
|
79
|
+
|
80
|
+
# @return [Boolean]
|
81
|
+
def client?
|
82
|
+
present?(client)
|
83
|
+
end
|
84
|
+
|
85
|
+
# @return [void]
|
86
|
+
def collection
|
87
|
+
self.class.collection_klass
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns a DSL instance responsible for defining the DSL
|
91
|
+
# methods of this model.
|
92
|
+
#
|
93
|
+
# @return [void]
|
94
|
+
def deputy
|
95
|
+
self.class.deputy_klass.new(self, client)
|
96
|
+
end
|
97
|
+
|
98
|
+
# @return [void]
|
99
|
+
def entity
|
100
|
+
self.class.entity_klass
|
101
|
+
end
|
102
|
+
|
103
|
+
# @return [Boolean]
|
104
|
+
def parent?
|
105
|
+
present?(parent)
|
106
|
+
end
|
107
|
+
|
108
|
+
# @return [void]
|
109
|
+
def value
|
110
|
+
@_value ||= if present?(@value)
|
111
|
+
collection.coerce(@value, self)
|
112
|
+
|
113
|
+
else
|
114
|
+
collection.coerce([], self)
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# @param value [void]
|
120
|
+
# @return [void]
|
121
|
+
def value=(value)
|
122
|
+
@_value = @value = collection.coerce(value, self)
|
123
|
+
end
|
124
|
+
|
125
|
+
# Returns a boolean indicating whether this model has a
|
126
|
+
# non-empty value.
|
127
|
+
#
|
128
|
+
# @return [Boolean]
|
129
|
+
def value?
|
130
|
+
value.any?
|
131
|
+
end
|
132
|
+
|
133
|
+
end # InstanceMethods
|
134
|
+
|
135
|
+
# When this module is included in a class, provide ClassMethods
|
136
|
+
# as class methods and InstanceMethods as instance methods for
|
137
|
+
# the given class.
|
138
|
+
#
|
139
|
+
# @param klass [Class]
|
140
|
+
# @return [void]
|
141
|
+
def self.included(klass)
|
142
|
+
klass.extend(Vedeu::Views::Value::ClassMethods)
|
143
|
+
klass.include(Vedeu::Views::Value::InstanceMethods)
|
144
|
+
end
|
145
|
+
|
146
|
+
end # Value
|
147
|
+
|
148
|
+
end # Views
|
149
|
+
|
150
|
+
end # Vedeu
|
data/lib/vedeu/views/view.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'vedeu/dsl/all'
|
2
|
+
|
1
3
|
module Vedeu
|
2
4
|
|
3
5
|
module Views
|
@@ -7,16 +9,36 @@ module Vedeu
|
|
7
9
|
#
|
8
10
|
class View
|
9
11
|
|
12
|
+
# Provides DSL methods for Vedeu::Views::View objects.
|
13
|
+
#
|
14
|
+
# @api public
|
15
|
+
#
|
16
|
+
class DSL
|
17
|
+
|
18
|
+
include Vedeu::DSL
|
19
|
+
include Vedeu::DSL::Border
|
20
|
+
include Vedeu::DSL::Cursors
|
21
|
+
include Vedeu::DSL::Elements
|
22
|
+
include Vedeu::DSL::Geometry
|
23
|
+
include Vedeu::DSL::Use
|
24
|
+
|
25
|
+
end # DSL
|
26
|
+
|
27
|
+
extend Forwardable
|
10
28
|
include Vedeu::Repositories::Model
|
11
29
|
include Vedeu::Repositories::Parent
|
12
30
|
include Vedeu::Presentation
|
31
|
+
include Vedeu::Views::Value
|
13
32
|
|
14
33
|
collection Vedeu::Views::Lines
|
15
|
-
|
34
|
+
deputy Vedeu::Views::View::DSL
|
35
|
+
entity Vedeu::Views::Line
|
16
36
|
|
17
|
-
|
18
|
-
|
19
|
-
|
37
|
+
def_delegators :value,
|
38
|
+
:lines
|
39
|
+
|
40
|
+
alias_method :lines=, :value=
|
41
|
+
alias_method :lines?, :value?
|
20
42
|
|
21
43
|
# @!attribute [rw] cursor_visible
|
22
44
|
# @return [Boolean]
|
@@ -24,17 +46,9 @@ module Vedeu
|
|
24
46
|
alias_method :cursor_visible?, :cursor_visible
|
25
47
|
|
26
48
|
# @!attribute [rw] name
|
27
|
-
# @return [String]
|
49
|
+
# @return [String|Symbol]
|
28
50
|
attr_accessor :name
|
29
51
|
|
30
|
-
# @!attribute [rw] parent
|
31
|
-
# @return [Vedeu::Views::Composition]
|
32
|
-
attr_accessor :parent
|
33
|
-
|
34
|
-
# @!attribute [w] lines
|
35
|
-
# @return [Array<Vedeu::Views::Line>]
|
36
|
-
attr_writer :lines
|
37
|
-
|
38
52
|
# @!attribute [rw] zindex
|
39
53
|
# @return [Fixnum]
|
40
54
|
attr_accessor :zindex
|
@@ -60,14 +74,14 @@ module Vedeu
|
|
60
74
|
# @param child [Vedeu::Views::Line]
|
61
75
|
# @return [Vedeu::Views::Lines]
|
62
76
|
def add(child)
|
63
|
-
@
|
77
|
+
@_value = value.add(child)
|
64
78
|
end
|
65
79
|
alias_method :<<, :add
|
66
80
|
|
67
81
|
# @return [Hash]
|
68
82
|
def attributes
|
69
83
|
{
|
70
|
-
client:
|
84
|
+
client: client,
|
71
85
|
colour: colour,
|
72
86
|
cursor_visible: cursor_visible,
|
73
87
|
name: name,
|
@@ -78,26 +92,8 @@ module Vedeu
|
|
78
92
|
}
|
79
93
|
end
|
80
94
|
|
81
|
-
# Returns a DSL instance responsible for defining the DSL
|
82
|
-
# methods of this model.
|
83
|
-
#
|
84
|
-
# @param client [Object|NilClass] The client binding represents
|
85
|
-
# the client application object that is currently invoking a
|
86
|
-
# DSL method. It is required so that we can send messages to
|
87
|
-
# the client application object should we need to.
|
88
|
-
# @return [Vedeu::DSL::View] The DSL instance for this model.
|
89
|
-
def deputy(client = nil)
|
90
|
-
Vedeu::DSL::View.new(self, client)
|
91
|
-
end
|
92
|
-
|
93
|
-
# @return [Vedeu::Views::Lines]
|
94
|
-
def value
|
95
|
-
collection.coerce(@value, self)
|
96
|
-
end
|
97
|
-
alias_method :lines, :value
|
98
|
-
|
99
95
|
# Store the view and immediately refresh it; causing to be
|
100
|
-
# pushed to the Terminal. Called by {Vedeu::DSL::
|
96
|
+
# pushed to the Terminal. Called by {Vedeu::DSL::Views.renders}.
|
101
97
|
#
|
102
98
|
# @return [Vedeu::Views::View]
|
103
99
|
def store_immediate
|
@@ -110,7 +106,7 @@ module Vedeu
|
|
110
106
|
|
111
107
|
# When a name is given, the view is stored with this name. This
|
112
108
|
# view will be shown next time a refresh event is triggered with
|
113
|
-
# this name. Called by {Vedeu::DSL::
|
109
|
+
# this name. Called by {Vedeu::DSL::Views.views}.
|
114
110
|
#
|
115
111
|
# @raise [Vedeu::Error::InvalidSyntax] The name is not defined.
|
116
112
|
# @return [Vedeu::Views::View]
|
@@ -146,7 +142,7 @@ module Vedeu
|
|
146
142
|
client: nil,
|
147
143
|
colour: Vedeu::Configuration.colour,
|
148
144
|
cursor_visible: true,
|
149
|
-
name: '',
|
145
|
+
name: ''.freeze,
|
150
146
|
parent: nil,
|
151
147
|
style: :normal,
|
152
148
|
value: [],
|