vedeu 0.6.6 → 0.6.7
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/.codeclimate.yml +0 -30
- data/lib/vedeu/all.rb +0 -1
- data/lib/vedeu/api.rb +5 -139
- data/lib/vedeu/application/application_controller.rb +12 -10
- data/lib/vedeu/application/application_helper.rb +3 -3
- data/lib/vedeu/application/application_view.rb +7 -6
- data/lib/vedeu/application/controller.rb +16 -10
- data/lib/vedeu/bindings/application.rb +6 -3
- data/lib/vedeu/bindings/bindings.rb +7 -6
- data/lib/vedeu/bindings/document.rb +18 -18
- data/lib/vedeu/bindings/drb.rb +12 -8
- data/lib/vedeu/bindings/focus.rb +12 -9
- data/lib/vedeu/bindings/menus.rb +12 -11
- data/lib/vedeu/bindings/movement.rb +23 -22
- data/lib/vedeu/bindings/refresh.rb +13 -10
- data/lib/vedeu/bindings/visibility.rb +10 -8
- data/lib/vedeu/borders/all.rb +26 -0
- data/lib/vedeu/borders/dsl.rb +1 -23
- data/lib/vedeu/buffers/all.rb +12 -0
- data/lib/vedeu/buffers/buffer.rb +1 -10
- data/lib/vedeu/buffers/refresh.rb +57 -0
- data/lib/vedeu/buffers/virtual_buffer.rb +1 -1
- data/lib/vedeu/cursors/all.rb +9 -0
- data/lib/vedeu/cursors/cursor.rb +16 -0
- data/lib/vedeu/dsl/interface.rb +4 -4
- data/lib/vedeu/events/aliases.rb +28 -9
- data/lib/vedeu/events/collection.rb +1 -0
- data/lib/vedeu/events/trigger.rb +5 -3
- data/lib/vedeu/geometry/all.rb +7 -0
- data/lib/vedeu/geometry/position.rb +2 -2
- data/lib/vedeu/input/editor/editor.rb +1 -1
- data/lib/vedeu/log/log.rb +6 -0
- data/lib/vedeu/log/timer.rb +2 -2
- data/lib/vedeu/models/focus.rb +3 -0
- data/lib/vedeu/models/group.rb +13 -0
- data/lib/vedeu/models/interface.rb +17 -1
- data/lib/vedeu/models/toggleable.rb +2 -1
- data/lib/vedeu/models/views/collections/chars.rb +1 -0
- data/lib/vedeu/models/views/collections/lines.rb +1 -0
- data/lib/vedeu/models/views/collections/streams.rb +1 -0
- data/lib/vedeu/models/views/collections/view_collection.rb +1 -0
- data/lib/vedeu/models/views/line.rb +2 -2
- data/lib/vedeu/null/generic.rb +27 -4
- data/lib/vedeu/null/interface.rb +1 -32
- data/lib/vedeu/null/menu.rb +1 -16
- data/lib/vedeu/null/view.rb +1 -33
- data/lib/vedeu/options.rb +3 -0
- data/lib/vedeu/output/clear/named_group.rb +5 -0
- data/lib/vedeu/output/clear/named_interface.rb +5 -0
- data/lib/vedeu/output/direct.rb +2 -2
- data/lib/vedeu/output/viewport.rb +1 -1
- data/lib/vedeu/refresh/refresh_group.rb +1 -1
- data/lib/vedeu/runtime/application.rb +3 -0
- data/lib/vedeu/terminal/terminal.rb +3 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/buffers/refresh_test.rb +54 -0
- data/test/lib/vedeu/null/generic_test.rb +18 -0
- data/test/lib/vedeu/null/interface_test.rb +4 -30
- data/test/lib/vedeu/null/menu_test.rb +1 -18
- data/test/lib/vedeu/null/view_test.rb +6 -31
- data/{examples → test/support}/colour_support.sh +0 -0
- data/{examples → test/support/examples}/borders_app.rb +0 -0
- data/{examples → test/support/examples}/configuration_app.rb +0 -0
- data/{examples → test/support/examples}/drb_app.rb +0 -0
- data/{examples → test/support/examples}/editor_app.rb +0 -0
- data/{examples → test/support/examples}/focus_app.rb +0 -0
- data/{examples → test/support/examples}/hello_world.rb +0 -0
- data/{examples → test/support/examples}/material_colours_app.rb +0 -0
- data/{examples → test/support/examples}/material_colours_app_20150721.svg +0 -0
- data/{examples → test/support/examples}/typed_commands/command.erb +0 -0
- data/{examples → test/support/examples}/typed_commands/output.erb +0 -0
- data/{examples → test/support/examples}/typed_commands/status.erb +0 -0
- data/{examples → test/support/examples}/typed_commands/typed_commands_app.rb +0 -0
- data/{examples → test/support/examples}/view_templates_app/default.erb +0 -0
- data/{examples → test/support/examples}/view_templates_app/prune.erb +0 -0
- data/{examples → test/support/examples}/view_templates_app/view_templates_app.rb +0 -0
- data/{examples → test/support/examples}/view_templates_app/wrap.erb +0 -0
- metadata +38 -21
- data/lib/vedeu/refresh/refresh_buffer.rb +0 -53
- data/test/lib/vedeu/refresh/refresh_buffer_test.rb +0 -50
@@ -2,14 +2,16 @@ module Vedeu
|
|
2
2
|
|
3
3
|
module Bindings
|
4
4
|
|
5
|
-
# System events relating to the visibility of cursors or
|
5
|
+
# System events relating to the visibility of cursors or
|
6
|
+
# interfaces.
|
6
7
|
#
|
7
8
|
# :nocov:
|
8
9
|
module Visibility
|
9
10
|
|
10
11
|
extend self
|
11
12
|
|
12
|
-
# Setup events relating to visibility. This method is called by
|
13
|
+
# Setup events relating to visibility. This method is called by
|
14
|
+
# Vedeu.
|
13
15
|
#
|
14
16
|
# @return [TrueClass]
|
15
17
|
def setup!
|
@@ -27,8 +29,8 @@ module Vedeu
|
|
27
29
|
|
28
30
|
private
|
29
31
|
|
30
|
-
# Clears the spaces occupied by the interfaces belonging to the
|
31
|
-
# group.
|
32
|
+
# Clears the spaces occupied by the interfaces belonging to the
|
33
|
+
# named group.
|
32
34
|
#
|
33
35
|
# @example
|
34
36
|
# Vedeu.trigger(:_clear_group_, name)
|
@@ -41,8 +43,8 @@ module Vedeu
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
44
|
-
# Hide the cursor of the named interface or when a name is not
|
45
|
-
# interface currently in focus.
|
46
|
+
# Hide the cursor of the named interface or when a name is not
|
47
|
+
# given, the interface currently in focus.
|
46
48
|
#
|
47
49
|
# @example
|
48
50
|
# Vedeu.trigger(:_hide_cursor_, name)
|
@@ -76,8 +78,8 @@ module Vedeu
|
|
76
78
|
end
|
77
79
|
end
|
78
80
|
|
79
|
-
# Show the cursor of the named interface or when a name is not
|
80
|
-
# interface currently in focus.
|
81
|
+
# Show the cursor of the named interface or when a name is not
|
82
|
+
# given, the interface currently in focus.
|
81
83
|
#
|
82
84
|
# @example
|
83
85
|
# Vedeu.trigger(:_show_cursor_, name)
|
data/lib/vedeu/borders/all.rb
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
+
# Borders are defined by name for each of the client application's
|
4
|
+
# interfaces or views. They can be enabled or disabled (which controls
|
5
|
+
# whether they are rendered or not), they have their own colours and styles,
|
6
|
+
# and each aspect of the border can be controlled.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # Borders can be defined when defining your interface...
|
10
|
+
# Vedeu.interface 'my_interface' do
|
11
|
+
# border do
|
12
|
+
# # ...
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# # ...or as part of a view definition...
|
16
|
+
# Vedeu.renders do
|
17
|
+
# view 'border_demo' do
|
18
|
+
# border do
|
19
|
+
# # ...
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # ...or standalone; referencing the target interface or view.
|
23
|
+
# Vedeu.border 'some_interface' do
|
24
|
+
# # ...
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# See {Vedeu::Borders::DSL} for DSL methods for defining borders.
|
28
|
+
#
|
3
29
|
module Borders
|
4
30
|
|
5
31
|
end # Borders
|
data/lib/vedeu/borders/dsl.rb
CHANGED
@@ -2,29 +2,7 @@ module Vedeu
|
|
2
2
|
|
3
3
|
module Borders
|
4
4
|
|
5
|
-
#
|
6
|
-
# interfaces or views. They can be enabled or disabled (which controls
|
7
|
-
# whether they are rendered or not), they have their own colours and styles,
|
8
|
-
# and each aspect of the border can be controlled.
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# # Borders can be defined when defining your interface...
|
12
|
-
# Vedeu.interface 'my_interface' do
|
13
|
-
# border do
|
14
|
-
# # ...
|
15
|
-
# end
|
16
|
-
#
|
17
|
-
# # ...or as part of a view definition...
|
18
|
-
# Vedeu.renders do
|
19
|
-
# view 'border_demo' do
|
20
|
-
# border do
|
21
|
-
# # ...
|
22
|
-
# end
|
23
|
-
#
|
24
|
-
# # ...or standalone; referencing the target interface or view.
|
25
|
-
# Vedeu.border 'some_interface' do
|
26
|
-
# # ...
|
27
|
-
# end
|
5
|
+
# Provides a mechanism to help configure borders in Vedeu.
|
28
6
|
#
|
29
7
|
class DSL
|
30
8
|
|
data/lib/vedeu/buffers/all.rb
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
+
# The Buffer object represents the states of display for an interface. The
|
4
|
+
# states are 'front', 'back' and 'previous'.
|
5
|
+
#
|
6
|
+
# [Back] -> [Front] -> [Previous]
|
7
|
+
#
|
8
|
+
# The content on the screen, or last output will always be the 'Front'
|
9
|
+
# buffer. Content due to be displayed on next refresh will come from the
|
10
|
+
# 'Back' buffer when available, otherwise from the current 'Front' buffer.
|
11
|
+
# When new content is copied to the 'Front' buffer, the current 'Front'
|
12
|
+
# buffer is also copied to the 'Previous' buffer.
|
13
|
+
#
|
3
14
|
module Buffers
|
4
15
|
|
5
16
|
end # Buffers
|
@@ -9,5 +20,6 @@ end # Vedeu
|
|
9
20
|
require 'vedeu/buffers/buffer'
|
10
21
|
require 'vedeu/buffers/null'
|
11
22
|
require 'vedeu/buffers/repository'
|
23
|
+
require 'vedeu/buffers/refresh'
|
12
24
|
require 'vedeu/buffers/virtual_buffer'
|
13
25
|
require 'vedeu/buffers/virtual_buffers'
|
data/lib/vedeu/buffers/buffer.rb
CHANGED
@@ -2,16 +2,7 @@ module Vedeu
|
|
2
2
|
|
3
3
|
module Buffers
|
4
4
|
|
5
|
-
#
|
6
|
-
# states are 'front', 'back' and 'previous'.
|
7
|
-
#
|
8
|
-
# [Back] -> [Front] -> [Previous]
|
9
|
-
#
|
10
|
-
# The content on the screen, or last output will always be the 'Front'
|
11
|
-
# buffer. Content due to be displayed on next refresh will come from the
|
12
|
-
# 'Back' buffer when available, otherwise from the current 'Front' buffer.
|
13
|
-
# When new content is copied to the 'Front' buffer, the current 'Front'
|
14
|
-
# buffer is also copied to the 'Previous' buffer.
|
5
|
+
# Used by Vedeu internally to manage the buffers of each interface defined.
|
15
6
|
#
|
16
7
|
class Buffer
|
17
8
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Buffers
|
4
|
+
|
5
|
+
# Refreshes the given named interface.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# Vedeu.trigger(:_refresh_, name)
|
9
|
+
#
|
10
|
+
class Refresh
|
11
|
+
|
12
|
+
include Vedeu::Common
|
13
|
+
|
14
|
+
# @param name [String] The name of the interface to be refreshed using the
|
15
|
+
# named buffer.
|
16
|
+
# @return [Array|Vedeu::Error::ModelNotFound]
|
17
|
+
def self.by_name(name)
|
18
|
+
new(name).by_name
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return a new instance of Vedeu::Buffers::Refresh.
|
22
|
+
#
|
23
|
+
# @param name [String]
|
24
|
+
# @return [Vedeu::Buffers::Refresh]
|
25
|
+
def initialize(name)
|
26
|
+
@name = name
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [void]
|
30
|
+
def by_name
|
31
|
+
Vedeu.timer("Refresh Buffer: '#{buffer_name}'") do
|
32
|
+
Vedeu.buffers.by_name(buffer_name).render
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
|
38
|
+
# # @!attribute [r] name
|
39
|
+
# @return [String]
|
40
|
+
attr_reader :name
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
# @raise [Vedeu::Error::MissingRequired] When the name is empty or nil.
|
45
|
+
# @return [String]
|
46
|
+
def buffer_name
|
47
|
+
return name if present?(name)
|
48
|
+
|
49
|
+
fail Vedeu::Error::MissingRequired,
|
50
|
+
'Cannot refresh interface with an empty interface name.'
|
51
|
+
end
|
52
|
+
|
53
|
+
end # Refresh
|
54
|
+
|
55
|
+
end # Buffers
|
56
|
+
|
57
|
+
end # Vedeu
|
data/lib/vedeu/cursors/all.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
+
# Vedeu creates an individual cursor for each interface defined,
|
4
|
+
# these take their name from the interface, which means that your
|
5
|
+
# position within the view for each interface is maintained.
|
6
|
+
#
|
7
|
+
# The cursor also manages the content offset for a particular view.
|
8
|
+
# For example, if the user has moved around within the content and
|
9
|
+
# then moved to another interface, when they return their position
|
10
|
+
# will be restored.
|
11
|
+
#
|
3
12
|
module Cursors
|
4
13
|
|
5
14
|
end # Cursors
|
data/lib/vedeu/cursors/cursor.rb
CHANGED
@@ -213,6 +213,22 @@ module Vedeu
|
|
213
213
|
render
|
214
214
|
end
|
215
215
|
|
216
|
+
# Toggle the visibility of the cursor with the given name.
|
217
|
+
#
|
218
|
+
# @example
|
219
|
+
# Vedeu.toggle_cursor(name)
|
220
|
+
#
|
221
|
+
# @return [Vedeu::Escape]
|
222
|
+
def toggle
|
223
|
+
if visible?
|
224
|
+
hide
|
225
|
+
|
226
|
+
else
|
227
|
+
show
|
228
|
+
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
216
232
|
# @return [Fixnum] The column/character coordinate.
|
217
233
|
def x
|
218
234
|
@x = bx if @x < bx
|
data/lib/vedeu/dsl/interface.rb
CHANGED
@@ -228,7 +228,7 @@ module Vedeu
|
|
228
228
|
# # ... some code
|
229
229
|
# end
|
230
230
|
#
|
231
|
-
# @return [
|
231
|
+
# @return [Boolean]
|
232
232
|
def show!
|
233
233
|
visible(true)
|
234
234
|
end
|
@@ -240,7 +240,7 @@ module Vedeu
|
|
240
240
|
# # ... some code
|
241
241
|
# end
|
242
242
|
#
|
243
|
-
# @return [
|
243
|
+
# @return [Boolean]
|
244
244
|
def hide!
|
245
245
|
visible(false)
|
246
246
|
end
|
@@ -279,7 +279,7 @@ module Vedeu
|
|
279
279
|
# # ... some code
|
280
280
|
# end
|
281
281
|
#
|
282
|
-
# @return [
|
282
|
+
# @return [Boolean]
|
283
283
|
def visible(value = true)
|
284
284
|
boolean = value ? true : false
|
285
285
|
|
@@ -302,7 +302,7 @@ module Vedeu
|
|
302
302
|
# end
|
303
303
|
#
|
304
304
|
# @param value [Fixnum]
|
305
|
-
# @return [
|
305
|
+
# @return [Fixnum]
|
306
306
|
def zindex(value)
|
307
307
|
model.zindex = value
|
308
308
|
end
|
data/lib/vedeu/events/aliases.rb
CHANGED
@@ -2,20 +2,33 @@ module Vedeu
|
|
2
2
|
|
3
3
|
module Events
|
4
4
|
|
5
|
-
# Allows the storing of event aliases. Each alias can contain
|
6
|
-
# names.
|
5
|
+
# Allows the storing of event aliases. Each alias can contain
|
6
|
+
# multiple event names.
|
7
|
+
#
|
8
|
+
# @note
|
9
|
+
#
|
7
10
|
#
|
8
11
|
module Aliases
|
9
12
|
|
10
13
|
extend self
|
11
14
|
|
12
|
-
#
|
13
|
-
#
|
15
|
+
# Add events by name to the alias name group. When an alias is
|
16
|
+
# triggered, all the events stored in the group are also
|
17
|
+
# triggered.
|
18
|
+
#
|
19
|
+
# @example
|
20
|
+
# Vedeu.bind_alias(alias_name, event_name)
|
21
|
+
#
|
22
|
+
# @param alias_name [Symbol] The name of the alias. This can
|
23
|
+
# represent a single event or group of events.
|
24
|
+
# @param event_name [Symbol] The name of the event to bind to
|
25
|
+
# the alias. When the alias is triggered, all events bound
|
26
|
+
# will also be triggered.
|
14
27
|
# @return [Hash<Symbol => Array<Symbol>>]
|
15
|
-
def
|
28
|
+
def bind_alias(alias_name, event_name)
|
16
29
|
storage[alias_name] << event_name
|
17
30
|
end
|
18
|
-
alias_method :
|
31
|
+
alias_method :add, :bind_alias
|
19
32
|
|
20
33
|
# Return a boolean indicating whether the storage is empty.
|
21
34
|
#
|
@@ -41,16 +54,22 @@ module Vedeu
|
|
41
54
|
storage.include?(alias_name)
|
42
55
|
end
|
43
56
|
|
44
|
-
#
|
57
|
+
# Remove an alias by name. The alias name group is destroyed,
|
58
|
+
# but events stored within this alias are not.
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# Vedeu.unbind_alias(alias_name)
|
62
|
+
#
|
63
|
+
# @param alias_name [Symbol] The name of the alias.
|
45
64
|
# @return [FalseClass|Hash<Symbol => Array<Symbol>>]
|
46
|
-
def
|
65
|
+
def unbind_alias(alias_name)
|
47
66
|
return false if empty?
|
48
67
|
return false unless registered?(alias_name)
|
49
68
|
|
50
69
|
storage.delete(alias_name)
|
51
70
|
storage
|
52
71
|
end
|
53
|
-
alias_method :
|
72
|
+
alias_method :remove, :unbind_alias
|
54
73
|
|
55
74
|
# @return [Hash<Symbol => Array<Symbol>>]
|
56
75
|
def reset
|
data/lib/vedeu/events/trigger.rb
CHANGED
@@ -7,11 +7,13 @@ module Vedeu
|
|
7
7
|
# registered for a name, then the result of each event will be returned as
|
8
8
|
# part of a collection.
|
9
9
|
#
|
10
|
-
# @example
|
11
|
-
# Vedeu.trigger(:my_event, :oxidize, 'nitrogen')
|
12
|
-
#
|
13
10
|
class Trigger
|
14
11
|
|
12
|
+
# Trigger an event by name.
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# Vedeu.trigger(:my_event, :oxidize, 'nitrogen')
|
16
|
+
#
|
15
17
|
# @param name [Symbol] The name of the event you wish to trigger. The
|
16
18
|
# event does not have to exist.
|
17
19
|
# @param args [Array] Any arguments the event needs to execute correctly.
|
data/lib/vedeu/geometry/all.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
+
# The Geometry group of classes all handle the size of interfaces in
|
4
|
+
# relation to the current size of the terminal. This helps Vedeu to
|
5
|
+
# draw content in a consistent way.
|
6
|
+
#
|
7
|
+
# You can define the geometry of your interfaces using the
|
8
|
+
# {Vedeu::Geometry::DSL}.
|
9
|
+
#
|
3
10
|
module Geometry
|
4
11
|
|
5
12
|
end # Geometry
|
@@ -24,7 +24,7 @@ module Vedeu
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# @param value [Array<Fixnum>|Vedeu::Position]
|
27
|
-
# @return [
|
27
|
+
# @return [Vedeu::Geometry::Position]
|
28
28
|
def self.coerce(value)
|
29
29
|
if value.is_a?(self)
|
30
30
|
value
|
@@ -97,7 +97,7 @@ module Vedeu
|
|
97
97
|
# aforementioned, call the block and then reposition to this location.
|
98
98
|
#
|
99
99
|
# @return [String]
|
100
|
-
# @yieldreturn [
|
100
|
+
# @yieldreturn [String] Returns the block wrapped in position escape
|
101
101
|
# sequences.
|
102
102
|
def to_s
|
103
103
|
return "#{sequence}#{yield}" if block_given?
|
data/lib/vedeu/log/log.rb
CHANGED
@@ -32,6 +32,9 @@ module Vedeu
|
|
32
32
|
|
33
33
|
# Write a message to STDOUT.
|
34
34
|
#
|
35
|
+
# @example
|
36
|
+
# Vedeu.log_stdout
|
37
|
+
#
|
35
38
|
# @return [TrueClass]
|
36
39
|
def log_stdout(type: :info, message:)
|
37
40
|
$stdout.puts log_entry(type, message)
|
@@ -39,6 +42,9 @@ module Vedeu
|
|
39
42
|
|
40
43
|
# Write a message to STDERR.
|
41
44
|
#
|
45
|
+
# @example
|
46
|
+
# Vedeu.log_stderr
|
47
|
+
#
|
42
48
|
# @return [TrueClass]
|
43
49
|
def log_stderr(type: :info, message:)
|
44
50
|
$stderr.puts log_entry(type, message)
|