vedeu 0.4.13 → 0.4.14
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 +2 -1
- data/.travis.yml +2 -1
- data/Guardfile +6 -5
- data/README.md +3 -30
- data/Rakefile +5 -5
- data/bin/vedeu_drb_client +1 -1
- data/bin/vedeu_drb_server +91 -89
- data/bin/vedeu_test +4 -0
- data/config/rubocop_enabled.yml +5 -10
- data/examples/borders_app.rb +2 -1
- data/examples/colours_app.rb +13 -8
- data/examples/configuration_app.rb +3 -2
- data/examples/cursor_app.rb +16 -11
- data/examples/drb_app.rb +88 -89
- data/examples/focus_app.rb +31 -32
- data/examples/geometry_app.rb +2 -1
- data/examples/hello_world.rb +2 -1
- data/examples/lines_app.rb +2 -1
- data/examples/material_colours_app.rb +126 -0
- data/examples/typed_commands/typed_commands_app.rb +5 -1
- data/examples/view_templates_app/view_templates_app.rb +6 -3
- data/lib/vedeu/all.rb +1 -1
- data/lib/vedeu/api.rb +18 -10
- data/lib/vedeu/application.rb +0 -1
- data/lib/vedeu/bindings.rb +77 -16
- data/lib/vedeu/buffers/all.rb +2 -5
- data/lib/vedeu/buffers/buffer.rb +69 -25
- data/lib/vedeu/buffers/display_buffer.rb +3 -7
- data/lib/vedeu/configuration/all.rb +3 -6
- data/lib/vedeu/configuration/api.rb +28 -4
- data/lib/vedeu/configuration/cli.rb +9 -9
- data/lib/vedeu/configuration/configuration.rb +11 -7
- data/lib/vedeu/cursor/all.rb +3 -6
- data/lib/vedeu/cursor/cursor.rb +22 -14
- data/lib/vedeu/cursor/move.rb +32 -22
- data/lib/vedeu/cursor/refresh_cursor.rb +1 -1
- data/lib/vedeu/debug.rb +2 -1
- data/lib/vedeu/distributed/client.rb +1 -7
- data/lib/vedeu/distributed/server.rb +0 -4
- data/lib/vedeu/distributed/subprocess.rb +1 -1
- data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -1
- data/lib/vedeu/distributed/test_application.rb +3 -5
- data/lib/vedeu/distributed/uri.rb +2 -2
- data/lib/vedeu/dsl/all.rb +6 -6
- data/lib/vedeu/dsl/components/all.rb +0 -3
- data/lib/vedeu/dsl/components/border.rb +20 -12
- data/lib/vedeu/dsl/components/geometry.rb +68 -3
- data/lib/vedeu/dsl/components/keymap.rb +1 -2
- data/lib/vedeu/dsl/composition.rb +8 -1
- data/lib/vedeu/dsl/interface.rb +61 -11
- data/lib/vedeu/dsl/line.rb +12 -12
- data/lib/vedeu/dsl/shared/all.rb +4 -7
- data/lib/vedeu/dsl/shared/colour.rb +2 -2
- data/lib/vedeu/dsl/shared/text.rb +2 -35
- data/lib/vedeu/dsl/shared/use.rb +2 -2
- data/lib/vedeu/dsl/view.rb +4 -4
- data/lib/vedeu/events/all.rb +3 -5
- data/lib/vedeu/events/event.rb +5 -5
- data/lib/vedeu/geometry/all.rb +11 -16
- data/lib/vedeu/geometry/area.rb +2 -5
- data/lib/vedeu/geometry/canvas.rb +12 -16
- data/lib/vedeu/geometry/dimension.rb +20 -22
- data/lib/vedeu/geometry/geometry.rb +28 -30
- data/lib/vedeu/geometry/grid.rb +1 -1
- data/lib/vedeu/geometry/index_position.rb +7 -0
- data/lib/vedeu/geometry/null_geometry.rb +61 -0
- data/lib/vedeu/geometry/position.rb +0 -3
- data/lib/vedeu/geometry/position_index.rb +7 -0
- data/lib/vedeu/geometry/position_validator.rb +44 -33
- data/lib/vedeu/input/all.rb +5 -4
- data/lib/vedeu/input/keymap.rb +0 -1
- data/lib/vedeu/input/mapper.rb +1 -3
- data/lib/vedeu/launcher.rb +6 -7
- data/lib/vedeu/main_loop.rb +1 -2
- data/lib/vedeu/models/all.rb +1 -0
- data/lib/vedeu/models/cell.rb +5 -8
- data/lib/vedeu/models/char.rb +50 -15
- data/lib/vedeu/models/composition.rb +8 -1
- data/lib/vedeu/models/focus.rb +4 -4
- data/lib/vedeu/models/group.rb +3 -3
- data/lib/vedeu/models/interface.rb +62 -46
- data/lib/vedeu/models/line.rb +1 -1
- data/lib/vedeu/models/null.rb +48 -0
- data/lib/vedeu/models/stream.rb +5 -5
- data/lib/vedeu/output/all.rb +20 -30
- data/lib/vedeu/output/border.rb +93 -40
- data/lib/vedeu/output/clear.rb +100 -15
- data/lib/vedeu/output/colour.rb +56 -12
- data/lib/vedeu/output/compressor.rb +59 -0
- data/lib/vedeu/output/html_char.rb +4 -2
- data/lib/vedeu/output/null_border.rb +16 -4
- data/lib/vedeu/output/output.rb +13 -21
- data/lib/vedeu/output/presentation.rb +28 -23
- data/lib/vedeu/output/refresh.rb +2 -2
- data/lib/vedeu/output/renderers/all.rb +80 -3
- data/lib/vedeu/output/renderers/file_renderer.rb +38 -2
- data/lib/vedeu/output/renderers/html_renderer.rb +6 -4
- data/lib/vedeu/output/renderers/json_renderer.rb +52 -0
- data/lib/vedeu/output/renderers/null_renderer.rb +14 -0
- data/lib/vedeu/output/renderers/terminal_renderer.rb +2 -12
- data/lib/vedeu/output/style.rb +33 -3
- data/lib/vedeu/output/text.rb +98 -1
- data/lib/vedeu/output/translator.rb +30 -7
- data/lib/vedeu/output/viewport.rb +43 -79
- data/lib/vedeu/output/wordwrap.rb +4 -4
- data/lib/vedeu/repositories/all.rb +22 -179
- data/lib/vedeu/repositories/collection.rb +11 -13
- data/lib/vedeu/repositories/collections/all.rb +8 -0
- data/lib/vedeu/repositories/collections/chars.rb +9 -0
- data/lib/vedeu/repositories/collections/events.rb +9 -0
- data/lib/vedeu/repositories/collections/interfaces.rb +9 -0
- data/lib/vedeu/repositories/collections/keys.rb +9 -0
- data/lib/vedeu/repositories/collections/lines.rb +9 -0
- data/lib/vedeu/repositories/collections/streams.rb +9 -0
- data/lib/vedeu/repositories/model.rb +7 -2
- data/lib/vedeu/repositories/repositories/all.rb +14 -0
- data/lib/vedeu/repositories/repositories/background_colours.rb +14 -0
- data/lib/vedeu/repositories/repositories/borders.rb +38 -0
- data/lib/vedeu/repositories/repositories/buffers.rb +36 -0
- data/lib/vedeu/repositories/repositories/colours.rb +63 -0
- data/lib/vedeu/repositories/repositories/cursors.rb +29 -0
- data/lib/vedeu/repositories/repositories/events_repository.rb +24 -0
- data/lib/vedeu/repositories/repositories/foreground_colours.rb +14 -0
- data/lib/vedeu/repositories/repositories/geometries.rb +37 -0
- data/lib/vedeu/repositories/repositories/groups.rb +24 -0
- data/lib/vedeu/repositories/repositories/interfaces_repository.rb +24 -0
- data/lib/vedeu/repositories/repositories/keymaps.rb +24 -0
- data/lib/vedeu/repositories/repositories/menus.rb +24 -0
- data/lib/vedeu/repositories/repository.rb +29 -47
- data/lib/vedeu/storage/all.rb +6 -0
- data/lib/vedeu/storage/associative_store.rb +47 -0
- data/lib/vedeu/storage/conveyor_store.rb +69 -0
- data/lib/vedeu/storage/fifo_store.rb +37 -0
- data/lib/vedeu/storage/store.rb +58 -0
- data/lib/vedeu/support/all.rb +5 -10
- data/lib/vedeu/support/common.rb +0 -8
- data/lib/vedeu/support/log.rb +13 -24
- data/lib/vedeu/support/template.rb +4 -1
- data/lib/vedeu/support/terminal.rb +10 -10
- data/lib/vedeu/support/trace.rb +15 -88
- data/lib/vedeu/support/visibility.rb +73 -0
- data/lib/vedeu.rb +37 -0
- data/test/lib/vedeu/api_test.rb +7 -3
- data/test/lib/vedeu/application_test.rb +9 -3
- data/test/lib/vedeu/bindings_test.rb +21 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +110 -134
- data/test/lib/vedeu/buffers/display_buffer_test.rb +8 -0
- data/test/lib/vedeu/configuration/api_test.rb +5 -1
- data/test/lib/vedeu/configuration/configuration_test.rb +4 -6
- data/test/lib/vedeu/cursor/cursor_test.rb +25 -17
- data/test/lib/vedeu/cursor/move_test.rb +7 -7
- data/test/lib/vedeu/distributed/client_test.rb +1 -1
- data/test/lib/vedeu/distributed/subprocess_test.rb +3 -1
- data/test/lib/vedeu/distributed/uri_test.rb +5 -5
- data/test/lib/vedeu/dsl/components/geometry_test.rb +43 -0
- data/test/lib/vedeu/dsl/components/keymap_test.rb +1 -1
- data/test/lib/vedeu/dsl/composition_test.rb +6 -5
- data/test/lib/vedeu/dsl/interface_test.rb +81 -16
- data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -4
- data/test/lib/vedeu/dsl/shared/text_test.rb +87 -9
- data/test/lib/vedeu/dsl/stream_test.rb +1 -1
- data/test/lib/vedeu/events/event_test.rb +3 -1
- data/test/lib/vedeu/events/trigger_test.rb +8 -4
- data/test/lib/vedeu/geometry/dimension_test.rb +1 -1
- data/test/lib/vedeu/geometry/geometry_test.rb +5 -3
- data/test/lib/vedeu/geometry/index_position_test.rb +30 -7
- data/test/lib/vedeu/geometry/null_geometry_test.rb +57 -0
- data/test/lib/vedeu/geometry/position_index_test.rb +14 -0
- data/test/lib/vedeu/geometry/position_validator_test.rb +17 -3
- data/test/lib/vedeu/input/keymap_test.rb +3 -1
- data/test/lib/vedeu/input/mapper_test.rb +8 -4
- data/test/lib/vedeu/launcher_test.rb +1 -1
- data/test/lib/vedeu/models/cell_test.rb +10 -8
- data/test/lib/vedeu/models/char_test.rb +52 -28
- data/test/lib/vedeu/models/composition_test.rb +26 -4
- data/test/lib/vedeu/models/group_test.rb +11 -5
- data/test/lib/vedeu/models/interface_test.rb +32 -19
- data/test/lib/vedeu/models/line_test.rb +21 -25
- data/test/lib/vedeu/models/menu_test.rb +10 -6
- data/test/lib/vedeu/models/null_test.rb +66 -0
- data/test/lib/vedeu/models/stream_test.rb +13 -10
- data/test/lib/vedeu/output/border_test.rb +29 -8
- data/test/lib/vedeu/output/clear_test.rb +23 -4
- data/test/lib/vedeu/output/colour_test.rb +20 -4
- data/test/lib/vedeu/output/compressor_test.rb +43 -0
- data/test/lib/vedeu/output/html_char_test.rb +29 -17
- data/test/lib/vedeu/output/null_border_test.rb +2 -1
- data/test/lib/vedeu/output/output_test.rb +20 -30
- data/test/lib/vedeu/output/presentation_test.rb +39 -16
- data/test/lib/vedeu/output/refresh_test.rb +14 -10
- data/test/lib/vedeu/output/renderers/all_test.rb +96 -0
- data/test/lib/vedeu/output/renderers/file_renderer_test.rb +1 -1
- data/test/lib/vedeu/output/renderers/html_renderer_test.rb +13 -9
- data/test/lib/vedeu/output/renderers/json_renderer_test.rb +52 -0
- data/test/lib/vedeu/output/renderers/null_renderer_test.rb +19 -0
- data/test/lib/vedeu/output/style_test.rb +41 -1
- data/test/lib/vedeu/output/text_test.rb +61 -10
- data/test/lib/vedeu/output/translator_test.rb +14 -0
- data/test/lib/vedeu/output/viewport_test.rb +22 -3
- data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -3
- data/test/lib/vedeu/output/wordwrap_test.rb +58 -45
- data/test/lib/vedeu/repositories/collections/chars_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/events_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/interfaces_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/keys_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/lines_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/streams_test.rb +16 -0
- data/test/lib/vedeu/repositories/repositories/background_colours_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/borders_test.rb +51 -0
- data/test/lib/vedeu/repositories/repositories/buffers_test.rb +52 -0
- data/test/lib/vedeu/repositories/repositories/colours_test.rb +16 -0
- data/test/lib/vedeu/repositories/repositories/cursors_test.rb +39 -0
- data/test/lib/vedeu/repositories/repositories/events_repository_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/foreground_colours_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/geometries_test.rb +42 -0
- data/test/lib/vedeu/repositories/repositories/groups_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/interfaces_repositories_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/keymaps_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/menus_test.rb +17 -0
- data/test/lib/vedeu/repositories/repository_test.rb +16 -36
- data/test/lib/vedeu/storage/associative_store_test.rb +69 -0
- data/test/lib/vedeu/storage/conveyor_store_test.rb +135 -0
- data/test/lib/vedeu/storage/fifo_store_test.rb +47 -0
- data/test/lib/vedeu/storage/store_test.rb +123 -0
- data/test/lib/vedeu/support/common_test.rb +0 -9
- data/test/lib/vedeu/support/terminal_test.rb +78 -55
- data/test/lib/vedeu/support/visibility_test.rb +80 -0
- data/test/test_helper.rb +13 -11
- data/vedeu.gemspec +4 -3
- metadata +92 -32
- data/lib/vedeu/cursor/toggle.rb +0 -55
- data/lib/vedeu/exceptions.rb +0 -37
- data/lib/vedeu/geometry/centre.rb +0 -85
- data/lib/vedeu/geometry/content.rb +0 -70
- data/lib/vedeu/geometry/limit.rb +0 -58
- data/lib/vedeu/output/compositor.rb +0 -62
- data/lib/vedeu/repositories/collections.rb +0 -41
- data/lib/vedeu/support/coercions.rb +0 -60
- data/lib/vedeu/support/sentence.rb +0 -91
- data/lib/vedeu/support/visible.rb +0 -90
- data/test/lib/vedeu/cursor/toggle_test.rb +0 -63
- data/test/lib/vedeu/geometry/centre_test.rb +0 -58
- data/test/lib/vedeu/geometry/content_test.rb +0 -98
- data/test/lib/vedeu/geometry/limit_test.rb +0 -30
- data/test/lib/vedeu/output/compositor_test.rb +0 -48
- data/test/lib/vedeu/repositories/all_test.rb +0 -135
- data/test/lib/vedeu/repositories/collections_test.rb +0 -71
- data/test/lib/vedeu/support/coercions_test.rb +0 -84
- data/test/lib/vedeu/support/sentence_test.rb +0 -56
- data/test/lib/vedeu/support/visible_test.rb +0 -161
data/lib/vedeu/support/common.rb
CHANGED
data/lib/vedeu/support/log.rb
CHANGED
@@ -10,23 +10,13 @@ module Vedeu
|
|
10
10
|
#
|
11
11
|
# @param logdev [String|IO] The filename (String) or IO object (typically
|
12
12
|
# STDOUT, STDERR or an open file).
|
13
|
-
# @param shift_age [] Number of old log files to keep, or frequency of
|
14
|
-
# rotation (daily, weekly, monthly).
|
15
|
-
# @param shift_size [] Maximum log file size (only applies when shift_age
|
16
|
-
# is a number).
|
17
13
|
#
|
18
|
-
|
19
|
-
# Logger.new(name, shift_age = 7, shift_size = 1048576)
|
20
|
-
# Logger.new(name, shift_age = 'weekly')
|
21
|
-
#
|
22
|
-
def initialize(logdev, shift_age=nil, shift_size=nil)
|
14
|
+
def initialize(logdev)
|
23
15
|
@level = DEBUG
|
24
16
|
@default_formatter = Formatter.new
|
25
17
|
@formatter = nil
|
26
18
|
@logdev = nil
|
27
|
-
if logdev
|
28
|
-
@logdev = LocklessLogDevice.new(logdev)
|
29
|
-
end
|
19
|
+
@logdev = LocklessLogDevice.new(logdev) if logdev
|
30
20
|
end
|
31
21
|
|
32
22
|
# Ensures we can always write to the log file by creating a lock-less
|
@@ -41,8 +31,6 @@ module Vedeu
|
|
41
31
|
def initialize(log = nil)
|
42
32
|
@dev = nil
|
43
33
|
@filename = nil
|
44
|
-
@shift_age = nil
|
45
|
-
@shift_size = nil
|
46
34
|
|
47
35
|
if log.respond_to?(:write) && log.respond_to?(:close)
|
48
36
|
@dev = log
|
@@ -60,9 +48,8 @@ module Vedeu
|
|
60
48
|
def write(message)
|
61
49
|
@dev.write(message)
|
62
50
|
|
63
|
-
rescue
|
64
|
-
warn("log writing failed. #{
|
65
|
-
|
51
|
+
rescue StandardError => exception
|
52
|
+
warn("log writing failed. #{exception}")
|
66
53
|
end
|
67
54
|
|
68
55
|
# @return []
|
@@ -75,7 +62,7 @@ module Vedeu
|
|
75
62
|
# @param filename []
|
76
63
|
# @return []
|
77
64
|
def open_logfile(filename)
|
78
|
-
if
|
65
|
+
if FileTest.exist?(filename)
|
79
66
|
open(filename, (File::WRONLY | File::APPEND))
|
80
67
|
|
81
68
|
else
|
@@ -98,16 +85,16 @@ module Vedeu
|
|
98
85
|
|
99
86
|
# Write a message to the Vedeu log file.
|
100
87
|
#
|
88
|
+
# @example
|
89
|
+
# Vedeu.log(message: 'A useful debugging message: Error!')
|
90
|
+
#
|
101
91
|
# @param message [String] The message you wish to emit to the log file,
|
102
92
|
# useful for debugging.
|
103
|
-
# @param force
|
93
|
+
# @param force [Boolean] When evaluates to true will attempt to write to
|
104
94
|
# the log file regardless of the Configuration setting.
|
105
|
-
# @param type
|
95
|
+
# @param type [Symbol] Colour code messages in the log file depending
|
106
96
|
# on their source.
|
107
97
|
#
|
108
|
-
# @example
|
109
|
-
# Vedeu.log(message: 'A useful debugging message: Error!')
|
110
|
-
#
|
111
98
|
# @return [TrueClass]
|
112
99
|
def log(message:, force: false, type: :info)
|
113
100
|
logger.debug([message_type(type), message]) if enabled? || force
|
@@ -141,7 +128,9 @@ module Vedeu
|
|
141
128
|
|
142
129
|
# @return [String]
|
143
130
|
def message_type(type)
|
144
|
-
Vedeu::Esc.send(message_types.fetch(type, :default))
|
131
|
+
Vedeu::Esc.send(message_types.fetch(type, :default)) do
|
132
|
+
"[#{type}]".ljust(9)
|
133
|
+
end
|
145
134
|
end
|
146
135
|
|
147
136
|
# @return [Hash<Symbol => Symbol>]
|
@@ -43,7 +43,10 @@ module Vedeu
|
|
43
43
|
# @return [String]
|
44
44
|
def path
|
45
45
|
fail MissingRequired, 'No path to template specified.' if @path.empty?
|
46
|
-
|
46
|
+
|
47
|
+
unless File.exist?(@path)
|
48
|
+
fail MissingRequired, 'Template file cannot be found.'
|
49
|
+
end
|
47
50
|
|
48
51
|
@path
|
49
52
|
end
|
@@ -33,7 +33,6 @@ module Vedeu
|
|
33
33
|
end
|
34
34
|
ensure
|
35
35
|
restore_screen
|
36
|
-
|
37
36
|
end
|
38
37
|
|
39
38
|
# Takes input from the user via the keyboard. Accepts special keys like
|
@@ -42,17 +41,18 @@ module Vedeu
|
|
42
41
|
# @return [String]
|
43
42
|
def input
|
44
43
|
keys_or_cmd = if raw_mode?
|
45
|
-
|
46
|
-
if keys.ord == 27
|
47
|
-
keys << console.read_nonblock(3) rescue nil
|
48
|
-
keys << console.read_nonblock(2) rescue nil
|
49
|
-
end
|
50
|
-
keys
|
44
|
+
keys = console.getch
|
51
45
|
|
52
|
-
|
53
|
-
|
46
|
+
if keys.ord == 27
|
47
|
+
keys << console.read_nonblock(3) rescue nil
|
48
|
+
keys << console.read_nonblock(2) rescue nil
|
49
|
+
end
|
50
|
+
keys
|
54
51
|
|
55
|
-
|
52
|
+
else
|
53
|
+
console.gets.chomp
|
54
|
+
|
55
|
+
end
|
56
56
|
|
57
57
|
Vedeu.trigger(:tick, Time.now.to_f)
|
58
58
|
|
data/lib/vedeu/support/trace.rb
CHANGED
@@ -18,7 +18,9 @@ module Vedeu
|
|
18
18
|
# def self.trace
|
19
19
|
# trace = TracePoint.new(:call) do |tp|
|
20
20
|
# if tp.defined_class.to_s.match(/Troo/)
|
21
|
-
# Vedeu.log(type: :debug,
|
21
|
+
# Vedeu.log(type: :debug,
|
22
|
+
# message: [tp.defined_class.to_s,
|
23
|
+
# tp.method_id.to_s].join(' '))
|
22
24
|
# end
|
23
25
|
# end
|
24
26
|
# trace.enable
|
@@ -50,17 +52,15 @@ module Vedeu
|
|
50
52
|
#
|
51
53
|
# @return [NilClass|String]
|
52
54
|
def trace
|
53
|
-
set_trace_func proc { |event, _file, _line, id, binding,
|
54
|
-
if event == watched && id != :log && classes.include?(
|
55
|
+
set_trace_func proc { |event, _file, _line, id, binding, name|
|
56
|
+
if event == watched && id != :log && classes.include?(name.to_s)
|
55
57
|
vars = variables(binding)
|
56
58
|
|
57
59
|
if vars.empty?
|
58
|
-
log_this(
|
59
|
-
class_count, classname, id))
|
60
|
+
log_this(format('%s %-25s #%-20s', count, name, id))
|
60
61
|
|
61
62
|
else
|
62
|
-
log_this(
|
63
|
-
class_count, classname, id, vars))
|
63
|
+
log_this(format("%s %-25s #%-20s\n%s\n", count, name, id, vars))
|
64
64
|
|
65
65
|
end
|
66
66
|
end
|
@@ -86,21 +86,15 @@ module Vedeu
|
|
86
86
|
# @param binding [Class]
|
87
87
|
# @return [String]
|
88
88
|
def variables(binding)
|
89
|
-
entries = []
|
90
89
|
binding.eval('local_variables').each do |var|
|
91
|
-
variable = var.to_s
|
90
|
+
variable = Vedeu::Esc.green { var.to_s }
|
92
91
|
value = binding.local_variable_get(var)
|
93
|
-
|
92
|
+
klass = Vedeu::Esc.magenta { value.class.to_s }
|
94
93
|
output = (value.is_a?(Proc)) ? '#<Proc:...' : value.inspect
|
94
|
+
content = colour(value.class.to_s, output)
|
95
95
|
|
96
|
-
|
97
|
-
|
98
|
-
entries << sprintf("%33s %-10s = %s %s", " ",
|
99
|
-
Vedeu::Esc.green { variable },
|
100
|
-
Vedeu::Esc.magenta { valclass },
|
101
|
-
content)
|
102
|
-
end
|
103
|
-
entries.join("\n")
|
96
|
+
format('%33s %-10s = %s %s', ' ', variable, klass, content)
|
97
|
+
end.join("\n")
|
104
98
|
end
|
105
99
|
|
106
100
|
# @return [String]
|
@@ -129,7 +123,7 @@ module Vedeu
|
|
129
123
|
end
|
130
124
|
|
131
125
|
# @return [Hash]
|
132
|
-
def
|
126
|
+
def colour(klass, output)
|
133
127
|
{
|
134
128
|
'Array' => :yellow,
|
135
129
|
'Fixnum' => :cyan,
|
@@ -137,13 +131,13 @@ module Vedeu
|
|
137
131
|
'NilClass' => :red,
|
138
132
|
'String' => :green,
|
139
133
|
'Symbol' => :magenta,
|
140
|
-
}
|
134
|
+
}.fetch(klass, :white) { |colour| Vedeu::Esc.send(colour) { output } }
|
141
135
|
end
|
142
136
|
|
143
137
|
# Returns the number of Vedeu classes/modules. (Useful for debugging.)
|
144
138
|
#
|
145
139
|
# @return [String]
|
146
|
-
def
|
140
|
+
def count
|
147
141
|
@count ||= "(#{classes.size}/#{vedeu_classes.size})"
|
148
142
|
end
|
149
143
|
|
@@ -179,89 +173,22 @@ module Vedeu
|
|
179
173
|
# @return [Set]
|
180
174
|
def ignored_classes
|
181
175
|
Set.new [
|
182
|
-
# 'Vedeu::API',
|
183
|
-
# 'Vedeu::Application',
|
184
|
-
# 'Vedeu::Background',
|
185
|
-
# 'Vedeu::Bindings',
|
186
|
-
# 'Vedeu::Border',
|
187
|
-
# 'Vedeu::BoundingArea',
|
188
|
-
# 'Vedeu::Buffer',
|
189
|
-
# 'Vedeu::Char',
|
190
|
-
# 'Vedeu::Chars',
|
191
176
|
'Vedeu::Coercions',
|
192
177
|
'Vedeu::Colour',
|
193
178
|
'Vedeu::Common',
|
194
|
-
# 'Vedeu::Composition',
|
195
|
-
# 'Vedeu::Compositor',
|
196
|
-
# 'Vedeu::Config::API',
|
197
|
-
# 'Vedeu::Config::CLI',
|
198
179
|
'Vedeu::Configuration',
|
199
|
-
# 'Vedeu::Console',
|
200
|
-
# 'Vedeu::Content',
|
201
|
-
# 'Vedeu::Coordinate',
|
202
|
-
# 'Vedeu::Cursor',
|
203
|
-
# 'Vedeu::DisplayBuffer',
|
204
|
-
# 'Vedeu::DSL::Border',
|
205
|
-
# 'Vedeu::DSL::Colour',
|
206
|
-
# 'Vedeu::DSL::Composition',
|
207
|
-
# 'Vedeu::DSL::Geometry',
|
208
|
-
# 'Vedeu::DSL::Interface',
|
209
|
-
# 'Vedeu::DSL::Keymap',
|
210
|
-
# 'Vedeu::DSL::Line',
|
211
|
-
# 'Vedeu::DSL::Menu',
|
212
|
-
# 'Vedeu::DSL::Stream',
|
213
|
-
# 'Vedeu::DSL::Style',
|
214
|
-
# 'Vedeu::DSL::Text',
|
215
|
-
# 'Vedeu::DSL::Use',
|
216
|
-
# 'Vedeu::DSL::View',
|
217
180
|
'Vedeu::Esc',
|
218
181
|
'Vedeu::Event',
|
219
|
-
# 'Vedeu::Focus',
|
220
|
-
# 'Vedeu::Foreground',
|
221
182
|
'Vedeu::Geometry',
|
222
|
-
# 'Vedeu::Grid',
|
223
|
-
# 'Vedeu::Group',
|
224
|
-
# 'Vedeu::Input',
|
225
|
-
# 'Vedeu::Interface',
|
226
|
-
# 'Vedeu::Interfaces',
|
227
|
-
# 'Vedeu::Keymap',
|
228
|
-
# 'Vedeu::Keys',
|
229
|
-
# 'Vedeu::Key',
|
230
|
-
# 'Vedeu::Launcher',
|
231
|
-
# 'Vedeu::Line',
|
232
|
-
# 'Vedeu::Lines',
|
233
183
|
'Vedeu::Log',
|
234
|
-
# 'Vedeu::Mapper',
|
235
|
-
# 'Vedeu::Menu',
|
236
|
-
# 'Vedeu::Menus',
|
237
|
-
# 'Vedeu::Model',
|
238
|
-
# 'Vedeu::Collection',
|
239
|
-
# 'Vedeu::Move',
|
240
|
-
# 'Vedeu::Node',
|
241
|
-
# 'Vedeu::Output',
|
242
184
|
'Vedeu::Position',
|
243
|
-
# 'Vedeu::PositionValidator',
|
244
185
|
'Vedeu::Presentation',
|
245
|
-
# 'Vedeu::Read',
|
246
|
-
# 'Vedeu::Refresh',
|
247
|
-
# 'Vedeu::Render',
|
248
186
|
'Vedeu::Repository',
|
249
|
-
# 'Vedeu::Sentence',
|
250
187
|
'Vedeu::Stream',
|
251
|
-
# 'Vedeu::Streams',
|
252
188
|
'Vedeu::Style',
|
253
189
|
'Vedeu::Terminal',
|
254
|
-
# 'Vedeu::Text',
|
255
|
-
# 'Vedeu::Toggle',
|
256
190
|
'Vedeu::Trace',
|
257
191
|
'Vedeu::Translator',
|
258
|
-
# 'Vedeu::Traps',
|
259
|
-
# 'Vedeu::Trigger',
|
260
|
-
# 'Vedeu::View',
|
261
|
-
# 'Vedeu::Viewport',
|
262
|
-
# 'Vedeu::Visible',
|
263
|
-
# 'Vedeu::Write',
|
264
|
-
# 'Vedeu::Writer',
|
265
192
|
]
|
266
193
|
end
|
267
194
|
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
# Change the visibility of the given model.
|
4
|
+
#
|
5
|
+
class Visibility
|
6
|
+
|
7
|
+
# @param model [void]
|
8
|
+
# @return [void]
|
9
|
+
def self.show(model)
|
10
|
+
new(model).show
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param model [void]
|
14
|
+
# @return [void]
|
15
|
+
def self.hide(model)
|
16
|
+
new(model).hide
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param model [void]
|
20
|
+
# @return [void]
|
21
|
+
def self.toggle(model)
|
22
|
+
new(model).toggle
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param model [void]
|
26
|
+
# @return [Vedeu::Visibility]
|
27
|
+
def initialize(model)
|
28
|
+
@model = model
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [void]
|
32
|
+
def show
|
33
|
+
model.visible = true
|
34
|
+
model.store
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Symbol]
|
38
|
+
def state
|
39
|
+
if model.visible?
|
40
|
+
:visible
|
41
|
+
|
42
|
+
else
|
43
|
+
:invisible
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [void]
|
49
|
+
def hide
|
50
|
+
model.visible = false
|
51
|
+
model.store
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [void]
|
55
|
+
def toggle
|
56
|
+
if model.visible?
|
57
|
+
hide
|
58
|
+
|
59
|
+
else
|
60
|
+
show
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
# @!attribute [r] model
|
68
|
+
# @return [void]
|
69
|
+
attr_reader :model
|
70
|
+
|
71
|
+
end # Visibility
|
72
|
+
|
73
|
+
end # Vedeu
|
data/lib/vedeu.rb
CHANGED
@@ -2,12 +2,15 @@ $LIB_DIR = File.dirname(__FILE__) + '/../lib'
|
|
2
2
|
$LOAD_PATH.unshift($LIB_DIR) unless $LOAD_PATH.include?($LIB_DIR)
|
3
3
|
|
4
4
|
require 'date'
|
5
|
+
require 'drb'
|
5
6
|
require 'forwardable'
|
6
7
|
require 'io/console'
|
8
|
+
require 'json'
|
7
9
|
require 'logger'
|
8
10
|
require 'optparse'
|
9
11
|
require 'set'
|
10
12
|
require 'singleton'
|
13
|
+
require 'thread'
|
11
14
|
require 'time'
|
12
15
|
|
13
16
|
require 'vedeu/support/log'
|
@@ -41,6 +44,40 @@ module Vedeu
|
|
41
44
|
receiver.extend(API)
|
42
45
|
end
|
43
46
|
|
47
|
+
# ModelNotFound: Raised with Vedeu attempts to access a named model that does
|
48
|
+
# not exist.
|
49
|
+
#
|
50
|
+
# InvalidSyntax: Raised when Vedeu attempts to parse a {Vedeu.view} or
|
51
|
+
# {Vedeu.interface} and encounters a problem.
|
52
|
+
#
|
53
|
+
# MissingRequired: Raised when a name is not provided for a model when
|
54
|
+
# attempting to store it in a repository.
|
55
|
+
#
|
56
|
+
# ModeSwitch: Raised intentionally when the client application wishes to
|
57
|
+
# switch between cooked and raw (or vice versa) terminal modes. Vedeu is
|
58
|
+
# hard-wired to use the `Escape` key to trigger this change for the time
|
59
|
+
# being.
|
60
|
+
#
|
61
|
+
# NotImplemented: Raised to remind me (or client application developers) that
|
62
|
+
# the subclass implements the functionality sought.
|
63
|
+
#
|
64
|
+
# OutOfRange: Raised when trying to access an interface column less than 1 or
|
65
|
+
# greater than 12. Vedeu is hard-wired to a 12-column layout for the time
|
66
|
+
# being.
|
67
|
+
#
|
68
|
+
# VedeuInterrupt: Raised when Vedeu wishes to exit.
|
69
|
+
#
|
70
|
+
Exceptions = %w(
|
71
|
+
ModelNotFound
|
72
|
+
InvalidSyntax
|
73
|
+
MissingRequired
|
74
|
+
ModeSwitch
|
75
|
+
NotImplemented
|
76
|
+
OutOfRange
|
77
|
+
VedeuInterrupt
|
78
|
+
)
|
79
|
+
Exceptions.each { |e| const_set(e, Class.new(StandardError)) }
|
80
|
+
|
44
81
|
private
|
45
82
|
|
46
83
|
end # Vedeu
|
data/test/lib/vedeu/api_test.rb
CHANGED
@@ -7,20 +7,24 @@ module Vedeu
|
|
7
7
|
describe '.log' do
|
8
8
|
it 'writes the message to the log file when debugging is enabled' do
|
9
9
|
Configuration.stub(:debug?, true) do
|
10
|
-
Vedeu.log(type: :test,
|
10
|
+
Vedeu.log(type: :test,
|
11
|
+
message: 'Testing debugging to log').must_equal(true)
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
15
|
it 'returns nil when debugging is disabled' do
|
15
16
|
Configuration.stub(:debug?, false) do
|
16
|
-
Vedeu.log(type: :test,
|
17
|
+
Vedeu.log(type: :test,
|
18
|
+
message: 'some message not logged...').must_equal(nil)
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
it 'write the message to the log file when the `force` argument ' \
|
21
23
|
'evaluates to true' do
|
22
24
|
Configuration.stub(:debug?, false) do
|
23
|
-
Vedeu.log(type: :test,
|
25
|
+
Vedeu.log(type: :test,
|
26
|
+
message: 'Testing forced debugging to log',
|
27
|
+
force: true).must_equal(true)
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
@@ -6,7 +6,7 @@ module Vedeu
|
|
6
6
|
|
7
7
|
let(:described) { Vedeu::Application }
|
8
8
|
let(:instance) { described.new(configuration) }
|
9
|
-
let(:configuration) {
|
9
|
+
let(:configuration) { Vedeu.configuration }
|
10
10
|
|
11
11
|
before do
|
12
12
|
configuration.stubs(:drb?).returns(false)
|
@@ -14,8 +14,13 @@ module Vedeu
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe '#initialize' do
|
17
|
-
|
18
|
-
|
17
|
+
subject { instance }
|
18
|
+
|
19
|
+
it { subject.must_be_instance_of(described) }
|
20
|
+
it do
|
21
|
+
subject.instance_variable_get('@configuration').
|
22
|
+
must_equal(configuration)
|
23
|
+
end
|
19
24
|
end
|
20
25
|
|
21
26
|
describe '.start' do
|
@@ -29,6 +34,7 @@ module Vedeu
|
|
29
34
|
describe '.stop' do
|
30
35
|
subject { described.stop }
|
31
36
|
|
37
|
+
it { subject.must_equal(false) }
|
32
38
|
end
|
33
39
|
|
34
40
|
describe '#start' do
|
@@ -6,12 +6,22 @@ module Vedeu
|
|
6
6
|
|
7
7
|
context 'the system events needed by Vedeu to run are defined' do
|
8
8
|
it { Vedeu.events.registered?(:_clear_).must_equal(true) }
|
9
|
+
it { Vedeu.events.registered?(:_clear_group_).must_equal(true) }
|
10
|
+
it { Vedeu.events.registered?(:_cleanup_).must_equal(true) }
|
11
|
+
it { Vedeu.events.registered?(:_command_).must_equal(true) }
|
9
12
|
it { Vedeu.events.registered?(:_exit_).must_equal(true) }
|
13
|
+
it { Vedeu.events.registered?(:_hide_group_).must_equal(true) }
|
10
14
|
it { Vedeu.events.registered?(:_initialize_).must_equal(true) }
|
11
15
|
it { Vedeu.events.registered?(:_keypress_).must_equal(true) }
|
12
16
|
it { Vedeu.events.registered?(:_log_).must_equal(true) }
|
13
17
|
it { Vedeu.events.registered?(:_mode_switch_).must_equal(true) }
|
18
|
+
it { Vedeu.events.registered?(:_refresh_).must_equal(true) }
|
19
|
+
it { Vedeu.events.registered?(:_refresh_cursor_).must_equal(true) }
|
20
|
+
it { Vedeu.events.registered?(:_refresh_group_).must_equal(true) }
|
14
21
|
it { Vedeu.events.registered?(:_resize_).must_equal(true) }
|
22
|
+
it { Vedeu.events.registered?(:_show_group_).must_equal(true) }
|
23
|
+
it { Vedeu.events.registered?(:tick).must_equal(true) }
|
24
|
+
it { Vedeu.events.registered?(:tock).must_equal(true) }
|
15
25
|
end
|
16
26
|
|
17
27
|
context 'the cursor specific events are defined' do
|
@@ -22,6 +32,17 @@ module Vedeu
|
|
22
32
|
it { Vedeu.events.registered?(:_cursor_right_).must_equal(true) }
|
23
33
|
it { Vedeu.events.registered?(:_cursor_up_).must_equal(true) }
|
24
34
|
it { Vedeu.events.registered?(:_cursor_origin_).must_equal(true) }
|
35
|
+
it { Vedeu.events.registered?(:_cursor_reset_).must_equal(true) }
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'the drb specific events are defined' do
|
39
|
+
it { Vedeu.events.registered?(:_drb_input_).must_equal(true) }
|
40
|
+
it { Vedeu.events.registered?(:_drb_retrieve_output_).must_equal(true) }
|
41
|
+
it { Vedeu.events.registered?(:_drb_store_output_).must_equal(true) }
|
42
|
+
it { Vedeu.events.registered?(:_drb_restart_).must_equal(true) }
|
43
|
+
it { Vedeu.events.registered?(:_drb_start_).must_equal(true) }
|
44
|
+
it { Vedeu.events.registered?(:_drb_status_).must_equal(true) }
|
45
|
+
it { Vedeu.events.registered?(:_drb_stop_).must_equal(true) }
|
25
46
|
end
|
26
47
|
|
27
48
|
context 'the focus specific events are defined' do
|