vedeu 0.2.4 → 0.2.5
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/.gitignore +3 -1
- data/LICENSE.txt +5 -0
- data/bin/vedeu +3 -1
- data/docs/api.md +2 -0
- data/examples/cursor_app/cursor_app.rb +22 -7
- data/examples/hello_world.rb +42 -0
- data/lib/vedeu.rb +5 -5
- data/lib/vedeu/api/api.rb +16 -33
- data/lib/vedeu/api/helpers.rb +86 -0
- data/lib/vedeu/api/interface.rb +60 -17
- data/lib/vedeu/api/keymap.rb +5 -0
- data/lib/vedeu/api/line.rb +52 -34
- data/lib/vedeu/api/menu.rb +1 -1
- data/lib/vedeu/api/stream.rb +0 -34
- data/lib/vedeu/configuration/api.rb +10 -10
- data/lib/vedeu/configuration/cli.rb +1 -1
- data/lib/vedeu/launcher.rb +21 -6
- data/lib/vedeu/models/background.rb +1 -1
- data/lib/vedeu/models/composition.rb +1 -1
- data/lib/vedeu/models/cursor.rb +25 -35
- data/lib/vedeu/models/foreground.rb +1 -1
- data/lib/vedeu/models/geometry.rb +216 -6
- data/lib/vedeu/models/interface.rb +14 -16
- data/lib/vedeu/models/keymap.rb +38 -6
- data/lib/vedeu/models/line.rb +1 -1
- data/lib/vedeu/models/stream.rb +1 -1
- data/lib/vedeu/output/compositor.rb +1 -1
- data/lib/vedeu/output/render.rb +1 -5
- data/lib/vedeu/output/viewport.rb +37 -2
- data/lib/vedeu/repositories/buffers.rb +21 -27
- data/lib/vedeu/repositories/cursors.rb +3 -15
- data/lib/vedeu/repositories/focus.rb +2 -6
- data/lib/vedeu/repositories/groups.rb +1 -1
- data/lib/vedeu/repositories/interfaces.rb +1 -1
- data/lib/vedeu/repositories/keymaps.rb +26 -22
- data/lib/vedeu/repositories/menus.rb +1 -1
- data/lib/vedeu/repositories/offsets.rb +30 -12
- data/lib/vedeu/repositories/positional.rb +23 -0
- data/lib/vedeu/support/colour_translator.rb +1 -16
- data/lib/vedeu/support/esc.rb +23 -28
- data/lib/vedeu/support/event.rb +6 -14
- data/lib/vedeu/{output → support}/refresh.rb +0 -0
- data/lib/vedeu/support/registrar.rb +6 -14
- data/lib/vedeu/support/repository.rb +3 -2
- data/lib/vedeu/support/terminal.rb +9 -13
- data/lib/vedeu/support/trace.rb +2 -3
- data/test/integration/cursors_test.rb +9 -0
- data/test/integration/views/basic_view_test.rb +19 -0
- data/test/lib/vedeu/api/api_test.rb +28 -5
- data/test/lib/vedeu/api/composition_test.rb +7 -3
- data/test/lib/vedeu/api/defined_test.rb +9 -3
- data/test/lib/vedeu/api/helpers_test.rb +39 -5
- data/test/lib/vedeu/api/interface_test.rb +88 -8
- data/test/lib/vedeu/api/keymap_test.rb +5 -3
- data/test/lib/vedeu/api/line_test.rb +9 -3
- data/test/lib/vedeu/api/menu_test.rb +11 -7
- data/test/lib/vedeu/api/stream_test.rb +9 -31
- data/test/lib/vedeu/application_test.rb +25 -2
- data/test/lib/vedeu/configuration/api_test.rb +5 -3
- data/test/lib/vedeu/configuration/cli_test.rb +5 -3
- data/test/lib/vedeu/configuration/configuration_test.rb +5 -2
- data/test/lib/vedeu/input/input_test.rb +5 -2
- data/test/lib/vedeu/launcher_test.rb +37 -2
- data/test/lib/vedeu/models/background_test.rb +6 -2
- data/test/lib/vedeu/models/char_test.rb +9 -6
- data/test/lib/vedeu/models/colour_test.rb +6 -2
- data/test/lib/vedeu/models/composition_test.rb +4 -2
- data/test/lib/vedeu/models/cursor_test.rb +27 -16
- data/test/lib/vedeu/models/foreground_test.rb +6 -2
- data/test/lib/vedeu/models/geometry_test.rb +6 -2
- data/test/lib/vedeu/models/interface_test.rb +5 -2
- data/test/lib/vedeu/models/keymap_test.rb +6 -4
- data/test/lib/vedeu/models/line_test.rb +5 -2
- data/test/lib/vedeu/models/offset_test.rb +7 -3
- data/test/lib/vedeu/models/stream_test.rb +4 -2
- data/test/lib/vedeu/models/style_test.rb +5 -2
- data/test/lib/vedeu/output/clear_test.rb +6 -2
- data/test/lib/vedeu/output/compositor_test.rb +8 -4
- data/test/lib/vedeu/output/render_test.rb +9 -6
- data/test/lib/vedeu/output/view_test.rb +7 -3
- data/test/lib/vedeu/output/viewport_test.rb +42 -9
- data/test/lib/vedeu/repositories/buffers_test.rb +52 -12
- data/test/lib/vedeu/repositories/cursors_test.rb +4 -26
- data/test/lib/vedeu/repositories/events_test.rb +6 -2
- data/test/lib/vedeu/repositories/focus_test.rb +5 -2
- data/test/lib/vedeu/repositories/groups_test.rb +5 -2
- data/test/lib/vedeu/repositories/interfaces_test.rb +4 -2
- data/test/lib/vedeu/repositories/keymaps_test.rb +8 -2
- data/test/lib/vedeu/repositories/menus_test.rb +3 -2
- data/test/lib/vedeu/repositories/offsets_test.rb +26 -19
- data/test/lib/vedeu/repositories/positional_test.rb +50 -0
- data/test/lib/vedeu/support/coercions_test.rb +7 -3
- data/test/lib/vedeu/support/colour_translator_test.rb +6 -2
- data/test/lib/vedeu/support/common_test.rb +5 -3
- data/test/lib/vedeu/support/esc_test.rb +6 -2
- data/test/lib/vedeu/support/event_test.rb +6 -2
- data/test/lib/vedeu/support/grid_test.rb +9 -3
- data/test/lib/vedeu/support/keymap_validator_test.rb +5 -2
- data/test/lib/vedeu/support/log_test.rb +4 -2
- data/test/lib/vedeu/support/menu_test.rb +10 -2
- data/test/lib/vedeu/support/position_test.rb +10 -2
- data/test/lib/vedeu/support/presentation_test.rb +6 -3
- data/test/lib/vedeu/{output → support}/refresh_test.rb +6 -2
- data/test/lib/vedeu/support/registrar_test.rb +2 -2
- data/test/lib/vedeu/support/repository_test.rb +4 -3
- data/test/lib/vedeu/support/terminal_test.rb +6 -2
- data/test/lib/vedeu/support/trace_test.rb +17 -2
- data/test/lib/vedeu_test.rb +1 -1
- data/vedeu.gemspec +2 -2
- metadata +13 -13
- data/lib/vedeu/output/area.rb +0 -284
- data/lib/vedeu/support/move.rb +0 -50
- data/test/lib/vedeu/output/area_test.rb +0 -242
- data/test/lib/vedeu/support/move_test.rb +0 -35
@@ -95,8 +95,6 @@ module Vedeu
|
|
95
95
|
# Returns an escape sequence to position the cursor at the top-left
|
96
96
|
# coordinate, relative to the interface's position.
|
97
97
|
#
|
98
|
-
# @todo I think this method belongs with Area.
|
99
|
-
#
|
100
98
|
# @param index [Fixnum]
|
101
99
|
# @param block [Proc]
|
102
100
|
# @return [String]
|
@@ -117,6 +115,7 @@ module Vedeu
|
|
117
115
|
|
118
116
|
end
|
119
117
|
end
|
118
|
+
alias_method :y_min, :top
|
120
119
|
|
121
120
|
# Returns the row above the top by default.
|
122
121
|
#
|
@@ -146,6 +145,7 @@ module Vedeu
|
|
146
145
|
|
147
146
|
end
|
148
147
|
end
|
148
|
+
alias_method :x_min, :left
|
149
149
|
|
150
150
|
# Returns the column before left by default.
|
151
151
|
#
|
@@ -210,8 +210,6 @@ module Vedeu
|
|
210
210
|
|
211
211
|
# Provides a virtual y position within the interface's dimensions.
|
212
212
|
#
|
213
|
-
# @todo I think this method belongs with Area.
|
214
|
-
#
|
215
213
|
# @example
|
216
214
|
# # top = 3
|
217
215
|
# # bottom = 6
|
@@ -224,8 +222,6 @@ module Vedeu
|
|
224
222
|
|
225
223
|
# Provides a virtual x position within the interface's dimensions.
|
226
224
|
#
|
227
|
-
# @todo I think this method belongs with Area.
|
228
|
-
#
|
229
225
|
# @example
|
230
226
|
# # left = 9
|
231
227
|
# # right = 13
|
@@ -236,6 +232,56 @@ module Vedeu
|
|
236
232
|
(left...right).to_a
|
237
233
|
end
|
238
234
|
|
235
|
+
# Returns the actual position of y for a given index. Crudely corrects out
|
236
|
+
# of range values.
|
237
|
+
#
|
238
|
+
# @example
|
239
|
+
# # y_range = [7, 8, 9, 10, 11]
|
240
|
+
# y_position # => 7
|
241
|
+
# y_position(-2) # => 7
|
242
|
+
# y_position(2) # => 9
|
243
|
+
# y_position(7) # => 11
|
244
|
+
#
|
245
|
+
# @param index [Fixnum]
|
246
|
+
# @return [Fixnum]
|
247
|
+
def y_position(index = 0)
|
248
|
+
if index <= 0
|
249
|
+
y_min
|
250
|
+
|
251
|
+
elsif index >= y_max_index
|
252
|
+
y_max
|
253
|
+
|
254
|
+
else
|
255
|
+
y_range[index]
|
256
|
+
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
# Returns the actual position of x for a given index. Crudely corrects out
|
261
|
+
# of range values.
|
262
|
+
#
|
263
|
+
# @example
|
264
|
+
# # x_range = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
|
265
|
+
# x_position # => 4
|
266
|
+
# x_position(-2) # => 4
|
267
|
+
# x_position(2) # => 6
|
268
|
+
# x_position(15) # => 13
|
269
|
+
#
|
270
|
+
# @param index [Fixnum]
|
271
|
+
# @return [Fixnum]
|
272
|
+
def x_position(index = 0)
|
273
|
+
if index <= 0
|
274
|
+
x_min
|
275
|
+
|
276
|
+
elsif index >= x_max_index
|
277
|
+
x_max
|
278
|
+
|
279
|
+
else
|
280
|
+
x_range[index]
|
281
|
+
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
239
285
|
# Provides all the geometry in a convenient hash.
|
240
286
|
#
|
241
287
|
# @return [Hash]
|
@@ -261,6 +307,170 @@ module Vedeu
|
|
261
307
|
|
262
308
|
private
|
263
309
|
|
310
|
+
# Returns the y coordinate as an offset index in the area's y range. When a
|
311
|
+
# value is provided, the y coordinate is overridden. Crudely corrects out of
|
312
|
+
# range values.
|
313
|
+
#
|
314
|
+
# @example
|
315
|
+
# # y_range = [7, 8, 9, 10]
|
316
|
+
# # y = 8
|
317
|
+
# y_index # => 1
|
318
|
+
# y_index(10) # => 3
|
319
|
+
# y_index(5) # => 0
|
320
|
+
# y_index(15) # => 3
|
321
|
+
#
|
322
|
+
# @param value [Fixnum]
|
323
|
+
# @return [Fixnum]
|
324
|
+
def y_index(value = y)
|
325
|
+
if height <= 0 || value <= y_min
|
326
|
+
0
|
327
|
+
|
328
|
+
elsif value >= y_max
|
329
|
+
y_max_index
|
330
|
+
|
331
|
+
else
|
332
|
+
y_range.index(value)
|
333
|
+
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
# Returns the x coordinate as an offset index in the area's x range. When a
|
338
|
+
# value is provided, the x coordinate is overridden. Crudely corrects out of
|
339
|
+
# range values.
|
340
|
+
#
|
341
|
+
# @example
|
342
|
+
# # x_range = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
|
343
|
+
# # x = 8
|
344
|
+
# x_index # => 4
|
345
|
+
# x_index(11) # => 7
|
346
|
+
# x_index(2) # => 0
|
347
|
+
# x_index(15) # => 9
|
348
|
+
#
|
349
|
+
# @param value [Fixnum]
|
350
|
+
# @return [Fixnum]
|
351
|
+
def x_index(value = x)
|
352
|
+
if width <= 0 || value <= x_min
|
353
|
+
0
|
354
|
+
|
355
|
+
elsif value >= x_max
|
356
|
+
x_max_index
|
357
|
+
|
358
|
+
else
|
359
|
+
x_range.index(value)
|
360
|
+
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
# Returns the maximum y index for an area.
|
365
|
+
#
|
366
|
+
# @example
|
367
|
+
# # height = 3
|
368
|
+
# y_max_index # => 2
|
369
|
+
#
|
370
|
+
# @return [Fixnum]
|
371
|
+
def y_max_index
|
372
|
+
return 0 if y_indices.empty?
|
373
|
+
|
374
|
+
y_indices.last
|
375
|
+
end
|
376
|
+
|
377
|
+
# Returns the maximum x index for an area.
|
378
|
+
#
|
379
|
+
# @example
|
380
|
+
# # width = 6
|
381
|
+
# x_max_index # => 5
|
382
|
+
#
|
383
|
+
# @return [Fixnum]
|
384
|
+
def x_max_index
|
385
|
+
return 0 if x_indices.empty?
|
386
|
+
|
387
|
+
x_indices.last
|
388
|
+
end
|
389
|
+
|
390
|
+
# Returns the same as #y_range, except as indices of an array.
|
391
|
+
#
|
392
|
+
# @example
|
393
|
+
# # height = 4
|
394
|
+
# y_indices # => [0, 1, 2, 3]
|
395
|
+
#
|
396
|
+
# @return [Array]
|
397
|
+
def y_indices
|
398
|
+
(0...height).to_a
|
399
|
+
end
|
400
|
+
|
401
|
+
# Returns the same as #x_range, except as indices of an array.
|
402
|
+
#
|
403
|
+
# @example
|
404
|
+
# # width = 10
|
405
|
+
# x_indices # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
406
|
+
#
|
407
|
+
# @return [Array]
|
408
|
+
def x_indices
|
409
|
+
(0...width).to_a
|
410
|
+
end
|
411
|
+
|
412
|
+
# Returns an array with all coordinates from x to x_max.
|
413
|
+
#
|
414
|
+
# @example
|
415
|
+
# # width = 10
|
416
|
+
# # x_min = 4
|
417
|
+
# # x_max = 14
|
418
|
+
# x_range # => [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
|
419
|
+
#
|
420
|
+
# @return [Array]
|
421
|
+
def x_range
|
422
|
+
(x_min...x_max).to_a
|
423
|
+
end
|
424
|
+
|
425
|
+
# Returns an array with all coordinates from y to y_max.
|
426
|
+
#
|
427
|
+
# @example
|
428
|
+
# # height = 4
|
429
|
+
# # y_min = 7
|
430
|
+
# # y_max = 11
|
431
|
+
# y_range # => [7, 8, 9, 10]
|
432
|
+
#
|
433
|
+
# @return [Array]
|
434
|
+
def y_range
|
435
|
+
(y_min...y_max).to_a
|
436
|
+
end
|
437
|
+
|
438
|
+
# Returns the maximum y coordinate for an area.
|
439
|
+
#
|
440
|
+
# @example
|
441
|
+
# # y_min = 2
|
442
|
+
# # height = 4
|
443
|
+
# y_max # => 6
|
444
|
+
#
|
445
|
+
# @return [Fixnum]
|
446
|
+
def y_max
|
447
|
+
if height <= 0
|
448
|
+
0
|
449
|
+
|
450
|
+
else
|
451
|
+
y_min + height
|
452
|
+
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
# Returns the maximum x coordinate for an area.
|
457
|
+
#
|
458
|
+
# @example
|
459
|
+
# # x_min = 5
|
460
|
+
# # width = 20
|
461
|
+
# x_max # => 25
|
462
|
+
#
|
463
|
+
# @return [Fixnum]
|
464
|
+
def x_max
|
465
|
+
if width <= 0
|
466
|
+
0
|
467
|
+
|
468
|
+
else
|
469
|
+
x_min + width
|
470
|
+
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
264
474
|
# The default geometry of an interface- full screen.
|
265
475
|
#
|
266
476
|
# @return [Hash]
|
@@ -43,9 +43,10 @@ module Vedeu
|
|
43
43
|
def initialize(attributes = {}, &block)
|
44
44
|
@attributes = defaults.merge!(attributes)
|
45
45
|
|
46
|
-
@
|
47
|
-
@group = @attributes[:group]
|
46
|
+
@cursor = @attributes[:cursor]
|
48
47
|
@delay = @attributes[:delay]
|
48
|
+
@group = @attributes[:group]
|
49
|
+
@name = @attributes[:name]
|
49
50
|
@parent = @attributes[:parent]
|
50
51
|
|
51
52
|
if block_given?
|
@@ -71,9 +72,10 @@ module Vedeu
|
|
71
72
|
# @return [Cursor]
|
72
73
|
def cursor
|
73
74
|
@_cursor ||= Cursor.new({
|
74
|
-
name:
|
75
|
-
|
76
|
-
|
75
|
+
name: name,
|
76
|
+
state: attributes[:cursor],
|
77
|
+
x: geometry.x_position(offset.x),
|
78
|
+
y: geometry.y_position(offset.y),
|
77
79
|
})
|
78
80
|
end
|
79
81
|
|
@@ -115,24 +117,20 @@ module Vedeu
|
|
115
117
|
|
116
118
|
private
|
117
119
|
|
118
|
-
# @return [Area]
|
119
|
-
def area
|
120
|
-
@_area ||= Area.from_interface(self)
|
121
|
-
end
|
122
|
-
|
123
120
|
# The default values for a new instance of Interface.
|
124
121
|
#
|
125
122
|
# @return [Hash]
|
126
123
|
def defaults
|
127
124
|
{
|
128
|
-
name: '',
|
129
|
-
group: '',
|
130
|
-
lines: [],
|
131
125
|
colour: {},
|
132
|
-
|
133
|
-
geometry: {},
|
126
|
+
cursor: :hide,
|
134
127
|
delay: 0.0,
|
128
|
+
geometry: {},
|
129
|
+
group: '',
|
130
|
+
lines: [],
|
131
|
+
name: '',
|
135
132
|
parent: nil,
|
133
|
+
style: '',
|
136
134
|
}
|
137
135
|
end
|
138
136
|
|
@@ -141,7 +139,7 @@ module Vedeu
|
|
141
139
|
# @param block [Proc] The optional block provided to the method.
|
142
140
|
# @return []
|
143
141
|
def method_missing(method, *args, &block)
|
144
|
-
Vedeu.log("Interface#method_missing '#{method
|
142
|
+
Vedeu.log("Interface#method_missing '#{method}' (args: #{args.inspect})")
|
145
143
|
|
146
144
|
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
147
145
|
end
|
data/lib/vedeu/models/keymap.rb
CHANGED
@@ -10,12 +10,44 @@ module Vedeu
|
|
10
10
|
|
11
11
|
attr_reader :attributes
|
12
12
|
|
13
|
+
# Define actions for keypresses for when specific interfaces are in focus.
|
14
|
+
# Unless an interface is specified, the key will be assumed to be global,
|
15
|
+
# meaning its action will happen regardless of the interface in focus.
|
16
|
+
#
|
17
|
+
# @param name_or_names [String] The name or names of the interface(s) which
|
18
|
+
# will handle these keys.
|
19
|
+
# @param block [Proc]
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# keys do # => will be global
|
23
|
+
# key('s') { :something }
|
24
|
+
# ...
|
25
|
+
#
|
26
|
+
# keys 'my_interface' do # => will only function when 'my_interface'
|
27
|
+
# ... # is in focus
|
28
|
+
#
|
29
|
+
# keys('main', 'other') do # => will function for both 'main' and
|
30
|
+
# ... # 'other' interfaces
|
31
|
+
#
|
32
|
+
# keys do
|
33
|
+
# interface 'my_interface' # => will only function when 'my_interface'
|
34
|
+
# ... # is in focus
|
35
|
+
#
|
36
|
+
# @raise [InvalidSyntax] When the required block is not given.
|
37
|
+
# @return [Keymap]
|
38
|
+
def self.keys(*name_or_names, &block)
|
39
|
+
fail InvalidSyntax, '`keys` requires a block.' unless block_given?
|
40
|
+
|
41
|
+
define({ interfaces: name_or_names }, &block)
|
42
|
+
end
|
43
|
+
|
13
44
|
# Define a keymap for an interface or interfaces to perform an action when
|
14
45
|
# a key is pressed whilst an aforementioned interface is in focus.
|
15
46
|
#
|
16
47
|
# @param attributes [Hash] The attributes to register the keymap with.
|
17
|
-
# @option attributes :interfaces []
|
18
|
-
#
|
48
|
+
# @option attributes :interfaces [] the interface(s) which will respond to
|
49
|
+
# the keypress(es)
|
50
|
+
# @option attributes :keys [] the keypress/action pairs for this keymap
|
19
51
|
# @param block [Proc]
|
20
52
|
# @return [Keymap]
|
21
53
|
def self.define(attributes = {}, &block)
|
@@ -33,7 +65,7 @@ module Vedeu
|
|
33
65
|
# Adds the attributes to the Keymaps repository.
|
34
66
|
#
|
35
67
|
# @param block [Proc]
|
36
|
-
# @return [
|
68
|
+
# @return [Keymap]
|
37
69
|
def define(&block)
|
38
70
|
if block_given?
|
39
71
|
@self_before_instance_eval = eval('self', block.binding)
|
@@ -53,8 +85,8 @@ module Vedeu
|
|
53
85
|
# @return [Hash]
|
54
86
|
def defaults
|
55
87
|
{
|
56
|
-
interfaces: [],
|
57
|
-
keys:
|
88
|
+
interfaces: [],
|
89
|
+
keys: [],
|
58
90
|
}
|
59
91
|
end
|
60
92
|
|
@@ -63,7 +95,7 @@ module Vedeu
|
|
63
95
|
# @param block [Proc] The optional block provided to the method.
|
64
96
|
# @return []
|
65
97
|
def method_missing(method, *args, &block)
|
66
|
-
Vedeu.log("Keymap#method_missing '#{method
|
98
|
+
Vedeu.log("Keymap#method_missing '#{method}' (args: #{args.inspect})")
|
67
99
|
|
68
100
|
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
69
101
|
end
|
data/lib/vedeu/models/line.rb
CHANGED
@@ -90,7 +90,7 @@ module Vedeu
|
|
90
90
|
# @param block [Proc] The optional block provided to the method.
|
91
91
|
# @return []
|
92
92
|
def method_missing(method, *args, &block)
|
93
|
-
Vedeu.log("Line#method_missing '#{method
|
93
|
+
Vedeu.log("Line#method_missing '#{method}' (args: #{args.inspect})")
|
94
94
|
|
95
95
|
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
96
96
|
end
|
data/lib/vedeu/models/stream.rb
CHANGED
@@ -120,7 +120,7 @@ module Vedeu
|
|
120
120
|
# @param block [Proc] The optional block provided to the method.
|
121
121
|
# @return []
|
122
122
|
def method_missing(method, *args, &block)
|
123
|
-
Vedeu.log("Stream#method_missing '#{method
|
123
|
+
Vedeu.log("Stream#method_missing '#{method}' (args: #{args.inspect})")
|
124
124
|
|
125
125
|
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
126
126
|
end
|