vedeu 0.4.2 → 0.4.3
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/LICENSE.txt +3 -0
- data/Rakefile +16 -7
- data/examples/borders_app.rb +58 -55
- data/lib/vedeu/api.rb +1 -1
- data/lib/vedeu/application.rb +25 -25
- data/lib/vedeu/bindings.rb +5 -7
- data/lib/vedeu/configuration/api.rb +0 -2
- data/lib/vedeu/configuration/cli.rb +0 -2
- data/lib/vedeu/configuration/configuration.rb +0 -2
- data/lib/vedeu/cursor/cursor.rb +0 -2
- data/lib/vedeu/debug.rb +2 -2
- data/lib/vedeu/distributed/server.rb +0 -2
- data/lib/vedeu/dsl/components/border.rb +15 -19
- data/lib/vedeu/dsl/components/geometry.rb +14 -18
- data/lib/vedeu/dsl/components/keymap.rb +28 -32
- data/lib/vedeu/dsl/composition.rb +27 -9
- data/lib/vedeu/events/all.rb +1 -0
- data/lib/vedeu/events/event.rb +6 -8
- data/lib/vedeu/events/events.rb +10 -0
- data/lib/vedeu/events/trigger.rb +6 -12
- data/lib/vedeu/geometry/grid.rb +0 -2
- data/lib/vedeu/geometry/position.rb +0 -2
- data/lib/vedeu/geometry/position_validator.rb +0 -14
- data/lib/vedeu/input/input.rb +0 -2
- data/lib/vedeu/models/collection.rb +0 -2
- data/lib/vedeu/models/focus.rb +0 -1
- data/lib/vedeu/models/geometry.rb +7 -3
- data/lib/vedeu/models/group.rb +0 -2
- data/lib/vedeu/models/menu.rb +23 -29
- data/lib/vedeu/models/model.rb +0 -2
- data/lib/vedeu/models/view/char.rb +14 -10
- data/lib/vedeu/models/view/composition.rb +7 -9
- data/lib/vedeu/models/view/interface.rb +0 -1
- data/lib/vedeu/models/view/line.rb +2 -3
- data/lib/vedeu/models/view/stream.rb +0 -3
- data/lib/vedeu/output/all.rb +1 -0
- data/lib/vedeu/output/background.rb +0 -2
- data/lib/vedeu/output/colour.rb +0 -2
- data/lib/vedeu/output/compositor.rb +0 -2
- data/lib/vedeu/output/foreground.rb +0 -2
- data/lib/vedeu/output/html_renderer.rb +6 -0
- data/lib/vedeu/output/index_position.rb +35 -0
- data/lib/vedeu/output/output.rb +3 -1
- data/lib/vedeu/output/position_index.rb +2 -2
- data/lib/vedeu/output/presentation.rb +0 -2
- data/lib/vedeu/output/style.rb +0 -1
- data/lib/vedeu/output/translator.rb +18 -20
- data/lib/vedeu/output/viewport.rb +76 -51
- data/lib/vedeu/output/virtual_terminal.rb +2 -1
- data/lib/vedeu/repositories/all.rb +4 -4
- data/lib/vedeu/repositories/repository.rb +0 -2
- data/lib/vedeu/support/coercions.rb +0 -2
- data/lib/vedeu/support/common.rb +0 -2
- data/lib/vedeu/support/esc.rb +0 -2
- data/lib/vedeu/support/log.rb +86 -3
- data/lib/vedeu/support/refresh.rb +0 -2
- data/lib/vedeu/support/sentence.rb +5 -9
- data/lib/vedeu/support/terminal.rb +0 -2
- data/lib/vedeu/support/trace.rb +0 -2
- data/lib/vedeu/support/visible.rb +1 -1
- data/test/lib/vedeu/configuration/api_test.rb +14 -0
- data/test/lib/vedeu/configuration/configuration_test.rb +10 -0
- data/test/lib/vedeu/distributed/server_test.rb +5 -0
- data/test/lib/vedeu/dsl/components/border_test.rb +7 -0
- data/test/lib/vedeu/dsl/components/geometry_test.rb +8 -3
- data/test/lib/vedeu/dsl/interface_test.rb +5 -0
- data/test/lib/vedeu/dsl/line_test.rb +4 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +7 -7
- data/test/lib/vedeu/dsl/shared/style_test.rb +5 -2
- data/test/lib/vedeu/dsl/stream_test.rb +4 -1
- data/test/lib/vedeu/events/event_test.rb +6 -0
- data/test/lib/vedeu/geometry/bounding_area_test.rb +30 -30
- data/test/lib/vedeu/geometry/position_test.rb +5 -0
- data/test/lib/vedeu/models/view/char_test.rb +1 -14
- data/test/lib/vedeu/output/index_position_test.rb +64 -0
- data/test/lib/vedeu/output/style_test.rb +4 -0
- data/test/lib/vedeu/output/translator_test.rb +4 -0
- data/test/lib/vedeu/output/virtual_terminal_test.rb +2 -0
- data/test/lib/vedeu/output/wordwrap_test.rb +5 -0
- data/test/lib/vedeu/repositories/all_test.rb +3 -3
- data/test/lib/vedeu/repositories/repository_test.rb +8 -0
- data/test/lib/vedeu/support/console_test.rb +14 -0
- data/test/lib/vedeu/support/esc_test.rb +6 -0
- data/test/lib/vedeu/support/terminal_test.rb +13 -0
- data/vedeu.gemspec +4 -4
- metadata +12 -24
- data/test/integration/distributed_test.rb +0 -16
- data/test/integration/dsl/compositions_test.rb +0 -19
- data/test/integration/dsl/interfaces_test.rb +0 -193
- data/test/integration/dsl/keymaps_test.rb +0 -30
- data/test/integration/dsl/lines_test.rb +0 -104
- data/test/integration/dsl/menus_test.rb +0 -59
- data/test/integration/dsl/streams_test.rb +0 -103
- data/test/integration/dsl/views_test.rb +0 -45
@@ -7,8 +7,6 @@ module Vedeu
|
|
7
7
|
# The Configuration::CLI class parses command-line arguments using
|
8
8
|
# OptionParser into options used by Vedeu to affect certain behaviours.
|
9
9
|
#
|
10
|
-
# @api private
|
11
|
-
#
|
12
10
|
class CLI
|
13
11
|
|
14
12
|
# Configure Vedeu via command-line arguments. Options set here via
|
data/lib/vedeu/cursor/cursor.rb
CHANGED
data/lib/vedeu/debug.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'ruby-prof'
|
2
|
-
|
3
1
|
module Vedeu
|
4
2
|
|
5
3
|
# Helps to debug a running application by providing a stack trace of its
|
@@ -8,6 +6,8 @@ module Vedeu
|
|
8
6
|
# @param filename [String]
|
9
7
|
# @param block [Proc]
|
10
8
|
def self.debug(filename = 'profile.html', &block)
|
9
|
+
require 'ruby-prof'
|
10
|
+
|
11
11
|
RubyProf.start
|
12
12
|
|
13
13
|
yield
|
@@ -28,25 +28,21 @@ module Vedeu
|
|
28
28
|
include Vedeu::DSL::Colour
|
29
29
|
include Vedeu::DSL::Style
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
Vedeu::Border.build({ enabled: true, name: name }, &block).store
|
48
|
-
end
|
49
|
-
|
31
|
+
# Specify the border of an interface or view with a simple DSL.
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# Vedeu.border 'some_interface' do
|
35
|
+
# # ...
|
36
|
+
#
|
37
|
+
# @param name [String] The name of the interface or view to which this
|
38
|
+
# border belongs.
|
39
|
+
# @param block [Proc]
|
40
|
+
# @raise [InvalidSyntax] The required block was not given.
|
41
|
+
# @return [Vedeu::Border]
|
42
|
+
def self.border(name, &block)
|
43
|
+
fail InvalidSyntax, 'block not given' unless block_given?
|
44
|
+
|
45
|
+
Vedeu::Border.build({ enabled: true, name: name }, &block).store
|
50
46
|
end
|
51
47
|
|
52
48
|
# Returns an instance of DSL::Border.
|
@@ -12,25 +12,21 @@ module Vedeu
|
|
12
12
|
include Vedeu::DSL
|
13
13
|
include Vedeu::DSL::Use
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def geometry(name, &block)
|
29
|
-
fail InvalidSyntax, 'block not given' unless block_given?
|
30
|
-
|
31
|
-
Vedeu::Geometry.build({ name: name }, &block).store
|
32
|
-
end
|
15
|
+
# Specify the geometry of an interface or view with a simple DSL.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# Vedeu.geometry 'some_interface' do
|
19
|
+
# # ...
|
20
|
+
#
|
21
|
+
# @param name [String] The name of the interface or view to which this
|
22
|
+
# geometry belongs.
|
23
|
+
# @param block [Proc]
|
24
|
+
# @raise [InvalidSyntax] The required block was not given.
|
25
|
+
# @return [Vedeu::Geometry]
|
26
|
+
def self.geometry(name, &block)
|
27
|
+
fail InvalidSyntax, 'block not given' unless block_given?
|
33
28
|
|
29
|
+
Vedeu::Geometry.build({ name: name }, &block).store
|
34
30
|
end
|
35
31
|
|
36
32
|
# Returns an instance of DSL::Geometry.
|
@@ -15,38 +15,34 @@ module Vedeu
|
|
15
15
|
include Vedeu::Common
|
16
16
|
include Vedeu::DSL
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
Vedeu::Keymap.build({ name: name }, &block).store
|
48
|
-
end
|
49
|
-
|
18
|
+
# Define actions for keypresses for when specific interfaces are in focus.
|
19
|
+
# Unless an interface is specified, the key will be assumed to be global,
|
20
|
+
# meaning its action will happen regardless of the interface in focus.
|
21
|
+
#
|
22
|
+
# @note
|
23
|
+
# When defining an interface, there is no need to provide a name since
|
24
|
+
# this can be discerned from the interface itself, e.g:
|
25
|
+
#
|
26
|
+
# Vedeu.interface 'my_interface' do
|
27
|
+
# keymap do
|
28
|
+
# ...
|
29
|
+
#
|
30
|
+
# @param name [String] The name of the interface which this keymap relates
|
31
|
+
# to.
|
32
|
+
# @param block [Proc]
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# keymap 'my_interface' do
|
36
|
+
# ...
|
37
|
+
#
|
38
|
+
# @raise [InvalidSyntax] The required block was not given.
|
39
|
+
# @return [Keymap]
|
40
|
+
# @todo Try to remember why we need to pre-create the keymap in the
|
41
|
+
# repository.
|
42
|
+
def self.keymap(name, &block)
|
43
|
+
Vedeu::Keymap.new({ name: name }).store
|
44
|
+
|
45
|
+
Vedeu::Keymap.build({ name: name }, &block).store
|
50
46
|
end
|
51
47
|
|
52
48
|
# Returns an instance of DSL::Keymap.
|
@@ -13,6 +13,8 @@ module Vedeu
|
|
13
13
|
# Returns an instance of DSL::Composition.
|
14
14
|
#
|
15
15
|
# @param model [Composition]
|
16
|
+
# @param client [Object]
|
17
|
+
# @return [Vedeu::DSL::Composition]
|
16
18
|
def initialize(model, client = nil)
|
17
19
|
@model = model
|
18
20
|
@client = client
|
@@ -22,6 +24,10 @@ module Vedeu
|
|
22
24
|
#
|
23
25
|
# A view is just an Interface object.
|
24
26
|
#
|
27
|
+
# When a view already exists, we take its attributes and use them as the
|
28
|
+
# basis for the newly defined view. This way we don't need to specify
|
29
|
+
# everything again.
|
30
|
+
#
|
25
31
|
# @todo More documentation required.
|
26
32
|
# @param name [String] The name of the interface you are targetting for
|
27
33
|
# this view.
|
@@ -36,22 +42,34 @@ module Vedeu
|
|
36
42
|
def view(name = '', &block)
|
37
43
|
fail InvalidSyntax, 'block not given' unless block_given?
|
38
44
|
|
39
|
-
|
40
|
-
existing_member = Vedeu.interfaces.find(name)
|
41
|
-
model.member.build(attributes.merge!(existing_member.attributes), &block)
|
42
|
-
|
43
|
-
else
|
44
|
-
model.member.build(attributes.merge!({ name: name }), &block)
|
45
|
-
|
46
|
-
end
|
45
|
+
new_model = model.member.build(new_attributes(name), &block)
|
47
46
|
|
48
|
-
model.add(
|
47
|
+
model.add(new_model)
|
49
48
|
end
|
50
49
|
|
51
50
|
private
|
52
51
|
|
53
52
|
attr_reader :client, :model
|
54
53
|
|
54
|
+
# @param name [String] The name of the interface.
|
55
|
+
# @return [Hash]
|
56
|
+
def new_attributes(name)
|
57
|
+
attributes.merge!(existing_interface_attributes(name))
|
58
|
+
end
|
59
|
+
|
60
|
+
# @param name [String] The name of the interface.
|
61
|
+
# @return [Hash]
|
62
|
+
def existing_interface_attributes(name)
|
63
|
+
if model.repository.registered?(name)
|
64
|
+
stored = model.repository.find(name)
|
65
|
+
stored.attributes
|
66
|
+
|
67
|
+
else
|
68
|
+
{ name: name }
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
55
73
|
# @return [Hash]
|
56
74
|
def attributes
|
57
75
|
{
|
data/lib/vedeu/events/all.rb
CHANGED
data/lib/vedeu/events/event.rb
CHANGED
@@ -32,8 +32,6 @@ module Vedeu
|
|
32
32
|
# :do_stuff
|
33
33
|
# end
|
34
34
|
#
|
35
|
-
# @api private
|
36
|
-
#
|
37
35
|
class Event
|
38
36
|
|
39
37
|
include Vedeu::Model
|
@@ -91,11 +89,6 @@ module Vedeu
|
|
91
89
|
alias_method :event, :bind
|
92
90
|
alias_method :register, :bind
|
93
91
|
|
94
|
-
# @see Vedeu::Trigger.trigger
|
95
|
-
def trigger(name, *args)
|
96
|
-
Vedeu::Trigger.trigger(name, *args)
|
97
|
-
end
|
98
|
-
|
99
92
|
# Unbind events from a named handler.
|
100
93
|
#
|
101
94
|
# @param name [String]
|
@@ -112,6 +105,11 @@ module Vedeu
|
|
112
105
|
|
113
106
|
end
|
114
107
|
|
108
|
+
# @see Vedeu::Trigger.trigger
|
109
|
+
def self.trigger(name, *args)
|
110
|
+
Vedeu::Trigger.trigger(name, *args)
|
111
|
+
end
|
112
|
+
|
115
113
|
# Returns a new instance of Event.
|
116
114
|
#
|
117
115
|
# @param name [Symbol]
|
@@ -135,7 +133,7 @@ module Vedeu
|
|
135
133
|
new_collection = collection.add(self)
|
136
134
|
|
137
135
|
else
|
138
|
-
new_collection = Vedeu::
|
136
|
+
new_collection = Vedeu::Events.new([self], nil, name)
|
139
137
|
|
140
138
|
end
|
141
139
|
|
data/lib/vedeu/events/trigger.rb
CHANGED
@@ -8,20 +8,14 @@ module Vedeu
|
|
8
8
|
# @example
|
9
9
|
# Vedeu.trigger(:my_event, :oxidize, 'nitrogen')
|
10
10
|
#
|
11
|
-
# @api private
|
12
|
-
#
|
13
11
|
class Trigger
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
def trigger(name, *args)
|
22
|
-
new(name, *args).trigger
|
23
|
-
end
|
24
|
-
|
13
|
+
# @param name [Symbol] The name of the event you wish to trigger. The event
|
14
|
+
# does not have to exist.
|
15
|
+
# @param args [Array] Any arguments the event needs to execute correctly.
|
16
|
+
# @return [Array]
|
17
|
+
def self.trigger(name, *args)
|
18
|
+
new(name, *args).trigger
|
25
19
|
end
|
26
20
|
|
27
21
|
# @see Vedeu::Trigger.trigger
|
data/lib/vedeu/geometry/grid.rb
CHANGED
@@ -104,20 +104,6 @@ module Vedeu
|
|
104
104
|
self
|
105
105
|
end
|
106
106
|
|
107
|
-
# def x
|
108
|
-
# @x = [[[[@x, tx].max, txn].min, left].max, right].min
|
109
|
-
# @x = border? && left? ? [@x, (left + 1)].max : @x
|
110
|
-
# @x = border? && right? ? [@x, (right - 2)].min : @x
|
111
|
-
# @x
|
112
|
-
# end
|
113
|
-
|
114
|
-
# def y
|
115
|
-
# @y = [[[[@y, ty].max, tyn].min, top].max, bottom].min
|
116
|
-
# @y = border? && top? ? [@y, (top + 1)].max : @y
|
117
|
-
# @y = border? && bottom? ? [@y, (bottom - 2)].min : @y
|
118
|
-
# @y
|
119
|
-
# end
|
120
|
-
|
121
107
|
end # PositionValidator
|
122
108
|
|
123
109
|
end # Vedeu
|
data/lib/vedeu/input/input.rb
CHANGED
data/lib/vedeu/models/focus.rb
CHANGED
@@ -10,7 +10,7 @@ module Vedeu
|
|
10
10
|
# @todo Consider storing the Terminal size at the time of first creation,
|
11
11
|
# this allows us to return the interface to its original dimensions if
|
12
12
|
# the terminal resizes back to normal size.
|
13
|
-
|
13
|
+
#
|
14
14
|
# Calculates and provides interface geometry determined by both the client's
|
15
15
|
# requirements and the terminal's current viewing area.
|
16
16
|
#
|
@@ -27,8 +27,6 @@ module Vedeu
|
|
27
27
|
# yn +--------------+ # south: yn + 1
|
28
28
|
# south
|
29
29
|
#
|
30
|
-
# @api private
|
31
|
-
#
|
32
30
|
class Geometry
|
33
31
|
|
34
32
|
include Vedeu::Model
|
@@ -137,6 +135,9 @@ module Vedeu
|
|
137
135
|
# Returns the top coordinate of the interface, a fixed or dynamic value
|
138
136
|
# depending on whether the interface is centred or not.
|
139
137
|
#
|
138
|
+
# @note
|
139
|
+
# Division which results in a non-integer will be rounded down.
|
140
|
+
#
|
140
141
|
# @return [Fixnum]
|
141
142
|
def top
|
142
143
|
if centred
|
@@ -166,6 +167,9 @@ module Vedeu
|
|
166
167
|
# Returns the left coordinate of the interface, a fixed or dynamic value
|
167
168
|
# depending on whether the interface is centred or not.
|
168
169
|
#
|
170
|
+
# @note
|
171
|
+
# Division which results in a non-integer will be rounded down.
|
172
|
+
#
|
169
173
|
# @return [Fixnum]
|
170
174
|
def left
|
171
175
|
if centred
|