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
data/lib/vedeu/api/api.rb
DELETED
@@ -1,239 +0,0 @@
|
|
1
|
-
require 'vedeu/support/terminal'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
# Provides the API to Vedeu. Methods therein, and classes belonging to this
|
6
|
-
# module expose Vedeu's core functionality.
|
7
|
-
#
|
8
|
-
# @api public
|
9
|
-
module API
|
10
|
-
|
11
|
-
extend Forwardable
|
12
|
-
|
13
|
-
# @see Vedeu::Events#add
|
14
|
-
def_delegators Events, :event
|
15
|
-
def_delegators Keymap, :keys
|
16
|
-
def_delegators Keymaps, :keypress
|
17
|
-
def_delegators Vedeu::Terminal, :height, :width
|
18
|
-
|
19
|
-
# Configure Vedeu using a simple configuration DSL.
|
20
|
-
#
|
21
|
-
# @param block [Proc]
|
22
|
-
# @raise [InvalidSyntax] When the required block is not given.
|
23
|
-
# @return [Hash]
|
24
|
-
# @see Vedeu::Configuration
|
25
|
-
def configure(&block)
|
26
|
-
fail InvalidSyntax, '`configure` requires a block.' unless block_given?
|
27
|
-
|
28
|
-
Vedeu::Configuration.configure(&block)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Returns information about various registered subsystems when used with
|
32
|
-
# a defined method within {Vedeu::API::Defined}.
|
33
|
-
#
|
34
|
-
# @return [Vedeu::API::Defined]
|
35
|
-
# @see Vedeu::API::Defined
|
36
|
-
def defined
|
37
|
-
Vedeu::API::Defined
|
38
|
-
end
|
39
|
-
|
40
|
-
# Used after defining an interface or interfaces to set the initially
|
41
|
-
# focussed interface.
|
42
|
-
#
|
43
|
-
# @param name [String] The interface to focus; must be defined.
|
44
|
-
# @return [String] The name of the interface now in focus.
|
45
|
-
# @raise [ModelNotFound] When the interface cannot be found.
|
46
|
-
def focus(name)
|
47
|
-
Vedeu.trigger(:_focus_by_name_, name)
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
# Register an interface by name which will display output from a event or
|
52
|
-
# command. This provides the means for you to define your application's
|
53
|
-
# views without their content.
|
54
|
-
#
|
55
|
-
# @todo More documentation required.
|
56
|
-
# @param name [String] The name of the interface. Used to reference the
|
57
|
-
# interface throughout your application's execution lifetime.
|
58
|
-
# @param block [Proc] A set of attributes which define the features of the
|
59
|
-
# interface.
|
60
|
-
#
|
61
|
-
# @example
|
62
|
-
# Vedeu.interface 'my_interface' do
|
63
|
-
# ...
|
64
|
-
#
|
65
|
-
# Vedeu.interface do
|
66
|
-
# name 'interfaces_must_have_a_name'
|
67
|
-
# ...
|
68
|
-
#
|
69
|
-
# @return [TrueClass]
|
70
|
-
def interface(name = '', &block)
|
71
|
-
API::Interface.define({ name: name }, &block)
|
72
|
-
end
|
73
|
-
|
74
|
-
# Register a menu by name which will display a collection of items for your
|
75
|
-
# users to select; and provide interactivity within your application.
|
76
|
-
#
|
77
|
-
# @param name [String] The name of the menu. Used to reference the
|
78
|
-
# menu throughout your application's execution lifetime.
|
79
|
-
# @param block [Proc] A set of attributes which define the features of the
|
80
|
-
# menu. See {Vedeu::API::Menu#items} and {Vedeu::API::Menu#name}.
|
81
|
-
#
|
82
|
-
# @example
|
83
|
-
# Vedeu.menu 'my_interface' do
|
84
|
-
# items [:item_1, :item_2, :item_3]
|
85
|
-
# ...
|
86
|
-
#
|
87
|
-
# Vedeu.menu do
|
88
|
-
# name 'menus_must_have_a_name'
|
89
|
-
# items Track.all_my_favourites
|
90
|
-
# ...
|
91
|
-
#
|
92
|
-
# @raise [InvalidSyntax] When the required block is not given.
|
93
|
-
# @return [API::Menu]
|
94
|
-
def menu(name = '', &block)
|
95
|
-
fail InvalidSyntax, '`menu` requires a block.' unless block_given?
|
96
|
-
|
97
|
-
API::Menu.define({ name: name }, &block)
|
98
|
-
end
|
99
|
-
|
100
|
-
# Directly write a view buffer to the terminal. Using this method means
|
101
|
-
# that the refresh event does not need to be triggered after creating the
|
102
|
-
# view or views, though can be later triggered if needed.
|
103
|
-
#
|
104
|
-
# @param block [Proc] The directives you wish to send to render. Must
|
105
|
-
# include `view` or `views` with associated sub-
|
106
|
-
# directives.
|
107
|
-
#
|
108
|
-
# @example
|
109
|
-
# Vedeu.render do
|
110
|
-
# views do
|
111
|
-
# view 'my_interface' do
|
112
|
-
# ...
|
113
|
-
#
|
114
|
-
# Vedeu.render do
|
115
|
-
# view 'my_interface' do
|
116
|
-
# ...
|
117
|
-
#
|
118
|
-
# @raise [InvalidSyntax] When the required block is not given.
|
119
|
-
# @return [Array] A collection of strings, each defining containing the
|
120
|
-
# escape sequences and content. This data has already been sent to the
|
121
|
-
# terminal to be output.
|
122
|
-
def render(&block)
|
123
|
-
API::Composition.render(&block)
|
124
|
-
end
|
125
|
-
|
126
|
-
# When the terminal emit the 'SIGWINCH' signal, Vedeu can intercept this
|
127
|
-
# and attempt to redraw the current interface with varying degrees of
|
128
|
-
# success. Can also be used to simulate a terminal resize.
|
129
|
-
#
|
130
|
-
# @return [TrueClass]
|
131
|
-
def resize
|
132
|
-
trigger(:_clear_)
|
133
|
-
|
134
|
-
trigger(:_refresh_)
|
135
|
-
|
136
|
-
true
|
137
|
-
end
|
138
|
-
|
139
|
-
# Trigger a registered or system event by name with arguments. If the
|
140
|
-
# event stored returns a value, that is returned. If multiple events are
|
141
|
-
# registered for a name, then the result of each event will be returned as
|
142
|
-
# part of a collection.
|
143
|
-
#
|
144
|
-
# @param name [Symbol] The name of the event you wish to trigger. The event
|
145
|
-
# does not have to exist.
|
146
|
-
# @param args [Array] Any arguments the event needs to execute correctly.
|
147
|
-
#
|
148
|
-
# @example
|
149
|
-
# Vedeu.trigger(:my_event, :oxidize, 'nitrogen')
|
150
|
-
#
|
151
|
-
# @return [Array|undefined]
|
152
|
-
def trigger(name, *args)
|
153
|
-
Events.use(name, *args)
|
154
|
-
end
|
155
|
-
|
156
|
-
# Unregisters the event by name, effectively deleting the associated events
|
157
|
-
# bound with it also.
|
158
|
-
#
|
159
|
-
# @param name [Symbol]
|
160
|
-
# @return [Hash]
|
161
|
-
def unevent(name)
|
162
|
-
Events.remove(name)
|
163
|
-
end
|
164
|
-
|
165
|
-
# Use attributes of another interface whilst defining one.
|
166
|
-
#
|
167
|
-
# @todo More documentation required.
|
168
|
-
# @param name [String] The name of the interface you wish to use. Typically
|
169
|
-
# used when defining interfaces to share geometry.
|
170
|
-
#
|
171
|
-
# @example
|
172
|
-
# Vedeu.interface 'main_screen' do
|
173
|
-
# width use('my_interface').width
|
174
|
-
# x use('my_interface').east(1)
|
175
|
-
# ...
|
176
|
-
#
|
177
|
-
# @return [Vedeu::Interface]
|
178
|
-
def use(name)
|
179
|
-
Vedeu::Interface.new(Vedeu::Interfaces.find(name))
|
180
|
-
end
|
181
|
-
|
182
|
-
# Define a view (content) for an interface.
|
183
|
-
#
|
184
|
-
# @todo More documentation required.
|
185
|
-
# @param name [String] The name of the interface you are targetting for this
|
186
|
-
# view.
|
187
|
-
# @param block [Proc] The directives you wish to send to this interface.
|
188
|
-
#
|
189
|
-
# @example
|
190
|
-
# view 'my_interface' do
|
191
|
-
# ...
|
192
|
-
#
|
193
|
-
# @return [Hash]
|
194
|
-
def view(name, &block)
|
195
|
-
API::Composition.build { view(name, &block) }
|
196
|
-
end
|
197
|
-
|
198
|
-
# Instruct Vedeu to treat contents of block as a single composition.
|
199
|
-
#
|
200
|
-
# @note The views declared within this block are stored in their respective
|
201
|
-
# interface back buffers until a refresh event occurs. When the refresh
|
202
|
-
# event is triggered, the back buffers are swapped into the front buffers
|
203
|
-
# and the content here will be rendered to {Terminal.output}.
|
204
|
-
#
|
205
|
-
# @param block [Proc] Instructs Vedeu to treat all of the 'view' directives
|
206
|
-
# therein as one instruction. Useful for redrawing multiple interfaces at
|
207
|
-
# once.
|
208
|
-
#
|
209
|
-
# @example
|
210
|
-
# views do
|
211
|
-
# view 'my_interface' do
|
212
|
-
# ... some attributes ...
|
213
|
-
# end
|
214
|
-
# view 'my_other_interface' do
|
215
|
-
# ... some other attributes ...
|
216
|
-
# end
|
217
|
-
# ...
|
218
|
-
#
|
219
|
-
# composition do
|
220
|
-
# view 'my_interface' do
|
221
|
-
# ...
|
222
|
-
# ...
|
223
|
-
#
|
224
|
-
# @raise [InvalidSyntax] When the required block is not given.
|
225
|
-
# @return [Array]
|
226
|
-
def views(&block)
|
227
|
-
fail InvalidSyntax, '`views` requires a block.' unless block_given?
|
228
|
-
|
229
|
-
API::Composition.build(&block)
|
230
|
-
end
|
231
|
-
alias_method :composition, :views
|
232
|
-
|
233
|
-
end # API
|
234
|
-
|
235
|
-
extend API
|
236
|
-
|
237
|
-
trap('SIGWINCH') { Vedeu.trigger(:_resize_) }
|
238
|
-
|
239
|
-
end # Vedeu
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
module API
|
4
|
-
|
5
|
-
# @see Vedeu::Composition
|
6
|
-
#
|
7
|
-
# @api public
|
8
|
-
class Composition < Vedeu::Composition
|
9
|
-
|
10
|
-
# @param block [Proc]
|
11
|
-
# @return [Array]
|
12
|
-
# @see Vedeu::API#render
|
13
|
-
def self.render(&block)
|
14
|
-
fail InvalidSyntax, '`render` requires a block.' unless block_given?
|
15
|
-
|
16
|
-
attributes = API::Composition.build({}, &block)
|
17
|
-
|
18
|
-
Vedeu::Composition.new(attributes).interfaces.map do |interface|
|
19
|
-
Buffers.add(interface.attributes)
|
20
|
-
|
21
|
-
interface.name
|
22
|
-
end.map { |name| Vedeu::Refresh.by_name(name) }
|
23
|
-
end
|
24
|
-
|
25
|
-
# @param name [String]
|
26
|
-
# @param block [Proc]
|
27
|
-
# @return [Hash]
|
28
|
-
# @see Vedeu::API#view
|
29
|
-
def view(name, &block)
|
30
|
-
attributes[:interfaces] << API::Interface
|
31
|
-
.build({ name: name, parent: self.view_attributes }, &block)
|
32
|
-
end
|
33
|
-
|
34
|
-
end # Composition
|
35
|
-
|
36
|
-
end # API
|
37
|
-
|
38
|
-
end # Vedeu
|
data/lib/vedeu/api/defined.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
module API
|
4
|
-
|
5
|
-
# Provides a set of helpful API methods to return information about various
|
6
|
-
# registered subsystems.
|
7
|
-
#
|
8
|
-
# @api public
|
9
|
-
module Defined
|
10
|
-
|
11
|
-
extend self
|
12
|
-
|
13
|
-
# Returns all events currently registered with Vedeu.
|
14
|
-
#
|
15
|
-
# @return [Array]
|
16
|
-
def events
|
17
|
-
Vedeu::Events.registered
|
18
|
-
end
|
19
|
-
|
20
|
-
# Returns all groups currently registered with Vedeu.
|
21
|
-
#
|
22
|
-
# @return [Array]
|
23
|
-
def groups
|
24
|
-
Vedeu::Groups.registered
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns all interfaces currently registered with Vedeu.
|
28
|
-
#
|
29
|
-
# @return [Array]
|
30
|
-
def interfaces
|
31
|
-
Vedeu::Interfaces.registered
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns the names of all keymaps currently registered with Vedeu.
|
35
|
-
#
|
36
|
-
# @return [Array]
|
37
|
-
def keymaps
|
38
|
-
Vedeu::Keymaps.registered
|
39
|
-
end
|
40
|
-
|
41
|
-
# Returns all menus currently registered with Vedeu.
|
42
|
-
#
|
43
|
-
# @return [Array]
|
44
|
-
def menus
|
45
|
-
Vedeu::Menus.registered
|
46
|
-
end
|
47
|
-
|
48
|
-
end # Defined
|
49
|
-
|
50
|
-
end # API
|
51
|
-
|
52
|
-
end # Vedeu
|
data/lib/vedeu/api/helpers.rb
DELETED
@@ -1,161 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
module API
|
4
|
-
|
5
|
-
# Provides colour and style helpers for use in the {API::Interface},
|
6
|
-
# {API::Line} and {API::Stream} classes.
|
7
|
-
#
|
8
|
-
# @api public
|
9
|
-
module Helpers
|
10
|
-
|
11
|
-
include Common
|
12
|
-
|
13
|
-
# Define the background colour for an interface, line, or a stream. When
|
14
|
-
# called with a block, will create a new stream with the background colour
|
15
|
-
# specified; see {Vedeu::API::Stream} for directives which are valid
|
16
|
-
# within the block. When the block terminates, the background will return
|
17
|
-
# to that of the parent.
|
18
|
-
#
|
19
|
-
# @param value [String]
|
20
|
-
# @param block [Proc]
|
21
|
-
#
|
22
|
-
# @example
|
23
|
-
# interface 'my_interface' do
|
24
|
-
# background '#0022ff'
|
25
|
-
# ...
|
26
|
-
#
|
27
|
-
# line do
|
28
|
-
# background '#0022ff'
|
29
|
-
# ...
|
30
|
-
#
|
31
|
-
# stream do
|
32
|
-
# background '#0022ff'
|
33
|
-
# ...
|
34
|
-
#
|
35
|
-
# foreground('#0022ff') { 'This will be blue.' }
|
36
|
-
#
|
37
|
-
# @raise [InvalidSyntax] When the value is not defined.
|
38
|
-
# @return [Hash]
|
39
|
-
def background(value = '', &block)
|
40
|
-
unless defined_value?(value)
|
41
|
-
fail InvalidSyntax, '`background` requires a value.'
|
42
|
-
end
|
43
|
-
|
44
|
-
if block_given?
|
45
|
-
attributes[:streams] << API::Stream
|
46
|
-
.build({ colour: { background: value },
|
47
|
-
parent: self.view_attributes }, &block)
|
48
|
-
|
49
|
-
else
|
50
|
-
attributes[:colour].merge!({ background: value })
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# Define either or both foreground and background colours for an
|
56
|
-
# interface, line or a stream.
|
57
|
-
#
|
58
|
-
# @param values [Hash]
|
59
|
-
#
|
60
|
-
# @example
|
61
|
-
# interface 'my_interface' do
|
62
|
-
# colour background: '#000000', foreground: '#ffffff'
|
63
|
-
# ...
|
64
|
-
#
|
65
|
-
# line do
|
66
|
-
# colour background: '#000000', foreground: '#ffffff'
|
67
|
-
# ...
|
68
|
-
#
|
69
|
-
# stream do
|
70
|
-
# colour background: '#000000', foreground: '#ffffff'
|
71
|
-
# ...
|
72
|
-
#
|
73
|
-
# @raise [InvalidSyntax] When the values parameter does not contain
|
74
|
-
# required keys.
|
75
|
-
# @return [Hash]
|
76
|
-
def colour(values)
|
77
|
-
unless values.key?(:foreground) || values.key?(:background)
|
78
|
-
fail InvalidSyntax, '#colour expects a Hash containing ' \
|
79
|
-
':foreground or :background or both.'
|
80
|
-
end
|
81
|
-
|
82
|
-
attributes[:colour] = values
|
83
|
-
end
|
84
|
-
|
85
|
-
# Define the foreground colour for an interface, line, or a stream. When
|
86
|
-
# called with a block, will create a new stream with the foreground colour
|
87
|
-
# specified; see {Vedeu::API::Stream} for directives which are valid
|
88
|
-
# within the block. When the block terminates, the foreground will return
|
89
|
-
# to that of the parent.
|
90
|
-
#
|
91
|
-
# @param value [String]
|
92
|
-
# @param block [Proc]
|
93
|
-
#
|
94
|
-
# @example
|
95
|
-
# interface 'my_interface' do
|
96
|
-
# foreground '#0022ff'
|
97
|
-
# ...
|
98
|
-
#
|
99
|
-
# line do
|
100
|
-
# foreground '#0022ff'
|
101
|
-
# ...
|
102
|
-
#
|
103
|
-
# stream do
|
104
|
-
# foreground '#0022ff'
|
105
|
-
# ...
|
106
|
-
#
|
107
|
-
# foreground('#0022ff') { 'This will be blue.' }
|
108
|
-
#
|
109
|
-
# @raise [InvalidSyntax] When the value is not defined.
|
110
|
-
# @return [Hash]
|
111
|
-
def foreground(value = '', &block)
|
112
|
-
unless defined_value?(value)
|
113
|
-
fail InvalidSyntax, '`foreground` requires a value.'
|
114
|
-
end
|
115
|
-
|
116
|
-
if block_given?
|
117
|
-
attributes[:streams] << API::Stream
|
118
|
-
.build({ colour: { foreground: value },
|
119
|
-
parent: self.view_attributes }, &block)
|
120
|
-
|
121
|
-
else
|
122
|
-
attributes[:colour].merge!({ foreground: value })
|
123
|
-
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# Define a style or styles for an interface, line or a stream.
|
128
|
-
#
|
129
|
-
# @param values [Array|String]
|
130
|
-
# @param block [Proc]
|
131
|
-
#
|
132
|
-
# @example
|
133
|
-
# interface 'my_interface' do
|
134
|
-
# style 'normal'
|
135
|
-
# ...
|
136
|
-
#
|
137
|
-
# line do
|
138
|
-
# style ['bold', 'underline']
|
139
|
-
# ...
|
140
|
-
#
|
141
|
-
# stream do
|
142
|
-
# style 'blink'
|
143
|
-
# ...
|
144
|
-
#
|
145
|
-
# @return [Array]
|
146
|
-
def style(values = [], &block)
|
147
|
-
if block_given?
|
148
|
-
attributes[:streams] << API::Stream
|
149
|
-
.build({ style: Array(values) }, &block)
|
150
|
-
|
151
|
-
else
|
152
|
-
Array(values).each { |value| attributes[:style] << value }
|
153
|
-
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
end # Helpers
|
158
|
-
|
159
|
-
end # API
|
160
|
-
|
161
|
-
end # Vedeu
|