vedeu 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|