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,113 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Provides DSL methods for Vedeu::Geometries::Geometry objects.
|
6
|
+
#
|
7
|
+
# @api public
|
8
|
+
#
|
9
|
+
module Geometry
|
10
|
+
|
11
|
+
# When {Vedeu::DSL::Geometry} 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 geometry of an interface or view with a simple
|
18
|
+
# DSL.
|
19
|
+
#
|
20
|
+
# # Standalone (preferred):
|
21
|
+
# Vedeu.geometry :my_interface do
|
22
|
+
# # ... see {Vedeu::Geometries::DSL}
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# @param name [String|Symbol] The name of the interface or
|
26
|
+
# view to which this geometry 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::Geometries::Geometry]
|
32
|
+
# @see Vedeu::Geometries::DSL
|
33
|
+
def geometry(name = nil, &block)
|
34
|
+
# Alternative implementation which treats `Vedeu.geometry`
|
35
|
+
# as `Vedeu.geometries` if no name or block is given.
|
36
|
+
#
|
37
|
+
# if name && block_given?
|
38
|
+
# Vedeu::Geometries::Geometry.build(name: name, &block).store
|
39
|
+
#
|
40
|
+
# else
|
41
|
+
# Vedeu.geometries
|
42
|
+
#
|
43
|
+
# end
|
44
|
+
|
45
|
+
fail Vedeu::Error::MissingRequired unless name
|
46
|
+
fail Vedeu::Error::RequiresBlock unless block_given?
|
47
|
+
|
48
|
+
Vedeu::Geometries::Geometry.build(name: name, &block).store
|
49
|
+
end
|
50
|
+
|
51
|
+
end # ClassMethods
|
52
|
+
|
53
|
+
# When {Vedeu::DSL::Geometry} is included in a class, the
|
54
|
+
# methods within this module are included as instance methods on
|
55
|
+
# that class.
|
56
|
+
#
|
57
|
+
module InstanceMethods
|
58
|
+
|
59
|
+
# Specify the geometry of an interface or view with a simple
|
60
|
+
# DSL.
|
61
|
+
#
|
62
|
+
# # As part of an interface:
|
63
|
+
# Vedeu.interface :my_interface do
|
64
|
+
# geometry do
|
65
|
+
# # ... see {Vedeu::Geometries::DSL}
|
66
|
+
# end
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
# # As part of a view:
|
70
|
+
# Vedeu.render do
|
71
|
+
# view :my_interface do
|
72
|
+
# geometry do
|
73
|
+
# # ... see {Vedeu::Geometries::DSL}
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# @param name [String|Symbol] The name of the interface; this
|
79
|
+
# is already provided when we define the interface or view,
|
80
|
+
# setting it here is just mirroring functionality of
|
81
|
+
# {Vedeu::DSL::Geometry::ClassMethods.geometry}.
|
82
|
+
# @param block [Proc]
|
83
|
+
# @raise [Vedeu::Error::MissingRequired|
|
84
|
+
# Vedeu::Error::RequiresBlock] When a name or block
|
85
|
+
# respectively are not given.
|
86
|
+
# @return [Vedeu::Geometries::Geometry]
|
87
|
+
# @see Vedeu::Geometries::DSL
|
88
|
+
def geometry(name = nil, &block)
|
89
|
+
fail Vedeu::Error::RequiresBlock unless block_given?
|
90
|
+
|
91
|
+
model_name = name ? name : model.name
|
92
|
+
|
93
|
+
Vedeu::Geometries::Geometry.build(name: model_name, &block).store
|
94
|
+
end
|
95
|
+
|
96
|
+
end # InstanceMethods
|
97
|
+
|
98
|
+
# When this module is included in a class, provide ClassMethods
|
99
|
+
# as class methods and InstanceMethods as instance methods for
|
100
|
+
# the given class.
|
101
|
+
#
|
102
|
+
# @param klass [Class]
|
103
|
+
# @return [void]
|
104
|
+
def self.included(klass)
|
105
|
+
klass.extend(Vedeu::DSL::Geometry::ClassMethods)
|
106
|
+
klass.include(Vedeu::DSL::Geometry::InstanceMethods)
|
107
|
+
end
|
108
|
+
|
109
|
+
end # Geometry
|
110
|
+
|
111
|
+
end # DSL
|
112
|
+
|
113
|
+
end # Vedeu
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Aligns a text value based on given options when building views.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
#
|
9
|
+
class Align
|
10
|
+
|
11
|
+
extend Forwardable
|
12
|
+
include Vedeu::Common
|
13
|
+
|
14
|
+
def_delegators :alignment,
|
15
|
+
:centre_aligned?,
|
16
|
+
:left_aligned?,
|
17
|
+
:right_aligned?,
|
18
|
+
:unaligned?
|
19
|
+
|
20
|
+
# @param value [String]
|
21
|
+
# @param options [Hash]
|
22
|
+
# @option options align [Symbol]
|
23
|
+
# @option options name [String|Symbol]
|
24
|
+
# @option options pad [String]
|
25
|
+
# @option options width [Fixnum]
|
26
|
+
# @return [Vedeu::DSL::Align]
|
27
|
+
def initialize(value = '', options = {})
|
28
|
+
@value = value || ''
|
29
|
+
@options = defaults.merge!(options)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [String]
|
33
|
+
def text
|
34
|
+
if unaligned?
|
35
|
+
value
|
36
|
+
|
37
|
+
elsif left_aligned?
|
38
|
+
left
|
39
|
+
|
40
|
+
elsif centre_aligned?
|
41
|
+
centre
|
42
|
+
|
43
|
+
elsif right_aligned?
|
44
|
+
right
|
45
|
+
|
46
|
+
else
|
47
|
+
value
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
# @!attribute [r] options
|
55
|
+
# @return [Hash]
|
56
|
+
attr_reader :options
|
57
|
+
|
58
|
+
# @!attribute [r] value
|
59
|
+
# @return [String]
|
60
|
+
attr_reader :value
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# @return [Vedeu::Coercers::Alignment]
|
65
|
+
def alignment
|
66
|
+
@_alignment ||= Vedeu::Coercers::Alignment.coerce(options[:align])
|
67
|
+
end
|
68
|
+
|
69
|
+
# The value padded to width, centralized.
|
70
|
+
#
|
71
|
+
# @return [String]
|
72
|
+
def centre
|
73
|
+
value.center(width, options[:pad])
|
74
|
+
end
|
75
|
+
alias_method :center, :centre
|
76
|
+
|
77
|
+
# @return [Hash]
|
78
|
+
def defaults
|
79
|
+
{
|
80
|
+
align: :left,
|
81
|
+
name: nil,
|
82
|
+
pad: ' ',
|
83
|
+
width: nil,
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [NilClass|Vedeu::Geometries::Geometry]
|
88
|
+
def geometry
|
89
|
+
@_geometry ||= Vedeu.geometries.by_name(options[:name])
|
90
|
+
end
|
91
|
+
|
92
|
+
# The value padded to width, left justified.
|
93
|
+
#
|
94
|
+
# @return [String]
|
95
|
+
def left
|
96
|
+
value.ljust(width, options[:pad])
|
97
|
+
end
|
98
|
+
|
99
|
+
# The value padded to width, right justified.
|
100
|
+
#
|
101
|
+
# @return [String]
|
102
|
+
def right
|
103
|
+
value.rjust(width, options[:pad])
|
104
|
+
end
|
105
|
+
|
106
|
+
# Return the width of the interface when a name is given,
|
107
|
+
# otherwise use the given width.
|
108
|
+
#
|
109
|
+
# @return [Fixnum]
|
110
|
+
def width
|
111
|
+
if present?(options[:width])
|
112
|
+
options[:width]
|
113
|
+
|
114
|
+
elsif present?(options[:name])
|
115
|
+
geometry.bordered_width
|
116
|
+
|
117
|
+
else
|
118
|
+
value.size
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end # Align
|
124
|
+
|
125
|
+
end # DSL
|
126
|
+
|
127
|
+
end # Vedeu
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
# Provides a mechanism to help configure and use Vedeu.
|
4
|
+
#
|
5
|
+
module DSL
|
6
|
+
|
7
|
+
end # DSL
|
8
|
+
|
9
|
+
end # Vedeu
|
10
|
+
|
11
|
+
require 'vedeu/dsl/string/align'
|
12
|
+
require 'vedeu/dsl/string/truncate'
|
13
|
+
require 'vedeu/dsl/string/wordwrap'
|
14
|
+
require 'vedeu/dsl/string/text'
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Manipulates text values based on given options when building
|
6
|
+
# views.
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
#
|
10
|
+
class Text
|
11
|
+
|
12
|
+
include Vedeu::Common
|
13
|
+
|
14
|
+
# @param value [String]
|
15
|
+
# @param options [Vedeu::DSL::Attributes]
|
16
|
+
# @return [Vedeu::DSL::Text]
|
17
|
+
def initialize(value = '', options = {})
|
18
|
+
@value = value || ''
|
19
|
+
@options = options || {}
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Array<Vedeu::Views::Char>]
|
23
|
+
def chars
|
24
|
+
return [] unless present?(value) && string?(value)
|
25
|
+
|
26
|
+
collection
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
# @!attribute [r] options
|
32
|
+
# @return [Hash<Symbol => void>]
|
33
|
+
attr_reader :options
|
34
|
+
|
35
|
+
# @!attribute [r] value
|
36
|
+
# @return [NilClass|String]
|
37
|
+
attr_reader :value
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
def align
|
43
|
+
Vedeu::DSL::Align.new(value, options).text
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [NilClass|Vedeu::Coercers::Alignment]
|
47
|
+
def align?
|
48
|
+
options[:align]
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param char [String]
|
52
|
+
# @return [Hash<Symbol => void>]
|
53
|
+
def attributes(char)
|
54
|
+
{
|
55
|
+
colour: options[:colour],
|
56
|
+
name: name,
|
57
|
+
parent: parent,
|
58
|
+
position: nil,
|
59
|
+
style: options[:style],
|
60
|
+
value: char,
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [Array<Vedeu::Views::Char>]
|
65
|
+
def collection
|
66
|
+
text.chars.map { |char| Vedeu::Views::Char.new(attributes(char)) }
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [NilClass|String|Symbol]
|
70
|
+
def name
|
71
|
+
options[:name]
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [NilClass|void]
|
75
|
+
def parent
|
76
|
+
options[:parent]
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [String]
|
80
|
+
def text
|
81
|
+
if truncate?
|
82
|
+
truncate
|
83
|
+
|
84
|
+
elsif align?
|
85
|
+
align
|
86
|
+
|
87
|
+
else
|
88
|
+
value
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# @return [String]
|
94
|
+
def truncate
|
95
|
+
Vedeu::DSL::Truncate.new(value, options).text
|
96
|
+
end
|
97
|
+
|
98
|
+
# @return [Boolean|NilClass]
|
99
|
+
def truncate?
|
100
|
+
options[:truncate]
|
101
|
+
end
|
102
|
+
|
103
|
+
end # Text
|
104
|
+
|
105
|
+
end # DSL
|
106
|
+
|
107
|
+
end # Vedeu
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
# Truncates a string to an optional width, or uses the named
|
6
|
+
# geometry width.
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
#
|
10
|
+
class Truncate
|
11
|
+
|
12
|
+
include Vedeu::Common
|
13
|
+
|
14
|
+
# Returns a new instance of Vedeu::DSL::Truncate.
|
15
|
+
#
|
16
|
+
# @param value [String]
|
17
|
+
# @param options [Hash<Symbol => Boolean|Fixnum|NilClass|String|
|
18
|
+
# Symbol]
|
19
|
+
# @option options name [String|Symbol] The name of the geometry
|
20
|
+
# to use to determine the width if the width option is not
|
21
|
+
# given.
|
22
|
+
# @option options truncate [Boolean] Whether to truncate the
|
23
|
+
# value.
|
24
|
+
# @option options width [Fixnum] The width of the new value.
|
25
|
+
# @return [Vedeu::DSL::Truncate]
|
26
|
+
def initialize(value = '', options = {})
|
27
|
+
@value = value || ''
|
28
|
+
@options = defaults.merge!(options)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [String]
|
32
|
+
def text
|
33
|
+
if truncate?
|
34
|
+
truncate
|
35
|
+
|
36
|
+
else
|
37
|
+
value
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
# @!attribute [r] options
|
45
|
+
# @return [Hash<Symbol => Boolean|Fixnum|NilClass|String|
|
46
|
+
# Symbol]
|
47
|
+
attr_reader :options
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# @return [Hash<Symbol => Boolean|Fixnum|NilClass|String|
|
52
|
+
# Symbol]
|
53
|
+
def defaults
|
54
|
+
{
|
55
|
+
name: nil,
|
56
|
+
truncate: false,
|
57
|
+
width: nil,
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
# @return [Vedeu::Geometries::Geometry]
|
62
|
+
def geometry
|
63
|
+
@_geometry ||= Vedeu.geometries.by_name(options[:name])
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [Boolean]
|
67
|
+
def truncate?
|
68
|
+
truthy?(options[:truncate]) && value.size > width
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [String]
|
72
|
+
def truncate
|
73
|
+
value.slice(0, width)
|
74
|
+
end
|
75
|
+
|
76
|
+
# @return [String]
|
77
|
+
def value
|
78
|
+
if present?(@value) && string?(@value)
|
79
|
+
@value
|
80
|
+
|
81
|
+
elsif present?(@value)
|
82
|
+
@value.to_s
|
83
|
+
|
84
|
+
else
|
85
|
+
''
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Return the width of the interface when a name is given,
|
91
|
+
# otherwise use the given width.
|
92
|
+
#
|
93
|
+
# @return [Fixnum]
|
94
|
+
def width
|
95
|
+
if present?(options[:width])
|
96
|
+
options[:width]
|
97
|
+
|
98
|
+
elsif present?(options[:name])
|
99
|
+
geometry.bordered_width
|
100
|
+
|
101
|
+
else
|
102
|
+
value.size
|
103
|
+
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end # Truncate
|
108
|
+
|
109
|
+
end # DSL
|
110
|
+
|
111
|
+
end # Vedeu
|