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
@@ -0,0 +1,127 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Provides DSL methods for Vedeu::Borders::Border objects.
|
6
|
+
#
|
7
|
+
# @api public
|
8
|
+
#
|
9
|
+
module Border
|
10
|
+
|
11
|
+
# When {Vedeu::DSL::Border} is included in a class, the
|
12
|
+
# methods within this module are included as class methods on
|
13
|
+
# that class.
|
14
|
+
#
|
15
|
+
module ClassMethods
|
16
|
+
|
17
|
+
# Specify the border of an interface or view with a simple
|
18
|
+
# DSL.
|
19
|
+
#
|
20
|
+
# # Standalone (preferred):
|
21
|
+
# Vedeu.border :my_interface do
|
22
|
+
# # ... see {Vedeu::Borders::DSL}
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# @param name [String|Symbol] The name of the interface or
|
26
|
+
# view to which this border belongs.
|
27
|
+
# @param block [Proc]
|
28
|
+
# @raise [Vedeu::Error::MissingRequired|
|
29
|
+
# Vedeu::Error::RequiresBlock] When a name or block
|
30
|
+
# respectively are not given.
|
31
|
+
# @return [Vedeu::Borders::Border]
|
32
|
+
# @see Vedeu::Borders::DSL
|
33
|
+
def border(name, &block)
|
34
|
+
fail Vedeu::Error::MissingRequired unless name
|
35
|
+
fail Vedeu::Error::RequiresBlock unless block_given?
|
36
|
+
|
37
|
+
Vedeu::Borders::Border.build(enabled: true, name: name, &block).store
|
38
|
+
end
|
39
|
+
|
40
|
+
end # ClassMethods
|
41
|
+
|
42
|
+
# When {Vedeu::DSL::Border} is included in a class, the
|
43
|
+
# methods within this module are included as instance methods on
|
44
|
+
# that class.
|
45
|
+
#
|
46
|
+
module InstanceMethods
|
47
|
+
|
48
|
+
# Specify the border of an interface or view with a simple
|
49
|
+
# DSL.
|
50
|
+
#
|
51
|
+
# # As part of an interface:
|
52
|
+
# Vedeu.interface :my_interface do
|
53
|
+
# border do
|
54
|
+
# # ... see {Vedeu::Borders::DSL}
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# # As part of a view:
|
59
|
+
# Vedeu.render do
|
60
|
+
# view :my_interface do
|
61
|
+
# border do
|
62
|
+
# # ... see {Vedeu::Borders::DSL}
|
63
|
+
# end
|
64
|
+
# end
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# @param name [String|Symbol] The name of the interface; this
|
68
|
+
# is already provided when we define the interface or view,
|
69
|
+
# setting it here is just mirroring functionality of
|
70
|
+
# {Vedeu::DSL::Border::ClassMethods.border}.
|
71
|
+
# @param block [Proc]
|
72
|
+
# @raise [Vedeu::Error::MissingRequired|
|
73
|
+
# Vedeu::Error::RequiresBlock] When a name or block
|
74
|
+
# respectively are not given.
|
75
|
+
# @return [Vedeu::Borders::Border]
|
76
|
+
# @see Vedeu::Borders::DSL
|
77
|
+
def border(name = nil, &block)
|
78
|
+
fail Vedeu::Error::RequiresBlock unless block_given?
|
79
|
+
|
80
|
+
model_name = name ? name : model.name
|
81
|
+
|
82
|
+
Vedeu::Borders::Border.build(enabled: true,
|
83
|
+
name: model_name, &block).store
|
84
|
+
end
|
85
|
+
|
86
|
+
# Applies the default border to the interface or view.
|
87
|
+
#
|
88
|
+
# # As part of an interface:
|
89
|
+
# Vedeu.interface :my_interface do
|
90
|
+
# border!
|
91
|
+
#
|
92
|
+
# # ... some code
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# # As part of a view:
|
96
|
+
# Vedeu.render do
|
97
|
+
# view :my_interface do
|
98
|
+
# border!
|
99
|
+
#
|
100
|
+
# # ... some code
|
101
|
+
# end
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
# @return [Vedeu::Borders::Border]
|
105
|
+
def border!
|
106
|
+
border do
|
107
|
+
# adds default border
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end # InstanceMethods
|
112
|
+
|
113
|
+
# When this module is included in a class, provide ClassMethods
|
114
|
+
# as class methods for the class.
|
115
|
+
#
|
116
|
+
# @param klass [Class]
|
117
|
+
# @return [void]
|
118
|
+
def self.included(klass)
|
119
|
+
klass.extend(Vedeu::DSL::Border::ClassMethods)
|
120
|
+
klass.include(Vedeu::DSL::Border::InstanceMethods)
|
121
|
+
end
|
122
|
+
|
123
|
+
end # Border
|
124
|
+
|
125
|
+
end # DSL
|
126
|
+
|
127
|
+
end # Vedeu
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Provides DSL methods for Vedeu::Cursors::Cursor objects.
|
6
|
+
#
|
7
|
+
# @api public
|
8
|
+
#
|
9
|
+
module Cursors
|
10
|
+
|
11
|
+
# Set the cursor visibility on an interface.
|
12
|
+
#
|
13
|
+
# @param value [Boolean] Any value other than nil or false will
|
14
|
+
# evaluate to true.
|
15
|
+
# @return [Vedeu::Cursors::Cursor]
|
16
|
+
def cursor(value = true)
|
17
|
+
boolean = value ? true : false
|
18
|
+
|
19
|
+
model.cursor_visible = boolean
|
20
|
+
|
21
|
+
Vedeu::Cursors::Cursor.store(name: name, visible: boolean)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Set the cursor to visible for the interface or view.
|
25
|
+
#
|
26
|
+
# @return [Vedeu::Cursors::Cursor]
|
27
|
+
def cursor!
|
28
|
+
cursor(true)
|
29
|
+
end
|
30
|
+
alias_method :show_cursor!, :cursor!
|
31
|
+
|
32
|
+
# Set the cursor to invisible for the interface or view.
|
33
|
+
#
|
34
|
+
# @return [Vedeu::Cursors::Cursor]
|
35
|
+
def no_cursor!
|
36
|
+
cursor(false)
|
37
|
+
end
|
38
|
+
alias_method :hide_cursor!, :no_cursor!
|
39
|
+
|
40
|
+
end # Cursors
|
41
|
+
|
42
|
+
end # DSL
|
43
|
+
|
44
|
+
end # Vedeu
|
data/lib/vedeu/dsl/dsl.rb
CHANGED
@@ -0,0 +1,335 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Provides methods to be used to define views.
|
6
|
+
#
|
7
|
+
# Vedeu.renders do
|
8
|
+
# view :my_interface do
|
9
|
+
# lines do
|
10
|
+
# background '#000000'
|
11
|
+
# foreground '#ffffff'
|
12
|
+
# line 'This is white text on a black background.'
|
13
|
+
# line 'Next is a blank line:'
|
14
|
+
# line ''
|
15
|
+
#
|
16
|
+
# streams { stream 'We can define ' }
|
17
|
+
#
|
18
|
+
# streams do
|
19
|
+
# foreground '#ff0000'
|
20
|
+
# stream 'parts of a line '
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# streams { stream 'independently using ' }
|
24
|
+
#
|
25
|
+
# streams do
|
26
|
+
# foreground '#00ff00'
|
27
|
+
# stream 'streams.'
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# @api public
|
34
|
+
#
|
35
|
+
module Elements
|
36
|
+
|
37
|
+
include Vedeu::Common
|
38
|
+
include Vedeu::DSL::Presentation
|
39
|
+
|
40
|
+
# @todo This documentation needs editing. (GL: 2015-12-17)
|
41
|
+
#
|
42
|
+
# Specify multiple lines in a view.
|
43
|
+
#
|
44
|
+
# @example
|
45
|
+
# Vedeu.view :my_interface do
|
46
|
+
# lines do
|
47
|
+
# # ... see {Vedeu::DSL::Line} and {Vedeu::DSL::Stream}
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# Vedeu.view :my_interface do
|
52
|
+
# line do
|
53
|
+
# # ... see {Vedeu::DSL::Line} and {Vedeu::DSL::Stream}
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# @param block [Proc]
|
58
|
+
# @raise [Vedeu::Error::RequiresBlock|Vedeu::Error::Fatal]
|
59
|
+
# @return [void]
|
60
|
+
def lines(&block)
|
61
|
+
requires_block!(&block)
|
62
|
+
requires_model!
|
63
|
+
|
64
|
+
attrs = Vedeu::DSL::Attributes.build(self, model, nil, {}, &block)
|
65
|
+
|
66
|
+
l = Vedeu::Views::View.build(attrs, &block)
|
67
|
+
model.value = l.value
|
68
|
+
end
|
69
|
+
|
70
|
+
# @todo This documentation needs editing. (GL: 2015-12-17)
|
71
|
+
#
|
72
|
+
# Specify a single line in a view.
|
73
|
+
#
|
74
|
+
# Vedeu.renders do
|
75
|
+
# view :my_interface do
|
76
|
+
# lines do
|
77
|
+
# line 'some text...'
|
78
|
+
# # ... some code
|
79
|
+
#
|
80
|
+
# line 'some more text...'
|
81
|
+
# # ... some code
|
82
|
+
# end
|
83
|
+
# end
|
84
|
+
# end
|
85
|
+
#
|
86
|
+
# @param value [String] The value for the line. Ignored when a
|
87
|
+
# block is given.
|
88
|
+
# @param opts [Hash]
|
89
|
+
# @option opts ... [void]
|
90
|
+
# @param block [Proc]
|
91
|
+
# @raise [Vedeu::Error::Fatal]
|
92
|
+
# @return [void]
|
93
|
+
def line(value = '', opts = {}, &block)
|
94
|
+
requires_model!
|
95
|
+
|
96
|
+
attrs = Vedeu::DSL::Attributes.build(self, model, value, opts, &block)
|
97
|
+
|
98
|
+
l = if block_given?
|
99
|
+
Vedeu::Views::Line.build(attrs, &block)
|
100
|
+
|
101
|
+
else
|
102
|
+
s = Vedeu::Views::Stream.new(attrs)
|
103
|
+
ss = Vedeu::Views::Streams.coerce([s])
|
104
|
+
|
105
|
+
Vedeu::Views::Line.new(attrs.merge!(value: ss))
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
if view_model? || line_model?
|
110
|
+
model.add(l)
|
111
|
+
|
112
|
+
else
|
113
|
+
fail Vedeu::Error::Fatal,
|
114
|
+
"Cannot add line to '#{model.class.name}' model.".freeze
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# @todo This documentation needs editing. (GL: 2015-12-17)
|
120
|
+
#
|
121
|
+
# Define multiple streams (a stream is a subset of a line).
|
122
|
+
# Uses {Vedeu::DSL::Stream} for all directives within the
|
123
|
+
# required block.
|
124
|
+
#
|
125
|
+
# Vedeu.renders do
|
126
|
+
# view :my_interface do
|
127
|
+
# lines do
|
128
|
+
# line do
|
129
|
+
# streams do
|
130
|
+
# # ... some code
|
131
|
+
# end
|
132
|
+
#
|
133
|
+
# stream do
|
134
|
+
# # ... some code
|
135
|
+
# end
|
136
|
+
# end
|
137
|
+
# end
|
138
|
+
# end
|
139
|
+
# end
|
140
|
+
#
|
141
|
+
# @param block [Proc]
|
142
|
+
# @raise [Vedeu::Error::RequiresBlock|Vedeu::Error::Fatal]
|
143
|
+
# @return [void]
|
144
|
+
def streams(&block)
|
145
|
+
requires_block!(&block)
|
146
|
+
requires_model!
|
147
|
+
|
148
|
+
attrs = Vedeu::DSL::Attributes.build(self, model, nil, {}, &block)
|
149
|
+
|
150
|
+
l = Vedeu::Views::Line.build(attrs, &block)
|
151
|
+
|
152
|
+
if view_model?
|
153
|
+
model.add(l)
|
154
|
+
|
155
|
+
elsif line_model?
|
156
|
+
model.value = l.value
|
157
|
+
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
# @todo This documentation needs editing. (GL: 2015-12-17)
|
162
|
+
#
|
163
|
+
# @param value [String]
|
164
|
+
# @param opts [Hash]
|
165
|
+
# @option opts ... [void]
|
166
|
+
# @param block [Proc]
|
167
|
+
# @raise [Vedeu::Error::Fatal]
|
168
|
+
# @return [void]
|
169
|
+
def stream(value = '', opts = {}, &block)
|
170
|
+
requires_model!
|
171
|
+
|
172
|
+
attrs = Vedeu::DSL::Attributes.build(self, model, value, opts, &block)
|
173
|
+
|
174
|
+
l = if block_given?
|
175
|
+
Vedeu::Views::Line.build(attrs, &block)
|
176
|
+
|
177
|
+
else
|
178
|
+
s = Vedeu::Views::Stream.new(attrs)
|
179
|
+
ss = Vedeu::Views::Streams.coerce([s])
|
180
|
+
|
181
|
+
Vedeu::Views::Line.new(attrs.merge!(value: ss))
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
if view_model? || line_model?
|
186
|
+
model.add(l)
|
187
|
+
|
188
|
+
else
|
189
|
+
fail Vedeu::Error::Fatal,
|
190
|
+
"Cannot add line to '#{model.class.name}' model.".freeze
|
191
|
+
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
# @todo This documentation needs editing. (GL: 2015-12-17)
|
196
|
+
#
|
197
|
+
# Specify the content for a view. Provides the means to align a
|
198
|
+
# string (or object responding to `to_s`), and add it as a Line
|
199
|
+
# or to the Stream.
|
200
|
+
#
|
201
|
+
# @note If using the convenience methods; left, centre, center
|
202
|
+
# or right, then a specified align option will be ignored.
|
203
|
+
#
|
204
|
+
# @example
|
205
|
+
# lines do
|
206
|
+
# centre '...'
|
207
|
+
# end
|
208
|
+
#
|
209
|
+
# line do
|
210
|
+
# right '...'
|
211
|
+
# end
|
212
|
+
#
|
213
|
+
# line do
|
214
|
+
# stream do
|
215
|
+
# text '...'
|
216
|
+
# end
|
217
|
+
# end
|
218
|
+
#
|
219
|
+
# left 'This will be left aligned.', width: 35
|
220
|
+
# # => 'This will be left aligned. '
|
221
|
+
#
|
222
|
+
# centre 'This will be aligned centrally.', width: 35
|
223
|
+
# # => ' This will be aligned centrally. '
|
224
|
+
# # centre is also aliased to center
|
225
|
+
#
|
226
|
+
# right 'This will be right aligned.', width: 35
|
227
|
+
# # => ' This will be right aligned.'
|
228
|
+
#
|
229
|
+
# right 'This will be right aligned.', width: 35,
|
230
|
+
# align: centre
|
231
|
+
#
|
232
|
+
# text 'This will be truncated here. More text here.',
|
233
|
+
# width: 28 # => 'This will be truncated here.'
|
234
|
+
#
|
235
|
+
# text 'Padded with hyphens.', width: 25, pad: '-',
|
236
|
+
# align: :right # => '-----Padded with hyphens.'
|
237
|
+
#
|
238
|
+
# @param value [String|Object] A string or object that responds
|
239
|
+
# to `to_s`.
|
240
|
+
# @param opts [Hash<Symbol => void>] Text options.
|
241
|
+
# @option opts :align [Symbol] One of `:left`,
|
242
|
+
# `:centre`/`:center`, or `:right`.
|
243
|
+
# @option opts :width [Integer|NilClass] The width of the
|
244
|
+
# text stream to add. If the `string` provided is longer than
|
245
|
+
# this value, the string will be truncated. If no width is
|
246
|
+
# provided in the context of 'lines', then the interface width
|
247
|
+
# is used. If no width is provided in the context of a
|
248
|
+
# 'stream', then no alignment will occur.
|
249
|
+
# @option opts :pad [String] The character to use to pad the
|
250
|
+
# width, by default uses an empty space (0x20). Only when the
|
251
|
+
# string is shorter than the specified width.
|
252
|
+
# @raise [Vedeu::Error::Fatal]
|
253
|
+
# @return [void]
|
254
|
+
def text(value = '', opts = {})
|
255
|
+
requires_model!
|
256
|
+
|
257
|
+
if view_model? || line_model?
|
258
|
+
attrs = Vedeu::DSL::Attributes.build(self, model, value, opts)
|
259
|
+
s = Vedeu::Views::Stream.new(attrs)
|
260
|
+
ss = Vedeu::Views::Streams.coerce([s])
|
261
|
+
l = Vedeu::Views::Line.new(attrs.merge!(value: ss))
|
262
|
+
|
263
|
+
model.add(l)
|
264
|
+
|
265
|
+
else
|
266
|
+
fail Vedeu::Error::Fatal,
|
267
|
+
"Cannot add text to '#{model.class.name}' model.".freeze
|
268
|
+
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
# @param (see #text)
|
273
|
+
# @return (see #text)
|
274
|
+
def centre(value = '', opts = {})
|
275
|
+
opts.merge!(align: :centre)
|
276
|
+
|
277
|
+
text(value, opts)
|
278
|
+
end
|
279
|
+
alias_method :center, :centre
|
280
|
+
|
281
|
+
# @param (see #text)
|
282
|
+
# @return (see #text)
|
283
|
+
def left(value = '', opts = {})
|
284
|
+
opts.merge!(align: :left)
|
285
|
+
|
286
|
+
text(value, opts)
|
287
|
+
end
|
288
|
+
|
289
|
+
# @param (see #text)
|
290
|
+
# @return (see #text)
|
291
|
+
def right(value = '', opts = {})
|
292
|
+
opts.merge!(align: :right)
|
293
|
+
|
294
|
+
text(value, opts)
|
295
|
+
end
|
296
|
+
|
297
|
+
private
|
298
|
+
|
299
|
+
# Returns a boolean indicating the model is a
|
300
|
+
# {Vedeu::Views::Line}.
|
301
|
+
#
|
302
|
+
# @return [Boolean]
|
303
|
+
def line_model?
|
304
|
+
model.is_a?(Vedeu::Views::Line)
|
305
|
+
end
|
306
|
+
|
307
|
+
# @param block [Proc]
|
308
|
+
# @raise [Vedeu::Error::RequiresBlock] When the required block
|
309
|
+
# is not given.
|
310
|
+
# @return [NilClass]
|
311
|
+
def requires_block!(&block)
|
312
|
+
fail Vedeu::Error::RequiresBlock unless block_given?
|
313
|
+
end
|
314
|
+
|
315
|
+
# @raise [Vedeu::Error::Fatal] When the model cannot be
|
316
|
+
# determined.
|
317
|
+
# @return [NilClass]
|
318
|
+
def requires_model!
|
319
|
+
fail Vedeu::Error::Fatal,
|
320
|
+
'No model, cannot continue.'.freeze unless present?(model)
|
321
|
+
end
|
322
|
+
|
323
|
+
# Returns a boolean indicating the model is a
|
324
|
+
# {Vedeu::Views::View}.
|
325
|
+
#
|
326
|
+
# @return [Boolean]
|
327
|
+
def view_model?
|
328
|
+
model.is_a?(Vedeu::Views::View)
|
329
|
+
end
|
330
|
+
|
331
|
+
end # Elements
|
332
|
+
|
333
|
+
end # DSL
|
334
|
+
|
335
|
+
end # Vedeu
|