vedeu 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vedeu/all.rb +1 -1
- data/lib/vedeu/application/controller.rb +2 -2
- data/lib/vedeu/bindings.rb +1 -1
- data/lib/vedeu/bindings/application.rb +2 -2
- data/lib/vedeu/bindings/drb.rb +8 -8
- data/lib/vedeu/bindings/menus.rb +11 -11
- data/lib/vedeu/bindings/movement.rb +12 -12
- data/lib/vedeu/bindings/system.rb +18 -18
- data/lib/vedeu/bindings/visibility.rb +9 -9
- data/lib/vedeu/colours/colour.rb +1 -1
- data/lib/vedeu/common.rb +1 -1
- data/lib/vedeu/dsl/composition.rb +8 -3
- data/lib/vedeu/dsl/interface.rb +41 -17
- data/lib/vedeu/log/debug.rb +5 -1
- data/lib/vedeu/log/log.rb +1 -0
- data/lib/vedeu/models/interface.rb +3 -2
- data/lib/vedeu/plugins.rb +1 -1
- data/lib/vedeu/runtime/bootstrap.rb +0 -3
- data/lib/vedeu/runtime/launcher.rb +3 -2
- data/lib/vedeu/runtime/router.rb +49 -47
- data/lib/vedeu/{traps.rb → runtime/traps.rb} +0 -0
- data/lib/vedeu/templating/decoder.rb +4 -2
- data/lib/vedeu/templating/encoder.rb +4 -2
- data/lib/vedeu/templating/view_template.rb +35 -2
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/application/application_view_test.rb +1 -1
- data/test/lib/vedeu/application/controller_test.rb +4 -0
- data/test/lib/vedeu/bindings_test.rb +2 -0
- data/test/lib/vedeu/borders/border_test.rb +28 -40
- data/test/lib/vedeu/borders/borders_test.rb +0 -2
- data/test/lib/vedeu/borders/render_border_test.rb +11 -13
- data/test/lib/vedeu/buffers/buffer_test.rb +12 -5
- data/test/lib/vedeu/buffers/display_buffer_test.rb +2 -2
- data/test/lib/vedeu/cli/generator/application_test.rb +9 -9
- data/test/lib/vedeu/cli/generator/view_test.rb +10 -7
- data/test/lib/vedeu/cli/main_test.rb +4 -4
- data/test/lib/vedeu/colours/colour_translator_test.rb +2 -4
- data/test/lib/vedeu/common_test.rb +8 -0
- data/test/lib/vedeu/configuration/configuration_test.rb +4 -4
- data/test/lib/vedeu/cursor/cursors_test.rb +4 -4
- data/test/lib/vedeu/cursor/move_test.rb +11 -8
- data/test/lib/vedeu/cursor/refresh_cursor_test.rb +12 -12
- data/test/lib/vedeu/cursor/reposition_test.rb +7 -11
- data/test/lib/vedeu/distributed/client_test.rb +4 -4
- data/test/lib/vedeu/distributed/server_test.rb +4 -5
- data/test/lib/vedeu/dsl/border_test.rb +2 -2
- data/test/lib/vedeu/dsl/composition_test.rb +5 -4
- data/test/lib/vedeu/dsl/geometry_test.rb +6 -4
- data/test/lib/vedeu/dsl/interface_test.rb +9 -27
- data/test/lib/vedeu/dsl/use_test.rb +2 -2
- data/test/lib/vedeu/events/trigger_test.rb +2 -2
- data/test/lib/vedeu/geometry/coordinate_test.rb +9 -9
- data/test/lib/vedeu/geometry/geometry_test.rb +8 -2
- data/test/lib/vedeu/geometry/position_validator_test.rb +11 -14
- data/test/lib/vedeu/input/input_test.rb +5 -5
- data/test/lib/vedeu/input/keymap_test.rb +2 -2
- data/test/lib/vedeu/log/timer_test.rb +2 -2
- data/test/lib/vedeu/models/focus_test.rb +20 -25
- data/test/lib/vedeu/models/interface_test.rb +2 -2
- data/test/lib/vedeu/models/interfaces_test.rb +7 -5
- data/test/lib/vedeu/models/line_test.rb +0 -5
- data/test/lib/vedeu/models/menu_test.rb +0 -2
- data/test/lib/vedeu/null/geometry_test.rb +1 -4
- data/test/lib/vedeu/output/clear/named_interface_test.rb +2 -2
- data/test/lib/vedeu/output/esc_test.rb +7 -4
- data/test/lib/vedeu/output/output_test.rb +3 -6
- data/test/lib/vedeu/output/refresh_test.rb +2 -2
- data/test/lib/vedeu/output/renderers/file_test.rb +1 -3
- data/test/lib/vedeu/output/renderers/html_test.rb +1 -3
- data/test/lib/vedeu/output/renderers/json_test.rb +1 -3
- data/test/lib/vedeu/output/renderers_test.rb +2 -2
- data/test/lib/vedeu/output/viewport_test.rb +70 -71
- data/test/lib/vedeu/repositories/model_test.rb +0 -19
- data/test/lib/vedeu/repositories/repository_test.rb +8 -8
- data/test/lib/vedeu/runtime/application_test.rb +2 -2
- data/test/lib/vedeu/runtime/launcher_test.rb +7 -7
- data/test/lib/vedeu/runtime/router_test.rb +33 -33
- data/test/lib/vedeu/{traps_test.rb → runtime/traps_test.rb} +2 -2
- data/test/lib/vedeu/templating/decoder_test.rb +1 -0
- data/test/lib/vedeu/templating/encoder_test.rb +1 -0
- data/test/lib/vedeu/templating/template_test.rb +8 -1
- data/test/lib/vedeu/templating/view_template_test.rb +108 -22
- data/test/lib/vedeu/terminal_mode_test.rb +2 -2
- data/test/lib/vedeu/terminal_test.rb +6 -6
- data/test/support/helpers/model_test_class.rb +19 -0
- metadata +5 -17
- data/test/support/templates/background.erb +0 -1
- data/test/support/templates/colour.erb +0 -1
- data/test/support/templates/foreground.erb +0 -1
- data/test/support/templates/multiple.erb +0 -2
- data/test/support/templates/plain.erb +0 -1
- data/test/support/templates/style.erb +0 -1
@@ -11,7 +11,7 @@ module Vedeu
|
|
11
11
|
|
12
12
|
# Setup events relating to visibility. This method is called by Vedeu.
|
13
13
|
#
|
14
|
-
# @return [
|
14
|
+
# @return [TrueClass]
|
15
15
|
def setup!
|
16
16
|
clear_group!
|
17
17
|
hide_cursor!
|
@@ -34,7 +34,7 @@ module Vedeu
|
|
34
34
|
# Vedeu.trigger(:_clear_group_, name)
|
35
35
|
# Vedeu.clear_by_group(name)
|
36
36
|
#
|
37
|
-
# @return [
|
37
|
+
# @return [TrueClass]
|
38
38
|
def clear_group!
|
39
39
|
Vedeu.bind(:_clear_group_) do |name|
|
40
40
|
Vedeu::Clear::NamedGroup.render(name)
|
@@ -49,7 +49,7 @@ module Vedeu
|
|
49
49
|
# Vedeu.trigger(:_cursor_hide_, name)
|
50
50
|
# Vedeu.hide_cursor(name)
|
51
51
|
#
|
52
|
-
# @return [
|
52
|
+
# @return [TrueClass]
|
53
53
|
def hide_cursor!
|
54
54
|
Vedeu.bind(:_hide_cursor_) do |name|
|
55
55
|
Vedeu::Cursor.hide_cursor(name)
|
@@ -74,7 +74,7 @@ module Vedeu
|
|
74
74
|
# Vedeu.trigger(:_hide_interface_, name)
|
75
75
|
# Vedeu.hide_interface(name)
|
76
76
|
#
|
77
|
-
# @return [
|
77
|
+
# @return [TrueClass]
|
78
78
|
def hide_interface!
|
79
79
|
Vedeu.bind(:_hide_interface_) do |name|
|
80
80
|
Vedeu::Interface.hide_interface(name)
|
@@ -89,7 +89,7 @@ module Vedeu
|
|
89
89
|
# Vedeu.trigger(:_cursor_show_, name)
|
90
90
|
# Vedeu.show_cursor(name)
|
91
91
|
#
|
92
|
-
# @return [
|
92
|
+
# @return [TrueClass]
|
93
93
|
def show_cursor!
|
94
94
|
Vedeu.bind(:_show_cursor_) do |name|
|
95
95
|
Vedeu::Cursor.show_cursor(name)
|
@@ -114,7 +114,7 @@ module Vedeu
|
|
114
114
|
# Vedeu.trigger(:_show_interface_, name)
|
115
115
|
# Vedeu.show_interface(name)
|
116
116
|
#
|
117
|
-
# @return [
|
117
|
+
# @return [TrueClass]
|
118
118
|
def show_interface!
|
119
119
|
Vedeu.bind(:_show_interface_) do |name|
|
120
120
|
Vedeu::Interface.show_interface(name)
|
@@ -127,7 +127,7 @@ module Vedeu
|
|
127
127
|
# Vedeu.trigger(:_toggle_cursor_, name)
|
128
128
|
# Vedeu.toggle_cursor(name)
|
129
129
|
#
|
130
|
-
# @return [
|
130
|
+
# @return [TrueClass]
|
131
131
|
def toggle_cursor!
|
132
132
|
Vedeu.bind(:_toggle_cursor_) do |name|
|
133
133
|
Vedeu::Cursor.toggle_cursor(name)
|
@@ -140,7 +140,7 @@ module Vedeu
|
|
140
140
|
# Vedeu.trigger(:_toggle_group_, name)
|
141
141
|
# Vedeu.toggle_group(name)
|
142
142
|
#
|
143
|
-
# @return [
|
143
|
+
# @return [TrueClass]
|
144
144
|
def toggle_group!
|
145
145
|
Vedeu.bind(:_toggle_group_) do |name|
|
146
146
|
Vedeu::Group.toggle_group(name)
|
@@ -153,7 +153,7 @@ module Vedeu
|
|
153
153
|
# Vedeu.trigger(:_toggle_interface_, name)
|
154
154
|
# Vedeu.toggle_interface(name)
|
155
155
|
#
|
156
|
-
# @return [
|
156
|
+
# @return [TrueClass]
|
157
157
|
def toggle_interface!
|
158
158
|
Vedeu.bind(:_toggle_interface_) do |name|
|
159
159
|
Vedeu::Interface.toggle_interface(name)
|
data/lib/vedeu/colours/colour.rb
CHANGED
data/lib/vedeu/common.rb
CHANGED
@@ -104,10 +104,15 @@ module Vedeu
|
|
104
104
|
fail Vedeu::MissingRequired,
|
105
105
|
'Cannot render template without a filename.' unless filename
|
106
106
|
|
107
|
-
|
108
|
-
lines = Vedeu::Wordwrap.for(content, options)
|
107
|
+
options.merge!(name: name)
|
109
108
|
|
110
|
-
|
109
|
+
content = Vedeu::Templating::ViewTemplate.parse(object,
|
110
|
+
filename,
|
111
|
+
options)
|
112
|
+
|
113
|
+
# lines = Vedeu::Wordwrap.for(content, options)
|
114
|
+
|
115
|
+
new_model = model.member.build(template_attributes(name, content))
|
111
116
|
|
112
117
|
model.add(new_model)
|
113
118
|
end
|
data/lib/vedeu/dsl/interface.rb
CHANGED
@@ -25,7 +25,7 @@ module Vedeu
|
|
25
25
|
# Allows the setting of a border for the interface.
|
26
26
|
#
|
27
27
|
# @example
|
28
|
-
# interface 'my_interface' do
|
28
|
+
# Vedeu.interface 'my_interface' do
|
29
29
|
# border do
|
30
30
|
# # ... see Vedeu::DSL::Border for DSL methods for borders.
|
31
31
|
# end
|
@@ -51,6 +51,13 @@ module Vedeu
|
|
51
51
|
|
52
52
|
# Applies the default border to the interface.
|
53
53
|
#
|
54
|
+
# @example
|
55
|
+
# Vedeu.interface 'my_interface' do
|
56
|
+
# border!
|
57
|
+
#
|
58
|
+
# # ... some code
|
59
|
+
# end
|
60
|
+
#
|
54
61
|
# @return [Vedeu::Border]
|
55
62
|
def border!
|
56
63
|
border do
|
@@ -64,20 +71,23 @@ module Vedeu
|
|
64
71
|
# to true.
|
65
72
|
#
|
66
73
|
# @example
|
67
|
-
# interface 'my_interface' do
|
74
|
+
# Vedeu.interface 'my_interface' do
|
68
75
|
# cursor true # => show the cursor for this interface
|
76
|
+
# # or...
|
69
77
|
# cursor :show # => both of these are equivalent to line above
|
78
|
+
# # or...
|
70
79
|
# cursor! #
|
71
80
|
# # ...
|
72
81
|
# end
|
73
82
|
#
|
74
|
-
# interface 'my_interface' do
|
83
|
+
# Vedeu.interface 'my_interface' do
|
75
84
|
# cursor false # => hide the cursor for this interface
|
85
|
+
# # or...
|
76
86
|
# cursor nil # => as above
|
77
87
|
# # ...
|
78
88
|
# end
|
79
89
|
#
|
80
|
-
# view 'my_interface' do
|
90
|
+
# Vedeu.view 'my_interface' do
|
81
91
|
# cursor true # => Specify the visibility of the cursor when the view
|
82
92
|
# # ... # is rendered.
|
83
93
|
# end
|
@@ -103,7 +113,7 @@ module Vedeu
|
|
103
113
|
# @param value [Fixnum|Float] Time in seconds. (0.5 = 500ms).
|
104
114
|
#
|
105
115
|
# @example
|
106
|
-
# interface 'my_interface' do
|
116
|
+
# Vedeu.interface 'my_interface' do
|
107
117
|
# delay 0.5 # interface will not update more often than every 500ms.
|
108
118
|
# # ...
|
109
119
|
# end
|
@@ -134,7 +144,7 @@ module Vedeu
|
|
134
144
|
# Define the geometry for an interface.
|
135
145
|
#
|
136
146
|
# @example
|
137
|
-
# interface 'my_interface' do
|
147
|
+
# Vedeu.interface 'my_interface' do
|
138
148
|
# geometry do
|
139
149
|
# # ... see Vedeu::DSL::Geometry for DSL methods for geometries.
|
140
150
|
# end
|
@@ -160,7 +170,7 @@ module Vedeu
|
|
160
170
|
# interfaces at once.
|
161
171
|
#
|
162
172
|
# @example
|
163
|
-
# interface 'my_interface' do
|
173
|
+
# Vedeu.interface 'my_interface' do
|
164
174
|
# group 'main_screen'
|
165
175
|
# # ...
|
166
176
|
# end
|
@@ -187,13 +197,13 @@ module Vedeu
|
|
187
197
|
# @param block [Proc]
|
188
198
|
#
|
189
199
|
# @example
|
190
|
-
# view 'my_interface' do
|
200
|
+
# Vedeu.view 'my_interface' do
|
191
201
|
# lines do
|
192
202
|
# # ... see {Vedeu::DSL::Line} and {Vedeu::DSL::Stream}
|
193
203
|
# end
|
194
204
|
# end
|
195
205
|
#
|
196
|
-
# view 'my_interface' do
|
206
|
+
# Vedeu.view 'my_interface' do
|
197
207
|
# line do
|
198
208
|
# # ... see {Vedeu::DSL::Line} and {Vedeu::DSL::Stream}
|
199
209
|
# end
|
@@ -214,7 +224,7 @@ module Vedeu
|
|
214
224
|
# @param value [String]
|
215
225
|
#
|
216
226
|
# @example
|
217
|
-
# interface do
|
227
|
+
# Vedeu.interface do
|
218
228
|
# name 'my_interface'
|
219
229
|
# # ...
|
220
230
|
# end
|
@@ -233,6 +243,13 @@ module Vedeu
|
|
233
243
|
|
234
244
|
# Set the interface to visible.
|
235
245
|
#
|
246
|
+
# @example
|
247
|
+
# Vedeu.interface('my_interface') do
|
248
|
+
# show!
|
249
|
+
#
|
250
|
+
# # ... some code
|
251
|
+
# end
|
252
|
+
#
|
236
253
|
# @return [void]
|
237
254
|
def show!
|
238
255
|
visible(true)
|
@@ -240,6 +257,11 @@ module Vedeu
|
|
240
257
|
|
241
258
|
# Set the interface to invisible.
|
242
259
|
#
|
260
|
+
# @example
|
261
|
+
# Vedeu.interface('my_interface') do
|
262
|
+
# # ... some code
|
263
|
+
# end
|
264
|
+
#
|
243
265
|
# @return [void]
|
244
266
|
def hide!
|
245
267
|
visible(false)
|
@@ -260,21 +282,23 @@ module Vedeu
|
|
260
282
|
# to true.
|
261
283
|
#
|
262
284
|
# @example
|
263
|
-
# interface 'my_interface' do
|
285
|
+
# Vedeu.interface 'my_interface' do
|
264
286
|
# visible true # => show the interface
|
287
|
+
# # or...
|
265
288
|
# show! # => as above
|
266
|
-
# # ...
|
289
|
+
# # ... some code
|
267
290
|
# end
|
268
291
|
#
|
269
|
-
# interface 'my_interface' do
|
292
|
+
# Vedeu.interface 'my_interface' do
|
270
293
|
# visible false # => hide the interface
|
294
|
+
# # or...
|
271
295
|
# hide! # => as above
|
272
|
-
# # ...
|
296
|
+
# # ... some code
|
273
297
|
# end
|
274
298
|
#
|
275
|
-
# view 'my_interface' do
|
299
|
+
# Vedeu.view 'my_interface' do
|
276
300
|
# visible false
|
277
|
-
# # ...
|
301
|
+
# # ... some code
|
278
302
|
# end
|
279
303
|
#
|
280
304
|
# @return [void]
|
@@ -294,7 +318,7 @@ module Vedeu
|
|
294
318
|
# --2--
|
295
319
|
# --1-- # rendered first
|
296
320
|
#
|
297
|
-
# interface 'my_interface' do
|
321
|
+
# Vedeu.interface 'my_interface' do
|
298
322
|
# zindex 3
|
299
323
|
# # ...
|
300
324
|
# end
|
data/lib/vedeu/log/debug.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
+
# Provides a stack trace of a running client application upon exit in a file
|
4
|
+
# for further analysis.
|
5
|
+
#
|
3
6
|
module Debug
|
4
7
|
|
5
8
|
extend self
|
@@ -62,7 +65,8 @@ module Vedeu
|
|
62
65
|
# - Creates a call tree report compatible with KCachegrind.
|
63
66
|
# RubyProf::CallTreePrinter
|
64
67
|
|
65
|
-
# - Uses the other printers to create several reports in one profiling
|
68
|
+
# - Uses the other printers to create several reports in one profiling
|
69
|
+
# run
|
66
70
|
# RubyProf::MultiPrinter
|
67
71
|
end
|
68
72
|
|
data/lib/vedeu/log/log.rb
CHANGED
@@ -168,14 +168,15 @@ module Vedeu
|
|
168
168
|
def defaults
|
169
169
|
{
|
170
170
|
client: nil,
|
171
|
-
colour:
|
171
|
+
colour: Vedeu::Colour.coerce(background: :default,
|
172
|
+
foreground: :default),
|
172
173
|
delay: 0.0,
|
173
174
|
group: '',
|
174
175
|
lines: [],
|
175
176
|
name: '',
|
176
177
|
parent: nil,
|
177
178
|
repository: Vedeu.interfaces,
|
178
|
-
style:
|
179
|
+
style: :normal,
|
179
180
|
visible: true,
|
180
181
|
zindex: 0,
|
181
182
|
}
|
data/lib/vedeu/plugins.rb
CHANGED
@@ -78,10 +78,11 @@ module Vedeu
|
|
78
78
|
@exit_code = 0
|
79
79
|
|
80
80
|
rescue StandardError => uncaught_exception
|
81
|
-
Vedeu.log_stdout(message: uncaught_exception.message)
|
81
|
+
Vedeu.log_stdout(type: :error, message: uncaught_exception.message)
|
82
82
|
|
83
83
|
if configuration.debug?
|
84
|
-
Vedeu.log_stdout(
|
84
|
+
Vedeu.log_stdout(type: :error,
|
85
|
+
message: uncaught_exception.backtrace.join("\n"))
|
85
86
|
end
|
86
87
|
end
|
87
88
|
|
data/lib/vedeu/runtime/router.rb
CHANGED
@@ -11,24 +11,24 @@ module Vedeu
|
|
11
11
|
# Registers a controller with the given controller name for the client
|
12
12
|
# application.
|
13
13
|
#
|
14
|
-
# @param
|
14
|
+
# @param controller [Symbol]
|
15
15
|
# @param klass [String]
|
16
16
|
# @raise [Vedeu::MissingRequired] When the controller name is not given.
|
17
17
|
# @return [void]
|
18
|
-
def add_controller(
|
19
|
-
unless present?(
|
18
|
+
def add_controller(controller, klass)
|
19
|
+
unless present?(controller)
|
20
20
|
fail Vedeu::MissingRequired,
|
21
21
|
'Cannot store controller without a name attribute.'
|
22
22
|
end
|
23
23
|
|
24
24
|
Vedeu.log(type: :create,
|
25
|
-
message: "Adding ':#{
|
25
|
+
message: "Adding ':#{controller}'")
|
26
26
|
|
27
|
-
if registered?(
|
28
|
-
storage[
|
27
|
+
if registered?(controller)
|
28
|
+
storage[controller].merge!(klass: klass)
|
29
29
|
|
30
30
|
else
|
31
|
-
storage.store(
|
31
|
+
storage.store(controller, klass: klass, actions: [])
|
32
32
|
|
33
33
|
end
|
34
34
|
|
@@ -38,22 +38,22 @@ module Vedeu
|
|
38
38
|
# Registers an action to the given controller name for the client
|
39
39
|
# application.
|
40
40
|
#
|
41
|
-
# @param
|
42
|
-
# @param
|
41
|
+
# @param controller [Symbol]
|
42
|
+
# @param action [Symbol]
|
43
43
|
# @raise [Vedeu::MissingRequired] When the controller name or action name is
|
44
44
|
# not given.
|
45
45
|
# @return [void]
|
46
|
-
def add_action(
|
47
|
-
if present?(
|
46
|
+
def add_action(controller, action)
|
47
|
+
if present?(controller) && present?(action)
|
48
48
|
Vedeu.log(type: :create,
|
49
|
-
message: "Adding ':#{
|
49
|
+
message: "Adding ':#{action}' for ':#{controller}'")
|
50
50
|
|
51
|
-
if registered?(
|
52
|
-
storage[
|
51
|
+
if registered?(controller)
|
52
|
+
storage[controller][:actions] << action
|
53
53
|
|
54
54
|
else
|
55
|
-
add_controller(
|
56
|
-
add_action(
|
55
|
+
add_controller(controller, '')
|
56
|
+
add_action(controller, action)
|
57
57
|
|
58
58
|
end
|
59
59
|
|
@@ -70,30 +70,28 @@ module Vedeu
|
|
70
70
|
# parameters.
|
71
71
|
#
|
72
72
|
# @example
|
73
|
-
# Vedeu.goto(
|
73
|
+
# Vedeu.goto(controller, action, args)
|
74
74
|
#
|
75
|
-
# @param
|
76
|
-
# @param
|
75
|
+
# @param controller [Symbol]
|
76
|
+
# @param action [Symbol]
|
77
77
|
# @param args [void]
|
78
78
|
# @raise [Vedeu::ModelNotFound] When the controller is not registered.
|
79
79
|
# @return [void]
|
80
|
-
def goto(
|
81
|
-
|
82
|
-
|
83
|
-
message: "Routing: #{controller_name} #{action_name}")
|
80
|
+
def goto(controller, action, **args)
|
81
|
+
Vedeu.log(type: :debug,
|
82
|
+
message: "Routing: #{controller} #{action}")
|
84
83
|
|
85
|
-
|
86
|
-
end
|
84
|
+
route(controller, action, args) if action_defined?(action, controller)
|
87
85
|
end
|
88
86
|
alias_method :action, :goto
|
89
87
|
|
90
88
|
# Returns a boolean indicating whether the given controller name is already
|
91
89
|
# registered.
|
92
90
|
#
|
93
|
-
# @param
|
91
|
+
# @param controller [Symbol]
|
94
92
|
# @return [Boolean]
|
95
|
-
def registered?(
|
96
|
-
storage.key?(
|
93
|
+
def registered?(controller)
|
94
|
+
storage.key?(controller)
|
97
95
|
end
|
98
96
|
|
99
97
|
# Removes all stored controllers with their respective actions.
|
@@ -109,43 +107,47 @@ module Vedeu
|
|
109
107
|
# Returns a boolean indicating whether the given action name is defined for
|
110
108
|
# the given controller.
|
111
109
|
#
|
112
|
-
# @param
|
113
|
-
# @param
|
110
|
+
# @param action [Symbol]
|
111
|
+
# @param controller [Symbol]
|
114
112
|
# @return [Boolean]
|
115
|
-
def action_defined?(
|
116
|
-
if registered?(
|
117
|
-
return true if storage[
|
113
|
+
def action_defined?(action, controller)
|
114
|
+
if registered?(controller)
|
115
|
+
return true if storage[controller][:actions].include?(action)
|
118
116
|
|
119
117
|
fail Vedeu::ActionNotFound,
|
120
|
-
"#{
|
118
|
+
"#{action} is not registered for #{controller}."
|
121
119
|
|
122
120
|
else
|
123
|
-
fail Vedeu::ControllerNotFound, "#{
|
121
|
+
fail Vedeu::ControllerNotFound, "#{controller} is not registered."
|
124
122
|
|
125
123
|
end
|
126
124
|
end
|
127
125
|
|
128
|
-
# Instantiate the given controller by name
|
126
|
+
# Instantiate the given controller by name, the call the action (method)
|
127
|
+
# with any given arguments.
|
129
128
|
#
|
130
|
-
# @param
|
129
|
+
# @param controller [Symbol]
|
130
|
+
# @param action [Symbol]
|
131
|
+
# @param args [Symbol]
|
131
132
|
# @return [void]
|
132
|
-
def
|
133
|
-
Object.const_get(klass_for(
|
133
|
+
def route(controller, action, **args)
|
134
|
+
klass = Object.const_get(klass_for(controller)).new
|
135
|
+
klass.send(action, args)
|
134
136
|
end
|
135
137
|
|
136
138
|
# Fetch the class for the controller by name.
|
137
139
|
#
|
138
|
-
# @param
|
140
|
+
# @param controller [Symbol]
|
139
141
|
# @raise [Vedeu::MissingRequired] When the given controller name does not
|
140
142
|
# have a class defined.
|
141
143
|
# @return [String]
|
142
|
-
def klass_for(
|
143
|
-
if registered?(
|
144
|
-
storage[
|
144
|
+
def klass_for(controller)
|
145
|
+
if registered?(controller) && klass_defined?(controller)
|
146
|
+
storage[controller][:klass]
|
145
147
|
|
146
148
|
else
|
147
149
|
fail Vedeu::MissingRequired,
|
148
|
-
"Cannot route to #{
|
150
|
+
"Cannot route to #{controller} as no class defined."
|
149
151
|
|
150
152
|
end
|
151
153
|
end
|
@@ -153,10 +155,10 @@ module Vedeu
|
|
153
155
|
# Returns a boolean indicating whether the given controller name has a class
|
154
156
|
# defined.
|
155
157
|
#
|
156
|
-
# @param
|
158
|
+
# @param controller [Symbol]
|
157
159
|
# @return [Boolean]
|
158
|
-
def klass_defined?(
|
159
|
-
present?(storage[
|
160
|
+
def klass_defined?(controller)
|
161
|
+
present?(storage[controller][:klass])
|
160
162
|
end
|
161
163
|
|
162
164
|
# Returns all the stored controllers and their respective actions.
|