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
@@ -0,0 +1,112 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
class Mapper
|
4
|
+
|
5
|
+
# @param key [NilClass|String|Symbol]
|
6
|
+
# @param name [NilClass|String]
|
7
|
+
# @return [Boolean]
|
8
|
+
def self.keypress(key = nil, name = nil)
|
9
|
+
return false unless key
|
10
|
+
|
11
|
+
new(key, name).keypress
|
12
|
+
end
|
13
|
+
|
14
|
+
# @param key [NilClass|String|Symbol]
|
15
|
+
# @param name [NilClass|String]
|
16
|
+
# @return [Boolean]
|
17
|
+
def self.valid?(key = nil, name = nil)
|
18
|
+
return false unless key
|
19
|
+
|
20
|
+
new(key, name).valid?
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param key [NilClass|String|Symbol]
|
24
|
+
# @param name [NilClass|String]
|
25
|
+
# @param repository [NilClass|Repository]
|
26
|
+
# @return [Mapper]
|
27
|
+
def initialize(key = nil, name = nil, repository = nil)
|
28
|
+
@key = key
|
29
|
+
@name = name
|
30
|
+
@repository = repository || Vedeu.keymaps
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Boolean]
|
34
|
+
def keypress
|
35
|
+
return false unless key
|
36
|
+
|
37
|
+
return true if key_defined? && keymap.use(key)
|
38
|
+
|
39
|
+
return true if global_key? && keymap(global).use(key)
|
40
|
+
|
41
|
+
return true if system_key? && keymap(system).use(key)
|
42
|
+
|
43
|
+
false
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Boolean]
|
47
|
+
def valid?
|
48
|
+
return false unless key
|
49
|
+
|
50
|
+
return false if key_defined?
|
51
|
+
|
52
|
+
return false if global_key?
|
53
|
+
|
54
|
+
return false if system_key?
|
55
|
+
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
attr_reader :key, :repository
|
62
|
+
|
63
|
+
# @return [Boolean]
|
64
|
+
def global_key?
|
65
|
+
key_defined?(global)
|
66
|
+
end
|
67
|
+
|
68
|
+
# @return [Boolean]
|
69
|
+
def system_key?
|
70
|
+
key_defined?(system)
|
71
|
+
end
|
72
|
+
|
73
|
+
# @param named [NilClass|String]
|
74
|
+
# @return [Boolean]
|
75
|
+
def key_defined?(named = name)
|
76
|
+
keymap?(named) && keymap(named).key_defined?(key)
|
77
|
+
end
|
78
|
+
|
79
|
+
# @param named [NilClass|String]
|
80
|
+
# @return [Keymap]
|
81
|
+
def keymap(named = name)
|
82
|
+
repository.find(named)
|
83
|
+
end
|
84
|
+
|
85
|
+
# @param named [NilClass|String]
|
86
|
+
# @return [Boolean]
|
87
|
+
def keymap?(named = name)
|
88
|
+
repository.registered?(named)
|
89
|
+
end
|
90
|
+
|
91
|
+
# With a name, we check the keymap with that name, otherwise we use the
|
92
|
+
# name of the interface currently in focus.
|
93
|
+
#
|
94
|
+
# @return [String|NilClass]
|
95
|
+
def name
|
96
|
+
@name || Vedeu.focus
|
97
|
+
end
|
98
|
+
alias_method :interface, :name
|
99
|
+
|
100
|
+
# @return [String]
|
101
|
+
def global
|
102
|
+
'_global_'
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [String]
|
106
|
+
def system
|
107
|
+
'_system_'
|
108
|
+
end
|
109
|
+
|
110
|
+
end # Mapper
|
111
|
+
|
112
|
+
end # Vedeu
|
data/lib/vedeu/launcher.rb
CHANGED
@@ -46,14 +46,12 @@ module Vedeu
|
|
46
46
|
def execute!
|
47
47
|
$stdin, $stdout, $stderr = @stdin, @stdout, @stderr
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
Application.start
|
49
|
+
Application.start(configuration)
|
52
50
|
|
53
51
|
@exit_code = 0
|
54
52
|
rescue StandardError => uncaught_exception
|
55
53
|
puts uncaught_exception.message
|
56
|
-
puts uncaught_exception.backtrace.join("\n")
|
54
|
+
puts uncaught_exception.backtrace.join("\n") if configuration.debug?
|
57
55
|
|
58
56
|
ensure
|
59
57
|
Vedeu.log("Exiting gracefully.")
|
@@ -66,6 +64,11 @@ module Vedeu
|
|
66
64
|
|
67
65
|
attr_reader :argv
|
68
66
|
|
67
|
+
# @return []
|
68
|
+
def configuration
|
69
|
+
Configuration.configure(argv)
|
70
|
+
end
|
71
|
+
|
69
72
|
end # Launcher
|
70
73
|
|
71
74
|
end # Vedeu
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'vedeu/models/collection'
|
2
|
+
|
3
|
+
require 'vedeu/models/view/all'
|
4
|
+
|
5
|
+
require 'vedeu/models/focus'
|
6
|
+
require 'vedeu/models/geometry'
|
7
|
+
require 'vedeu/models/group'
|
8
|
+
require 'vedeu/models/menu'
|
9
|
+
require 'vedeu/models/model'
|
10
|
+
|
11
|
+
module Vedeu
|
12
|
+
end # Vedeu
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
# Convert an Array into an object which has some meaning in the context it
|
6
|
+
# is being used.
|
7
|
+
#
|
8
|
+
# @private
|
9
|
+
class Collection
|
10
|
+
|
11
|
+
include Enumerable
|
12
|
+
|
13
|
+
attr_accessor :parent, :name
|
14
|
+
|
15
|
+
def self.coerce(collection = [], parent = nil, name = nil)
|
16
|
+
if collection.kind_of?(Vedeu::Model::Collection)
|
17
|
+
collection
|
18
|
+
|
19
|
+
elsif collection.is_a?(Array)
|
20
|
+
new(collection, parent, name)
|
21
|
+
|
22
|
+
else
|
23
|
+
new(Array(collection), parent, name)
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(collection = [], parent = nil, name = nil)
|
29
|
+
@collection = collection
|
30
|
+
@parent = parent
|
31
|
+
@name = name
|
32
|
+
end
|
33
|
+
|
34
|
+
def [](value)
|
35
|
+
@collection[value]
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Vedeu::Model::Collection]
|
39
|
+
def add(*other)
|
40
|
+
self.class.new(@collection += other, parent, name)
|
41
|
+
end
|
42
|
+
alias_method :<<, :add
|
43
|
+
|
44
|
+
def all
|
45
|
+
@collection
|
46
|
+
end
|
47
|
+
|
48
|
+
def each(&block)
|
49
|
+
@collection.each(&block)
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Boolean]
|
53
|
+
def empty?
|
54
|
+
@collection.empty?
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Fixnum]
|
58
|
+
def size
|
59
|
+
@collection.size
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [String]
|
63
|
+
def to_s
|
64
|
+
@collection.map(&:to_s).join
|
65
|
+
end
|
66
|
+
|
67
|
+
end # Collection
|
68
|
+
|
69
|
+
end # Model
|
70
|
+
|
71
|
+
end # Vedeu
|
@@ -7,7 +7,6 @@ module Vedeu
|
|
7
7
|
# @api private
|
8
8
|
module Focus
|
9
9
|
|
10
|
-
include Repository
|
11
10
|
extend self
|
12
11
|
|
13
12
|
# Add an interface name to the focus list unless it is already registered.
|
@@ -17,48 +16,48 @@ module Vedeu
|
|
17
16
|
# collection, making that interface the currently focussed interface.
|
18
17
|
# @return [Array] The collection of interface names.
|
19
18
|
def add(name, focus = false)
|
20
|
-
|
19
|
+
if registered?(name)
|
20
|
+
return storage unless focus
|
21
21
|
|
22
|
-
|
23
|
-
storage
|
22
|
+
by_name(name)
|
23
|
+
storage
|
24
24
|
|
25
25
|
else
|
26
|
-
|
26
|
+
Vedeu.log("Storing focus entry: '#{name}'")
|
27
27
|
|
28
|
+
if focus
|
29
|
+
storage.unshift(name)
|
30
|
+
|
31
|
+
else
|
32
|
+
storage.push(name)
|
33
|
+
|
34
|
+
end
|
28
35
|
end
|
29
36
|
end
|
30
37
|
|
31
|
-
# Focus an interface by name.
|
38
|
+
# Focus an interface by name. Used after defining an interface or interfaces
|
39
|
+
# to set the initially focussed interface.
|
32
40
|
#
|
33
|
-
# @param name [String]
|
41
|
+
# @param name [String] The interface to focus; must be defined.
|
34
42
|
# @raise [ModelNotFound] When the interface cannot be found.
|
35
|
-
# @return [String]
|
43
|
+
# @return [String] The name of the interface now in focus.
|
36
44
|
def by_name(name)
|
37
|
-
fail ModelNotFound
|
45
|
+
fail ModelNotFound, "Cannot focus '#{name}' as this interface has not " \
|
46
|
+
"been registered." unless registered?(name)
|
38
47
|
|
39
48
|
storage.rotate!(storage.index(name))
|
40
49
|
|
41
50
|
update
|
42
51
|
end
|
52
|
+
alias_method :focus_by_name, :by_name
|
43
53
|
|
44
54
|
# Return the interface currently focussed.
|
45
55
|
#
|
46
|
-
# @raise [NoInterfacesDefined] When no interfaces are defined, we cannot
|
47
|
-
# make one focussed.
|
48
56
|
# @return [String]
|
49
57
|
def current
|
50
|
-
fail NoInterfacesDefined if empty?
|
51
|
-
|
52
58
|
storage.first
|
53
59
|
end
|
54
|
-
|
55
|
-
# Return the cursor for the currently focussed interface. May be hidden.
|
56
|
-
#
|
57
|
-
# @return [String] The escape sequence to render the cursor as shown or
|
58
|
-
# hidden.
|
59
|
-
def cursor
|
60
|
-
Interface.new(Interfaces.find(current)).cursor.to_s
|
61
|
-
end
|
60
|
+
alias_method :focus, :current
|
62
61
|
|
63
62
|
# Returns a boolean indicating whether the named interface is focussed.
|
64
63
|
#
|
@@ -67,6 +66,14 @@ module Vedeu
|
|
67
66
|
def current?(name)
|
68
67
|
current == name
|
69
68
|
end
|
69
|
+
alias_method :focussed?, :current?
|
70
|
+
|
71
|
+
# Return a boolean indicating whether the storage is empty.
|
72
|
+
#
|
73
|
+
# @return [Boolean]
|
74
|
+
def empty?
|
75
|
+
storage.empty?
|
76
|
+
end
|
70
77
|
|
71
78
|
# Put the next interface relative to the current interfaces in focus.
|
72
79
|
#
|
@@ -77,6 +84,7 @@ module Vedeu
|
|
77
84
|
update
|
78
85
|
end
|
79
86
|
alias_method :next, :next_item
|
87
|
+
alias_method :focus_next, :next_item
|
80
88
|
|
81
89
|
# Put the previous interface relative to the current interface in focus.
|
82
90
|
#
|
@@ -88,6 +96,7 @@ module Vedeu
|
|
88
96
|
end
|
89
97
|
alias_method :prev, :prev_item
|
90
98
|
alias_method :previous, :prev_item
|
99
|
+
alias_method :focus_previous, :prev_item
|
91
100
|
|
92
101
|
# Refresh the interface in focus.
|
93
102
|
#
|
@@ -96,6 +105,32 @@ module Vedeu
|
|
96
105
|
Vedeu.trigger("_refresh_#{current}_".to_sym)
|
97
106
|
end
|
98
107
|
|
108
|
+
# Returns a collection of the names of all the registered entities.
|
109
|
+
#
|
110
|
+
# @return [Array]
|
111
|
+
def registered
|
112
|
+
return [] if empty?
|
113
|
+
|
114
|
+
storage
|
115
|
+
end
|
116
|
+
|
117
|
+
# Returns a boolean indicating whether the named model is registered.
|
118
|
+
#
|
119
|
+
# @param name [String]
|
120
|
+
# @return [Boolean]
|
121
|
+
def registered?(name)
|
122
|
+
return false if empty?
|
123
|
+
|
124
|
+
storage.include?(name)
|
125
|
+
end
|
126
|
+
|
127
|
+
# Reset the repository.
|
128
|
+
#
|
129
|
+
# @return [Array|Hash|Set]
|
130
|
+
def reset
|
131
|
+
@_storage = in_memory
|
132
|
+
end
|
133
|
+
|
99
134
|
private
|
100
135
|
|
101
136
|
# Return the name of the interface in focus after triggering the refresh
|
@@ -112,6 +147,13 @@ module Vedeu
|
|
112
147
|
current
|
113
148
|
end
|
114
149
|
|
150
|
+
# Access to the storage for this repository.
|
151
|
+
#
|
152
|
+
# @return [Hash]
|
153
|
+
def storage
|
154
|
+
@_storage ||= in_memory
|
155
|
+
end
|
156
|
+
|
115
157
|
# Returns an empty collection ready for the storing of interface names.
|
116
158
|
#
|
117
159
|
# @return [Array]
|