vedeu 0.2.12 → 0.3.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/.ruby-version +1 -1
- data/Guardfile +13 -0
- data/README.md +11 -9
- data/Rakefile +10 -1
- data/bin/vedeu_test +14 -0
- data/config/cucumber.yml +8 -0
- data/docs/api.md +45 -16
- data/docs/events.md +21 -9
- data/docs/getting_started.md +16 -0
- data/docs/views.md +158 -0
- data/examples/borders_app.rb +236 -110
- data/examples/colour_support.sh +98 -0
- data/examples/colours_app.rb +41 -0
- data/examples/configuration_app.rb +11 -6
- data/examples/cursor_app.rb +60 -61
- data/examples/focus_app.rb +72 -34
- data/examples/hello_world.rb +13 -8
- data/examples/lines_app.rb +37 -28
- data/features/start_stop.feature +27 -0
- data/features/support/env.rb +14 -0
- data/lib/vedeu/all.rb +29 -0
- data/lib/vedeu/api.rb +39 -0
- data/lib/vedeu/application.rb +15 -7
- data/lib/vedeu/bindings.rb +121 -0
- data/lib/vedeu/buffers/all.rb +10 -0
- data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
- data/lib/vedeu/buffers/display_buffer.rb +118 -0
- data/lib/vedeu/configuration/all.rb +6 -0
- data/lib/vedeu/configuration/api.rb +3 -1
- data/lib/vedeu/configuration/cli.rb +3 -1
- data/lib/vedeu/configuration/configuration.rb +23 -2
- data/lib/vedeu/cursor/all.rb +23 -0
- data/lib/vedeu/cursor/cursor.rb +116 -0
- data/lib/vedeu/cursor/move_cursor.rb +137 -0
- data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
- data/lib/vedeu/dsl/all.rb +28 -0
- data/lib/vedeu/dsl/components/all.rb +7 -0
- data/lib/vedeu/dsl/components/border.rb +104 -0
- data/lib/vedeu/dsl/components/geometry.rb +153 -0
- data/lib/vedeu/dsl/components/keymap.rb +93 -0
- data/lib/vedeu/dsl/components/menu.rb +82 -0
- data/lib/vedeu/dsl/composition.rb +72 -0
- data/lib/vedeu/dsl/interface.rb +210 -0
- data/lib/vedeu/dsl/line.rb +135 -0
- data/lib/vedeu/dsl/shared/all.rb +7 -0
- data/lib/vedeu/dsl/shared/colour.rb +85 -0
- data/lib/vedeu/dsl/shared/style.rb +38 -0
- data/lib/vedeu/dsl/shared/text.rb +102 -0
- data/lib/vedeu/dsl/shared/use.rb +47 -0
- data/lib/vedeu/dsl/stream.rb +49 -0
- data/lib/vedeu/dsl/view.rb +136 -0
- data/lib/vedeu/events/all.rb +10 -0
- data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
- data/lib/vedeu/events/trigger.rb +58 -0
- data/lib/vedeu/exceptions.rb +34 -0
- data/lib/vedeu/input/all.rb +29 -0
- data/lib/vedeu/input/input.rb +26 -0
- data/lib/vedeu/{models → input}/key.rb +21 -11
- data/lib/vedeu/input/keymap.rb +130 -0
- data/lib/vedeu/input/keys.rb +8 -0
- data/lib/vedeu/input/mapper.rb +112 -0
- data/lib/vedeu/launcher.rb +7 -4
- data/lib/vedeu/models/all.rb +12 -0
- data/lib/vedeu/models/collection.rb +71 -0
- data/lib/vedeu/{repositories → models}/focus.rb +63 -21
- data/lib/vedeu/models/geometry.rb +100 -259
- data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
- data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
- data/lib/vedeu/models/model.rb +51 -0
- data/lib/vedeu/models/view/all.rb +12 -0
- data/lib/vedeu/models/view/char.rb +84 -0
- data/lib/vedeu/models/view/chars.rb +8 -0
- data/lib/vedeu/models/view/composition.rb +101 -0
- data/lib/vedeu/models/view/interface.rb +215 -0
- data/lib/vedeu/models/view/interfaces.rb +8 -0
- data/lib/vedeu/models/view/line.rb +134 -0
- data/lib/vedeu/models/view/lines.rb +8 -0
- data/lib/vedeu/models/view/stream.rb +144 -0
- data/lib/vedeu/models/view/streams.rb +8 -0
- data/lib/vedeu/output/all.rb +8 -0
- data/lib/vedeu/output/border.rb +387 -0
- data/lib/vedeu/output/compositor.rb +41 -30
- data/lib/vedeu/output/output.rb +6 -13
- data/lib/vedeu/output/viewport.rb +78 -94
- data/lib/vedeu/output/writer.rb +29 -0
- data/lib/vedeu/presentation/all.rb +9 -0
- data/lib/vedeu/{colours → presentation}/background.rb +1 -9
- data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
- data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
- data/lib/vedeu/presentation/presentation.rb +91 -0
- data/lib/vedeu/presentation/style.rb +47 -0
- data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
- data/lib/vedeu/repositories/all.rb +5 -0
- data/lib/vedeu/repositories/menus.rb +5 -42
- data/lib/vedeu/{support → repositories}/repository.rb +78 -41
- data/lib/vedeu/support/all.rb +22 -0
- data/lib/vedeu/support/bounding_area.rb +2 -1
- data/lib/vedeu/support/coercions.rb +18 -1
- data/lib/vedeu/support/console.rb +73 -0
- data/lib/vedeu/support/content_geometry.rb +69 -0
- data/lib/vedeu/support/coordinate.rb +246 -0
- data/lib/vedeu/support/esc.rb +29 -2
- data/lib/vedeu/support/log.rb +36 -2
- data/lib/vedeu/support/node.rb +61 -0
- data/lib/vedeu/support/position.rb +28 -13
- data/lib/vedeu/support/position_validator.rb +79 -0
- data/lib/vedeu/support/read.rb +65 -0
- data/lib/vedeu/support/refresh.rb +8 -32
- data/lib/vedeu/support/terminal.rb +34 -4
- data/lib/vedeu/support/text.rb +104 -0
- data/lib/vedeu/support/trace.rb +11 -23
- data/lib/vedeu/support/visible.rb +75 -0
- data/lib/vedeu/support/write.rb +85 -0
- data/lib/vedeu/traps.rb +18 -0
- data/lib/vedeu.rb +41 -101
- data/test/integration/dsl/compositions_test.rb +27 -0
- data/test/integration/dsl/interfaces_test.rb +261 -0
- data/test/integration/dsl/keymaps_test.rb +42 -0
- data/test/integration/dsl/lines_test.rb +146 -0
- data/test/integration/dsl/menus_test.rb +59 -0
- data/test/integration/dsl/streams_test.rb +129 -0
- data/test/integration/dsl/views_test.rb +63 -0
- data/test/lib/vedeu/api_test.rb +163 -0
- data/test/lib/vedeu/application_test.rb +19 -10
- data/test/lib/vedeu/bindings_test.rb +54 -0
- data/test/lib/vedeu/buffers/all_test.rb +11 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
- data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
- data/test/lib/vedeu/configuration/api_test.rb +42 -58
- data/test/lib/vedeu/configuration/cli_test.rb +4 -4
- data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
- data/test/lib/vedeu/cursor/all_test.rb +33 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
- data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
- data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
- data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
- data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
- data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
- data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
- data/test/lib/vedeu/dsl/composition_test.rb +41 -0
- data/test/lib/vedeu/dsl/interface_test.rb +470 -0
- data/test/lib/vedeu/dsl/line_test.rb +60 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
- data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
- data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
- data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
- data/test/lib/vedeu/dsl/stream_test.rb +26 -0
- data/test/lib/vedeu/dsl/view_test.rb +73 -0
- data/test/lib/vedeu/events/all_test.rb +11 -0
- data/test/lib/vedeu/events/event_test.rb +109 -0
- data/test/lib/vedeu/events/trigger_test.rb +60 -0
- data/test/lib/vedeu/input/all_test.rb +11 -0
- data/test/lib/vedeu/input/input_test.rb +7 -3
- data/test/lib/vedeu/input/key_test.rb +72 -0
- data/test/lib/vedeu/input/keymap_test.rb +89 -0
- data/test/lib/vedeu/input/mapper_test.rb +94 -0
- data/test/lib/vedeu/launcher_test.rb +19 -20
- data/test/lib/vedeu/models/collection_test.rb +114 -0
- data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
- data/test/lib/vedeu/models/geometry_test.rb +35 -39
- data/test/lib/vedeu/models/group_test.rb +100 -0
- data/test/lib/vedeu/models/menu_test.rb +288 -0
- data/test/lib/vedeu/models/model_test.rb +31 -0
- data/test/lib/vedeu/models/view/char_test.rb +166 -0
- data/test/lib/vedeu/models/view/chars_test.rb +18 -0
- data/test/lib/vedeu/models/view/composition_test.rb +41 -0
- data/test/lib/vedeu/models/view/interface_test.rb +128 -0
- data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
- data/test/lib/vedeu/models/view/line_test.rb +214 -0
- data/test/lib/vedeu/models/view/lines_test.rb +18 -0
- data/test/lib/vedeu/models/view/stream_test.rb +106 -0
- data/test/lib/vedeu/models/view/streams_test.rb +18 -0
- data/test/lib/vedeu/output/border_test.rb +357 -0
- data/test/lib/vedeu/output/compositor_test.rb +61 -15
- data/test/lib/vedeu/output/output_test.rb +25 -84
- data/test/lib/vedeu/output/viewport_test.rb +171 -45
- data/test/lib/vedeu/output/writer_test.rb +45 -0
- data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
- data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
- data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
- data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
- data/test/lib/vedeu/presentation/style_test.rb +69 -0
- data/test/lib/vedeu/presentation/translator_test.rb +63 -0
- data/test/lib/vedeu/repositories/all_test.rb +7 -0
- data/test/lib/vedeu/repositories/menus_test.rb +3 -156
- data/test/lib/vedeu/repositories/repository_test.rb +271 -0
- data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
- data/test/lib/vedeu/support/coercions_test.rb +39 -0
- data/test/lib/vedeu/support/common_test.rb +31 -16
- data/test/lib/vedeu/support/console_test.rb +85 -0
- data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
- data/test/lib/vedeu/support/coordinate_test.rb +190 -0
- data/test/lib/vedeu/support/esc_test.rb +18 -0
- data/test/lib/vedeu/support/grid_test.rb +15 -10
- data/test/lib/vedeu/support/log_test.rb +3 -0
- data/test/lib/vedeu/support/position_test.rb +22 -2
- data/test/lib/vedeu/support/position_validator_test.rb +11 -0
- data/test/lib/vedeu/support/read_test.rb +88 -0
- data/test/lib/vedeu/support/refresh_test.rb +44 -12
- data/test/lib/vedeu/support/sentence_test.rb +6 -4
- data/test/lib/vedeu/support/terminal_test.rb +81 -70
- data/test/lib/vedeu/support/text_test.rb +93 -0
- data/test/lib/vedeu/support/trace_test.rb +21 -9
- data/test/lib/vedeu/support/visible_test.rb +148 -0
- data/test/lib/vedeu/support/write_test.rb +136 -0
- data/test/lib/vedeu/traps_test.rb +11 -0
- data/test/lib/vedeu_test.rb +2 -0
- data/test/support/helpers/all.rb +7 -0
- data/test/support/helpers/dsl_model_test_class.rb +25 -0
- data/test/support/{test_classes → helpers}/helpers.rb +0 -2
- data/test/support/helpers/misc.rb +15 -0
- data/test/support/helpers/model_test_class.rb +34 -0
- data/test/support/{test_classes → helpers}/presentation.rb +0 -0
- data/test/support/{test_classes → helpers}/repositories.rb +3 -3
- data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
- data/test/test_helper.rb +19 -22
- data/vedeu.gemspec +11 -6
- metadata +322 -181
- data/lib/vedeu/api/api.rb +0 -239
- data/lib/vedeu/api/composition.rb +0 -38
- data/lib/vedeu/api/defined.rb +0 -52
- data/lib/vedeu/api/helpers.rb +0 -161
- data/lib/vedeu/api/interface.rb +0 -287
- data/lib/vedeu/api/keymap.rb +0 -75
- data/lib/vedeu/api/line.rb +0 -107
- data/lib/vedeu/api/menu.rb +0 -111
- data/lib/vedeu/api/stream.rb +0 -96
- data/lib/vedeu/models/border.rb +0 -238
- data/lib/vedeu/models/char.rb +0 -43
- data/lib/vedeu/models/composition.rb +0 -72
- data/lib/vedeu/models/line.rb +0 -100
- data/lib/vedeu/models/stream.rb +0 -130
- data/lib/vedeu/models/style.rb +0 -52
- data/lib/vedeu/repositories/buffers.rb +0 -52
- data/lib/vedeu/repositories/cursors.rb +0 -64
- data/lib/vedeu/repositories/events.rb +0 -147
- data/lib/vedeu/repositories/groups.rb +0 -47
- data/lib/vedeu/repositories/interfaces.rb +0 -78
- data/lib/vedeu/repositories/keymaps.rb +0 -196
- data/lib/vedeu/repositories/models/cursor.rb +0 -209
- data/lib/vedeu/repositories/models/interface.rb +0 -163
- data/lib/vedeu/repositories/models/keymap.rb +0 -111
- data/lib/vedeu/repositories/models/offset.rb +0 -91
- data/lib/vedeu/repositories/offsets.rb +0 -69
- data/lib/vedeu/support/exceptions.rb +0 -34
- data/lib/vedeu/support/keymap_validator.rb +0 -100
- data/lib/vedeu/support/model.rb +0 -14
- data/lib/vedeu/support/presentation.rb +0 -86
- data/lib/vedeu/support/registrar.rb +0 -53
- data/test/integration/api/api_test.rb +0 -97
- data/test/integration/api_dsl/dsl_api_test.rb +0 -4
- data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
- data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
- data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
- data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
- data/test/integration/api_dsl/dsl_keymap.rb +0 -4
- data/test/integration/api_dsl/dsl_line_test.rb +0 -4
- data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
- data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
- data/test/integration/cursors_test.rb +0 -9
- data/test/integration/defining_interfaces_test.rb +0 -26
- data/test/integration/run_once_test.rb +0 -26
- data/test/integration/views/basic_view_test.rb +0 -807
- data/test/lib/vedeu/api/api_test.rb +0 -204
- data/test/lib/vedeu/api/composition_test.rb +0 -31
- data/test/lib/vedeu/api/defined_test.rb +0 -79
- data/test/lib/vedeu/api/helpers_test.rb +0 -111
- data/test/lib/vedeu/api/interface_test.rb +0 -410
- data/test/lib/vedeu/api/keymap_test.rb +0 -65
- data/test/lib/vedeu/api/line_test.rb +0 -83
- data/test/lib/vedeu/api/menu_test.rb +0 -85
- data/test/lib/vedeu/api/stream_test.rb +0 -59
- data/test/lib/vedeu/colours/translator_test.rb +0 -22
- data/test/lib/vedeu/models/border_test.rb +0 -197
- data/test/lib/vedeu/models/char_test.rb +0 -52
- data/test/lib/vedeu/models/composition_test.rb +0 -45
- data/test/lib/vedeu/models/key_test.rb +0 -43
- data/test/lib/vedeu/models/line_test.rb +0 -123
- data/test/lib/vedeu/models/stream_test.rb +0 -233
- data/test/lib/vedeu/models/style_test.rb +0 -59
- data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
- data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
- data/test/lib/vedeu/repositories/events_test.rb +0 -57
- data/test/lib/vedeu/repositories/groups_test.rb +0 -28
- data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
- data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
- data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
- data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
- data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
- data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
- data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
- data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
- data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
- data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
- data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
- data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
- data/test/lib/vedeu/support/model_test.rb +0 -23
- data/test/lib/vedeu/support/presentation_test.rb +0 -53
- data/test/lib/vedeu/support/registrar_test.rb +0 -94
- data/test/lib/vedeu/support/repository_test.rb +0 -208
- data/test/support/test_classes/all.rb +0 -5
- data/test/support/test_classes/coercions.rb +0 -16
- data/test/support/test_classes/model.rb +0 -23
- data/test/support/test_modules/all.rb +0 -1
@@ -1,100 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Validates that a given key is can be used and is not already in-use, either
|
4
|
-
# by the same interface, globally or as a system key.
|
5
|
-
#
|
6
|
-
# @api private
|
7
|
-
class KeymapValidator
|
8
|
-
|
9
|
-
include Common
|
10
|
-
|
11
|
-
# Checks the key is not in use by the system, is not already defined as a
|
12
|
-
# global key, is not already defined for the interface specified.
|
13
|
-
#
|
14
|
-
# @param storage [Hash]
|
15
|
-
# @param key [String|Symbol]
|
16
|
-
# @param interface [String]
|
17
|
-
# @return [Array] A boolean indicating validity, and a helpful message.
|
18
|
-
def self.check(storage, key, interface = '')
|
19
|
-
new(storage, key, interface).check
|
20
|
-
end
|
21
|
-
|
22
|
-
# Instantiates a new KeymapValidator instance.
|
23
|
-
#
|
24
|
-
# @param storage [Hash]
|
25
|
-
# @param key [String|Symbol]
|
26
|
-
# @param interface [String]
|
27
|
-
# @return [KeymapValidator]
|
28
|
-
def initialize(storage, key, interface = '')
|
29
|
-
@storage, @key, @interface = storage, key, interface
|
30
|
-
end
|
31
|
-
|
32
|
-
# @raise [KeyInUse] When the key is already in use.
|
33
|
-
# @see KeymapValidator.check
|
34
|
-
def check
|
35
|
-
if system_key?(key)
|
36
|
-
fail KeyInUse, "'#{key}' is already in use by the system."
|
37
|
-
|
38
|
-
elsif global_key?(key)
|
39
|
-
fail KeyInUse, "'#{key}' is already in use as a global key."
|
40
|
-
|
41
|
-
elsif interface_key?(key, interface)
|
42
|
-
if defined_value?(interface)
|
43
|
-
fail KeyInUse, "'#{key}' is already in use by this interface."
|
44
|
-
|
45
|
-
else
|
46
|
-
fail KeyInUse, "'#{key}' is already in use and cannot be global."
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
true
|
52
|
-
end
|
53
|
-
|
54
|
-
private
|
55
|
-
|
56
|
-
attr_reader :storage, :key, :interface
|
57
|
-
|
58
|
-
# Returns a boolean indicating whether the key has been registered for the
|
59
|
-
# named interface's keymap. If no interface is specified, then it is
|
60
|
-
# assumed that the key is attempting to be registered globally, and so all
|
61
|
-
# interfaces are checked for this key. (A key cannot be global if an
|
62
|
-
# interface is using it.)
|
63
|
-
#
|
64
|
-
# @param key [String|Symbol]
|
65
|
-
# @param interface [String]
|
66
|
-
# @return [Boolean]
|
67
|
-
def interface_key?(key, interface = '')
|
68
|
-
if defined_value?(interface)
|
69
|
-
return false unless storage.key?(interface)
|
70
|
-
|
71
|
-
storage.fetch(interface).keys.include?(key)
|
72
|
-
|
73
|
-
else
|
74
|
-
storage.keys.reject do |keymap|
|
75
|
-
keymap == '_global_keymap_'
|
76
|
-
end.map { |name| storage[name].keys.include?(key) }.any?
|
77
|
-
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# Returns a boolean indicating whether the key is in the global keymap.
|
82
|
-
#
|
83
|
-
# @param key [String|Symbol]
|
84
|
-
# @return [Boolean]
|
85
|
-
def global_key?(key)
|
86
|
-
storage.fetch('_global_keymap_').keys.include?(key)
|
87
|
-
end
|
88
|
-
|
89
|
-
# Returns a boolean indicating whether the key is in the system keymap.
|
90
|
-
# At present, it is not possible to redefine system keys.
|
91
|
-
#
|
92
|
-
# @param key [String|Symbol]
|
93
|
-
# @return [Boolean]
|
94
|
-
def system_key?(key)
|
95
|
-
Configuration.system_keys.values.include?(key)
|
96
|
-
end
|
97
|
-
|
98
|
-
end # KeymapValidator
|
99
|
-
|
100
|
-
end # Vedeu
|
data/lib/vedeu/support/model.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# This module allows the sharing of presentation concerns between the models:
|
4
|
-
# Interface, Line and Stream.
|
5
|
-
#
|
6
|
-
# @api private
|
7
|
-
module Presentation
|
8
|
-
|
9
|
-
# Returns the colour and style attributes of the receiving class.
|
10
|
-
#
|
11
|
-
# @return [Hash]
|
12
|
-
def view_attributes
|
13
|
-
{
|
14
|
-
colour: attributes[:colour],
|
15
|
-
style: attributes[:style],
|
16
|
-
}
|
17
|
-
end
|
18
|
-
|
19
|
-
# Returns a new Colour instance.
|
20
|
-
#
|
21
|
-
# @return [Colour]
|
22
|
-
def colour
|
23
|
-
@colour ||= Colour.new(attributes[:colour])
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns a new Style instance.
|
27
|
-
#
|
28
|
-
# @return [Style]
|
29
|
-
def style
|
30
|
-
@style ||= Style.new(attributes[:style])
|
31
|
-
end
|
32
|
-
|
33
|
-
# Converts the colours and styles to escape sequences, and if the parent
|
34
|
-
# model has previously set the colour and style, reverts back to that for
|
35
|
-
# consistent formatting.
|
36
|
-
#
|
37
|
-
# @return [String]
|
38
|
-
def to_s
|
39
|
-
render_colour do
|
40
|
-
render_style do
|
41
|
-
data
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
# Renders the colour attributes of the receiver, yields (to then render the
|
49
|
-
# the styles) and once returned, attempts to set the colours back to the
|
50
|
-
# those of the receiver's parent.
|
51
|
-
#
|
52
|
-
# @return [String]
|
53
|
-
def render_colour(&block)
|
54
|
-
[ colour.to_s, yield, parent_colour ].join
|
55
|
-
end
|
56
|
-
|
57
|
-
# Renders the style attributes of the receiver, yields (to then render the
|
58
|
-
# next model, or finally, the content) and once returned, attempts to set
|
59
|
-
# the colours back to those of the receiver's parent.
|
60
|
-
#
|
61
|
-
# @return [String]
|
62
|
-
def render_style(&block)
|
63
|
-
[ style.to_s, yield, parent_style ].join
|
64
|
-
end
|
65
|
-
|
66
|
-
# Returns the parent colour as an escape sequence if set.
|
67
|
-
#
|
68
|
-
# @return [String]
|
69
|
-
def parent_colour
|
70
|
-
return '' if parent.nil?
|
71
|
-
|
72
|
-
Colour.new(parent[:colour]).to_s
|
73
|
-
end
|
74
|
-
|
75
|
-
# Returns the parent style as an escape sequence if set.
|
76
|
-
#
|
77
|
-
# @return [String]
|
78
|
-
def parent_style
|
79
|
-
return '' if parent.nil?
|
80
|
-
|
81
|
-
Style.new(parent[:style]).to_s
|
82
|
-
end
|
83
|
-
|
84
|
-
end # Presentation
|
85
|
-
|
86
|
-
end # Vedeu
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# When the client application has defined an interface to be used, the
|
4
|
-
# Registrar stores the attributes into various repositories for later use.
|
5
|
-
#
|
6
|
-
# @api private
|
7
|
-
class Registrar
|
8
|
-
|
9
|
-
REPOSITORIES = [Buffers, Cursors, Groups, Interfaces, Offsets]
|
10
|
-
|
11
|
-
# @param attributes [Hash]
|
12
|
-
# @return [TrueClass|MissingRequired]
|
13
|
-
def self.record(attributes = {})
|
14
|
-
new(attributes).record
|
15
|
-
end
|
16
|
-
|
17
|
-
# Removes all entities from all repositories. Use with caution.
|
18
|
-
#
|
19
|
-
# @return [TrueClass]
|
20
|
-
def self.reset!
|
21
|
-
REPOSITORIES.each { |repository| repository.reset }
|
22
|
-
|
23
|
-
true
|
24
|
-
end
|
25
|
-
|
26
|
-
# @param attributes [Hash]
|
27
|
-
# @return [Registrar]
|
28
|
-
def initialize(attributes = {})
|
29
|
-
@attributes = attributes
|
30
|
-
end
|
31
|
-
|
32
|
-
# Adds the attributes to a variety of repositories to use later.
|
33
|
-
#
|
34
|
-
# @return [TrueClass|MissingRequired]
|
35
|
-
def record
|
36
|
-
focus
|
37
|
-
|
38
|
-
REPOSITORIES.each { |repository| repository.add(attributes) }
|
39
|
-
|
40
|
-
true
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
attr_reader :attributes
|
46
|
-
|
47
|
-
def focus
|
48
|
-
Focus.add(attributes[:name], attributes[:focus])
|
49
|
-
end
|
50
|
-
|
51
|
-
end # Registrar
|
52
|
-
|
53
|
-
end # Vedeu
|
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
describe 'Testing Vedeu::API methods' do
|
4
|
-
|
5
|
-
describe '.configure' do
|
6
|
-
it 'raises an exception when the required block is not given' do
|
7
|
-
proc { Vedeu.configure }.must_raise(Vedeu::InvalidSyntax)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '.defined' do
|
12
|
-
it 'returns the Vedeu::API::Defined module name' do
|
13
|
-
Vedeu.defined.must_equal(Vedeu::API::Defined)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe '.event' do
|
18
|
-
it 'returns a list of event associated with the provided event name ' \
|
19
|
-
'after adding the event' do
|
20
|
-
skip 'Need to mock an event'
|
21
|
-
Vedeu.event(:_hydrogen_event_).must_equal('')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should raise an exception when the event name is nil or empty' do
|
25
|
-
skip 'Need to raise an exception'
|
26
|
-
Vedeu.event(nil).must_equal('')
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '.focus' do
|
31
|
-
it 'raises an exception when the interface does not exist' do
|
32
|
-
proc { Vedeu.focus(nil) }.must_raise(Vedeu::ModelNotFound)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'raises an exception when the interface does not exist' do
|
36
|
-
proc { Vedeu.focus('not_defined') }.must_raise(Vedeu::ModelNotFound)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'sets the specified interface as in focus' do
|
40
|
-
skip 'Finish this test off'
|
41
|
-
Vedeu.focus('hydrogen')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe '.height' do
|
46
|
-
before { Vedeu::Terminal.console.stubs(:winsize).returns([25, 80]) }
|
47
|
-
|
48
|
-
it 'returns the height of the terminal' do
|
49
|
-
Vedeu.height.must_equal(25)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe '.interface' do
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '.keypress' do
|
57
|
-
end
|
58
|
-
|
59
|
-
describe '.keys' do
|
60
|
-
end
|
61
|
-
|
62
|
-
describe '.log' do
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '.menu' do
|
66
|
-
end
|
67
|
-
|
68
|
-
describe '.render' do
|
69
|
-
end
|
70
|
-
|
71
|
-
describe '.resize' do
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '.trigger' do
|
75
|
-
end
|
76
|
-
|
77
|
-
describe '.unevent' do
|
78
|
-
end
|
79
|
-
|
80
|
-
describe '.use' do
|
81
|
-
end
|
82
|
-
|
83
|
-
describe '.view' do
|
84
|
-
end
|
85
|
-
|
86
|
-
describe '.views' do
|
87
|
-
end
|
88
|
-
|
89
|
-
describe '.width' do
|
90
|
-
before { Vedeu::Terminal.console.stubs(:winsize).returns([25, 80]) }
|
91
|
-
|
92
|
-
it 'returns the width of the terminal' do
|
93
|
-
Vedeu.width.must_equal(80)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
@@ -1,138 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
describe 'DSL Stream tests' do
|
4
|
-
|
5
|
-
# describe '#align' do
|
6
|
-
# it ':left' do
|
7
|
-
# Vedeu.view 'test' do
|
8
|
-
# line do
|
9
|
-
# stream do
|
10
|
-
# align :left
|
11
|
-
# end
|
12
|
-
# end
|
13
|
-
# end.must_equal({})
|
14
|
-
# end
|
15
|
-
|
16
|
-
# it ':right' do
|
17
|
-
# Vedeu.view 'test' do
|
18
|
-
# line do
|
19
|
-
# stream do
|
20
|
-
# align :right
|
21
|
-
# end
|
22
|
-
# end
|
23
|
-
# end.must_equal({})
|
24
|
-
# end
|
25
|
-
|
26
|
-
# it ':centre' do
|
27
|
-
# Vedeu.view 'test' do
|
28
|
-
# line do
|
29
|
-
# stream do
|
30
|
-
# align :centre
|
31
|
-
# end
|
32
|
-
# end
|
33
|
-
# end.must_equal({})
|
34
|
-
# end
|
35
|
-
|
36
|
-
# it ':invalid' do
|
37
|
-
# proc { Vedeu.view 'test' do
|
38
|
-
# line do
|
39
|
-
# stream do
|
40
|
-
# align :invalid
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
# end }.must_raise(Vedeu::InvalidSyntax)
|
44
|
-
# end
|
45
|
-
|
46
|
-
# it ':right overriding :centre' do
|
47
|
-
# Vedeu.view 'test' do
|
48
|
-
# line do
|
49
|
-
# stream do
|
50
|
-
# align :centre
|
51
|
-
# align :right
|
52
|
-
# end
|
53
|
-
# end
|
54
|
-
# end.must_equal({})
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
|
58
|
-
# describe '#centre' do
|
59
|
-
# it 'centre' do
|
60
|
-
# Vedeu.view 'test' do
|
61
|
-
# line do
|
62
|
-
# stream do
|
63
|
-
# align centre
|
64
|
-
# end
|
65
|
-
# end
|
66
|
-
# end.must_equal({})
|
67
|
-
# end
|
68
|
-
# end
|
69
|
-
|
70
|
-
# describe '#left' do
|
71
|
-
# it 'left' do
|
72
|
-
# Vedeu.view 'test' do
|
73
|
-
# line do
|
74
|
-
# stream do
|
75
|
-
# align left
|
76
|
-
# end
|
77
|
-
# end
|
78
|
-
# end.must_equal({})
|
79
|
-
# end
|
80
|
-
# end
|
81
|
-
|
82
|
-
# describe '#right' do
|
83
|
-
# it 'right' do
|
84
|
-
# Vedeu.view 'test' do
|
85
|
-
# line do
|
86
|
-
# stream do
|
87
|
-
# align right
|
88
|
-
# end
|
89
|
-
# end
|
90
|
-
# end.must_equal({})
|
91
|
-
# end
|
92
|
-
# end
|
93
|
-
|
94
|
-
# describe '#text' do
|
95
|
-
# it 'text' do
|
96
|
-
# Vedeu.view 'test' do
|
97
|
-
# line do
|
98
|
-
# stream do
|
99
|
-
# text 'Some text...'
|
100
|
-
# end
|
101
|
-
# end
|
102
|
-
# end.must_equal({})
|
103
|
-
# end
|
104
|
-
|
105
|
-
# it 'invalid' do
|
106
|
-
# proc { Vedeu.view 'test' do
|
107
|
-
# line do
|
108
|
-
# stream do
|
109
|
-
# text
|
110
|
-
# end
|
111
|
-
# end
|
112
|
-
# end }.must_raise(ArgumentError)
|
113
|
-
# end
|
114
|
-
# end
|
115
|
-
|
116
|
-
# describe '#width' do
|
117
|
-
# it 'width' do
|
118
|
-
# Vedeu.view 'test' do
|
119
|
-
# line do
|
120
|
-
# stream do
|
121
|
-
# width 35
|
122
|
-
# end
|
123
|
-
# end
|
124
|
-
# end.must_equal({})
|
125
|
-
# end
|
126
|
-
|
127
|
-
# it 'invalid' do
|
128
|
-
# proc { Vedeu.view 'test' do
|
129
|
-
# line do
|
130
|
-
# stream do
|
131
|
-
# width
|
132
|
-
# end
|
133
|
-
# end
|
134
|
-
# end }.must_raise(ArgumentError)
|
135
|
-
# end
|
136
|
-
# end
|
137
|
-
|
138
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class MyFirstApplication
|
4
|
-
include Vedeu
|
5
|
-
|
6
|
-
interface 'hydrogen' do
|
7
|
-
x 2
|
8
|
-
y 2
|
9
|
-
width 40
|
10
|
-
height 4
|
11
|
-
centred false
|
12
|
-
delay 0.25
|
13
|
-
group 'elements'
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize; end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe 'Define an interface' do
|
20
|
-
it 'defines an interface' do
|
21
|
-
skip
|
22
|
-
MyFirstApplication.new
|
23
|
-
|
24
|
-
Vedeu.defined.interfaces.must_equal(['hydrogen'])
|
25
|
-
end
|
26
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class MyFirstApplication
|
4
|
-
include Vedeu
|
5
|
-
|
6
|
-
interface 'hydrogen' do
|
7
|
-
x 2
|
8
|
-
y 2
|
9
|
-
width 50
|
10
|
-
height 2
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.start
|
14
|
-
Vedeu::Launcher.new(['--run-once', '--noninteractive']).execute!
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe 'Run the application once, printing a message on the screen and ' \
|
19
|
-
'gracefully terminating.' do
|
20
|
-
it 'writes a message to the screen' do
|
21
|
-
skip
|
22
|
-
stdout, stderr = capture_io { MyFirstApplication.start }
|
23
|
-
stdout.must_equal('Great success! Now, try something a little harder.')
|
24
|
-
stderr.must_equal('')
|
25
|
-
end
|
26
|
-
end
|