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
@@ -17,7 +17,7 @@ module Vedeu
|
|
17
17
|
# @return [Symbol]
|
18
18
|
def null(klass, attributes = {})
|
19
19
|
define_method(:null_model) { klass }
|
20
|
-
define_method(:null_attributes) { attributes }
|
20
|
+
define_method(:null_attributes) { attributes || {} }
|
21
21
|
end
|
22
22
|
|
23
23
|
# The real model is the usual model to use for a given
|
@@ -62,13 +62,27 @@ module Vedeu
|
|
62
62
|
|
63
63
|
end # ClassMethods
|
64
64
|
|
65
|
+
# When {Vedeu::Repositories::Registerable} is included in a
|
66
|
+
# class, the methods within this module are included as instance
|
67
|
+
# methods on that class.
|
68
|
+
#
|
69
|
+
module InstanceMethods
|
70
|
+
|
71
|
+
# @return [Boolean]
|
72
|
+
def null_model?
|
73
|
+
self.respond_to?(:null_model) && present?(:null_model)
|
74
|
+
end
|
75
|
+
|
76
|
+
end # InstanceMethods
|
77
|
+
|
65
78
|
# When this module is included in a class, provide ClassMethods
|
66
79
|
# as class methods for the class.
|
67
80
|
#
|
68
81
|
# @param klass [Class]
|
69
82
|
# @return [void]
|
70
83
|
def self.included(klass)
|
71
|
-
klass.
|
84
|
+
klass.extend(Vedeu::Repositories::Registerable::ClassMethods)
|
85
|
+
klass.include(Vedeu::Repositories::Registerable::InstanceMethods)
|
72
86
|
end
|
73
87
|
|
74
88
|
end # Registerable
|
@@ -67,17 +67,7 @@ module Vedeu
|
|
67
67
|
|
68
68
|
return find(name) if registered?(name)
|
69
69
|
|
70
|
-
|
71
|
-
null_attributes.merge!(name: name)
|
72
|
-
|
73
|
-
else
|
74
|
-
{
|
75
|
-
name: name
|
76
|
-
}
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
null_model.new(attrs)
|
70
|
+
null_model.new(null_attributes.merge(name: name)) if null_model?
|
81
71
|
end
|
82
72
|
|
83
73
|
# Return the model for the interface currently in focus.
|
@@ -143,7 +133,7 @@ module Vedeu
|
|
143
133
|
# when the model does not exist.
|
144
134
|
#
|
145
135
|
# @param name [String|Symbol]
|
146
|
-
# @return [Hash|
|
136
|
+
# @return [Hash|Boolean]
|
147
137
|
def remove(name)
|
148
138
|
return false if empty?
|
149
139
|
return false unless registered?(name)
|
data/lib/vedeu/runtime/flags.rb
CHANGED
@@ -35,7 +35,12 @@ module Vedeu
|
|
35
35
|
# @param streams [String|Array]
|
36
36
|
# @return [Array]
|
37
37
|
def output(*streams)
|
38
|
-
streams.each
|
38
|
+
streams.each do |stream|
|
39
|
+
Vedeu.log(type: :output,
|
40
|
+
message: "Writing to terminal #{stream.size} bytes".freeze)
|
41
|
+
|
42
|
+
console.print(stream)
|
43
|
+
end
|
39
44
|
end
|
40
45
|
alias_method :write, :output
|
41
46
|
|
@@ -47,7 +52,7 @@ module Vedeu
|
|
47
52
|
# @example
|
48
53
|
# Vedeu.resize
|
49
54
|
#
|
50
|
-
# @return [
|
55
|
+
# @return [Boolean]
|
51
56
|
def resize
|
52
57
|
Vedeu.trigger(:_clear_)
|
53
58
|
|
data/lib/vedeu/version.rb
CHANGED
data/lib/vedeu/views/all.rb
CHANGED
@@ -8,6 +8,9 @@ module Vedeu
|
|
8
8
|
|
9
9
|
end # Vedeu
|
10
10
|
|
11
|
+
require 'vedeu/views/default_attributes'
|
12
|
+
require 'vedeu/views/value'
|
13
|
+
|
11
14
|
require 'vedeu/views/chars'
|
12
15
|
require 'vedeu/views/char'
|
13
16
|
require 'vedeu/views/html_char'
|
@@ -15,6 +18,6 @@ require 'vedeu/views/streams'
|
|
15
18
|
require 'vedeu/views/stream'
|
16
19
|
require 'vedeu/views/lines'
|
17
20
|
require 'vedeu/views/line'
|
18
|
-
require 'vedeu/views/
|
21
|
+
require 'vedeu/views/views'
|
19
22
|
require 'vedeu/views/view'
|
20
23
|
require 'vedeu/views/composition'
|
data/lib/vedeu/views/char.rb
CHANGED
@@ -14,7 +14,6 @@ module Vedeu
|
|
14
14
|
class Char
|
15
15
|
|
16
16
|
include Comparable
|
17
|
-
include Vedeu::Geometries::Positionable
|
18
17
|
include Vedeu::Repositories::Parent
|
19
18
|
include Vedeu::Presentation
|
20
19
|
|
@@ -57,7 +56,7 @@ module Vedeu
|
|
57
56
|
def attributes
|
58
57
|
{
|
59
58
|
border: @border,
|
60
|
-
|
59
|
+
colour: colour,
|
61
60
|
name: @name,
|
62
61
|
parent: @parent,
|
63
62
|
position: position,
|
@@ -107,9 +106,11 @@ module Vedeu
|
|
107
106
|
# @return [String]
|
108
107
|
def text
|
109
108
|
if border
|
110
|
-
' '
|
109
|
+
' '.freeze
|
110
|
+
|
111
111
|
else
|
112
112
|
@value
|
113
|
+
|
113
114
|
end
|
114
115
|
end
|
115
116
|
|
@@ -159,7 +160,7 @@ module Vedeu
|
|
159
160
|
parent: nil,
|
160
161
|
position: nil,
|
161
162
|
style: nil,
|
162
|
-
value: '',
|
163
|
+
value: ''.freeze,
|
163
164
|
}
|
164
165
|
end
|
165
166
|
|
data/lib/vedeu/views/chars.rb
CHANGED
@@ -8,6 +8,48 @@ module Vedeu
|
|
8
8
|
#
|
9
9
|
class Chars < Vedeu::Repositories::Collection
|
10
10
|
|
11
|
+
# @param collection [void]
|
12
|
+
# @param parent [Vedeu::Views::Stream]
|
13
|
+
# @param name [NilClass|Symbol|String]
|
14
|
+
# @raise [Vedeu::Error::InvalidSyntax] When the collection
|
15
|
+
# cannot be coerced since it is unrecognised or unsupported.
|
16
|
+
# @return [Vedeu::Views::Chars]
|
17
|
+
def self.coerce(collection = [], parent = nil, name = nil)
|
18
|
+
if collection.is_a?(Vedeu::Views::Chars)
|
19
|
+
collection
|
20
|
+
|
21
|
+
elsif collection.is_a?(Array)
|
22
|
+
return new(collection, parent, name) if collection.empty?
|
23
|
+
|
24
|
+
coerced_collection = []
|
25
|
+
collection.each do |element|
|
26
|
+
coerced_collection << element if element.is_a?(Vedeu::Views::Char)
|
27
|
+
end
|
28
|
+
|
29
|
+
new(coerced_collection, parent, name)
|
30
|
+
|
31
|
+
elsif collection.is_a?(Vedeu::Views::Stream)
|
32
|
+
|
33
|
+
elsif collection.is_a?(String)
|
34
|
+
return new([], parent, name) if collection.empty?
|
35
|
+
|
36
|
+
if parent && parent.attributes
|
37
|
+
new_collection = Vedeu::DSL::Text.new(collection,
|
38
|
+
parent.attributes).chars
|
39
|
+
|
40
|
+
new(new_collection, parent, name)
|
41
|
+
end
|
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 :chars, :value
|
52
|
+
|
11
53
|
end # Chars
|
12
54
|
|
13
55
|
end # Views
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'vedeu/dsl/all'
|
2
|
+
|
1
3
|
module Vedeu
|
2
4
|
|
3
5
|
module Views
|
@@ -8,13 +10,15 @@ module Vedeu
|
|
8
10
|
|
9
11
|
include Vedeu::Repositories::Model
|
10
12
|
include Vedeu::Presentation
|
13
|
+
include Vedeu::Views::Value
|
11
14
|
|
12
|
-
collection Vedeu::Views::
|
13
|
-
|
15
|
+
collection Vedeu::Views::Views
|
16
|
+
deputy Vedeu::DSL::View
|
17
|
+
entity Vedeu::Views::View
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
alias_method :views, :value
|
20
|
+
alias_method :views=, :value=
|
21
|
+
alias_method :views?, :value?
|
18
22
|
|
19
23
|
# Returns a new instance of Vedeu::Views::Composition.
|
20
24
|
#
|
@@ -22,7 +26,7 @@ module Vedeu
|
|
22
26
|
# @option attributes client [void]
|
23
27
|
# @option attributes colour [Vedeu::Colours::Colour]
|
24
28
|
# @option attributes style [Vedeu::Presentation::Style]
|
25
|
-
# @option attributes value [Vedeu::Views::
|
29
|
+
# @option attributes value [Vedeu::Views::Views]
|
26
30
|
# @return [Vedeu::Views::Composition]
|
27
31
|
def initialize(attributes = {})
|
28
32
|
defaults.merge!(attributes).each do |key, value|
|
@@ -31,7 +35,7 @@ module Vedeu
|
|
31
35
|
end
|
32
36
|
|
33
37
|
# @param child [Vedeu::Views::View]
|
34
|
-
# @return [Vedeu::Views::
|
38
|
+
# @return [Vedeu::Views::Views]
|
35
39
|
def add(child)
|
36
40
|
@value = value.add(child)
|
37
41
|
end
|
@@ -40,33 +44,14 @@ module Vedeu
|
|
40
44
|
# @return [Hash]
|
41
45
|
def attributes
|
42
46
|
{
|
43
|
-
client:
|
44
|
-
colour:
|
45
|
-
parent:
|
46
|
-
style:
|
47
|
+
client: client,
|
48
|
+
colour: colour,
|
49
|
+
parent: parent,
|
50
|
+
style: style,
|
47
51
|
value: value,
|
48
52
|
}
|
49
53
|
end
|
50
54
|
|
51
|
-
# Returns a DSL instance responsible for defining the DSL
|
52
|
-
# methods of this model.
|
53
|
-
#
|
54
|
-
# @param client [Object|NilClass] The client binding represents
|
55
|
-
# the client application object that is currently invoking a
|
56
|
-
# DSL method. It is required so that we can send messages to
|
57
|
-
# the client application object should we need to.
|
58
|
-
# @return [Vedeu::DSL::Composition] The DSL instance for this
|
59
|
-
# model.
|
60
|
-
def deputy(client = nil)
|
61
|
-
Vedeu::DSL::Composition.new(self, client)
|
62
|
-
end
|
63
|
-
|
64
|
-
# @return [Vedeu::Views::ViewCollection]
|
65
|
-
def value
|
66
|
-
collection.coerce(@value, self)
|
67
|
-
end
|
68
|
-
alias_method :views, :value
|
69
|
-
|
70
55
|
private
|
71
56
|
|
72
57
|
# The default values for a new instance of this class.
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Views
|
4
|
+
|
5
|
+
# Provides the default attributes for variaus Vedeu::Views models.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
#
|
9
|
+
module DefaultAttributes
|
10
|
+
|
11
|
+
include Vedeu::Repositories::Defaults
|
12
|
+
|
13
|
+
# @!attribute [r] align
|
14
|
+
# @return [Vedeu::Coercers::Alignment]
|
15
|
+
attr_reader :align
|
16
|
+
|
17
|
+
# @!attribute [r] pad
|
18
|
+
# @return [String]
|
19
|
+
attr_reader :pad
|
20
|
+
|
21
|
+
# @!attribute [r] truncate
|
22
|
+
# @return [Boolean]
|
23
|
+
attr_reader :truncate
|
24
|
+
|
25
|
+
# @!attribute [r] width
|
26
|
+
# @return [Fixnum|NilClass]
|
27
|
+
attr_reader :width
|
28
|
+
|
29
|
+
# @!attribute [r] wordwrap
|
30
|
+
# @return [Boolean]
|
31
|
+
attr_reader :wordwrap
|
32
|
+
|
33
|
+
# @return [Hash<Symbol => void>]
|
34
|
+
def attributes
|
35
|
+
{
|
36
|
+
align: align,
|
37
|
+
client: client,
|
38
|
+
colour: colour,
|
39
|
+
name: name,
|
40
|
+
pad: pad,
|
41
|
+
parent: parent,
|
42
|
+
style: style,
|
43
|
+
truncate: truncate,
|
44
|
+
width: width,
|
45
|
+
wordwrap: wordwrap,
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# The default values for a new instance of this class.
|
52
|
+
#
|
53
|
+
# @return [Hash<Symbol => Array<void>|NilClass>]
|
54
|
+
def defaults
|
55
|
+
{
|
56
|
+
align: nil,
|
57
|
+
client: nil,
|
58
|
+
colour: nil,
|
59
|
+
name: nil,
|
60
|
+
pad: ' '.freeze,
|
61
|
+
parent: nil,
|
62
|
+
style: nil,
|
63
|
+
truncate: false,
|
64
|
+
value: ''.freeze,
|
65
|
+
width: nil,
|
66
|
+
wordwrap: false,
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
end # DefaultAttributes
|
71
|
+
|
72
|
+
end # Views
|
73
|
+
|
74
|
+
end # Vedeu
|
data/lib/vedeu/views/line.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'vedeu/dsl/all'
|
2
|
+
|
1
3
|
module Vedeu
|
2
4
|
|
3
5
|
module Views
|
@@ -8,16 +10,34 @@ module Vedeu
|
|
8
10
|
#
|
9
11
|
class Line
|
10
12
|
|
13
|
+
# Provides DSL methods for Vedeu::Views::Line 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
|
29
|
+
include Vedeu::Views::Value
|
14
30
|
|
15
31
|
collection Vedeu::Views::Streams
|
16
|
-
|
32
|
+
deputy Vedeu::Views::Line::DSL
|
33
|
+
entity Vedeu::Views::Stream
|
34
|
+
parent Vedeu::Views::Lines
|
35
|
+
|
36
|
+
def_delegators :value,
|
37
|
+
:streams
|
17
38
|
|
18
|
-
|
19
|
-
|
20
|
-
attr_accessor :parent
|
39
|
+
alias_method :streams=, :value=
|
40
|
+
alias_method :streams?, :value?
|
21
41
|
|
22
42
|
# Returns a new instance of Vedeu::Views::Line.
|
23
43
|
#
|
@@ -42,42 +62,18 @@ module Vedeu
|
|
42
62
|
end
|
43
63
|
alias_method :<<, :add
|
44
64
|
|
45
|
-
# @return [Hash<Symbol => void>]
|
46
|
-
def attributes
|
47
|
-
{
|
48
|
-
client: @client,
|
49
|
-
colour: @colour,
|
50
|
-
name: name,
|
51
|
-
parent: parent,
|
52
|
-
style: @style,
|
53
|
-
value: value,
|
54
|
-
}
|
55
|
-
end
|
56
|
-
|
57
65
|
# Returns an array of all the characters with formatting for
|
58
66
|
# this line.
|
59
67
|
#
|
60
68
|
# @return [Array]
|
61
69
|
# @see Vedeu::Views::Stream
|
62
70
|
def chars
|
63
|
-
return []
|
71
|
+
return [] unless value?
|
64
72
|
|
65
|
-
@chars ||=
|
73
|
+
@chars ||= streams.flat_map(&:chars)
|
66
74
|
end
|
67
75
|
|
68
|
-
#
|
69
|
-
# methods of this model.
|
70
|
-
#
|
71
|
-
# @param client [Object|NilClass] The client binding represents
|
72
|
-
# the client application object that is currently invoking a
|
73
|
-
# DSL method. It is required so that we can send messages to
|
74
|
-
# the client application object should we need to.
|
75
|
-
# @return [Vedeu::DSL::Line] The DSL instance for this model.
|
76
|
-
def deputy(client = nil)
|
77
|
-
Vedeu::DSL::Line.new(self, client)
|
78
|
-
end
|
79
|
-
|
80
|
-
# An object is equal when its values are the same./
|
76
|
+
# An object is equal when its values are the same.
|
81
77
|
#
|
82
78
|
# @param other [Vedeu::Repositories::Collection]
|
83
79
|
# @return [Boolean]
|
@@ -94,28 +90,6 @@ module Vedeu
|
|
94
90
|
value.map(&:size).inject(0, :+)
|
95
91
|
end
|
96
92
|
|
97
|
-
# @return [Vedeu::Views::Streams]
|
98
|
-
def value
|
99
|
-
collection.coerce(@value, self)
|
100
|
-
end
|
101
|
-
alias_method :streams, :value
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
# The default values for a new instance of this class.
|
106
|
-
#
|
107
|
-
# @return [Hash<Symbol => Array<void>|NilClass>]
|
108
|
-
def defaults
|
109
|
-
{
|
110
|
-
client: nil,
|
111
|
-
colour: nil,
|
112
|
-
name: nil,
|
113
|
-
parent: nil,
|
114
|
-
style: nil,
|
115
|
-
value: [],
|
116
|
-
}
|
117
|
-
end
|
118
|
-
|
119
93
|
end # Line
|
120
94
|
|
121
95
|
end # Views
|