vedeu 0.8.8 → 0.8.9
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/docs/dsl/by_method/focus_by_name.md +6 -1
- data/docs/dsl/by_method/focus_next.md +7 -0
- data/docs/dsl/by_method/focus_previous.md +7 -0
- data/docs/events/by_name/mouse_event.md +8 -0
- data/lib/vedeu.rb +12 -0
- data/lib/vedeu/all.rb +2 -0
- data/lib/vedeu/application/controller.rb +2 -6
- data/lib/vedeu/buffers/empty.rb +2 -1
- data/lib/vedeu/cells/borders/vertices/bottom_left.rb +1 -1
- data/lib/vedeu/cells/borders/vertices/bottom_right.rb +1 -1
- data/lib/vedeu/cells/borders/vertices/top_left.rb +1 -1
- data/lib/vedeu/cells/borders/vertices/top_right.rb +1 -1
- data/lib/vedeu/cells/char.rb +2 -6
- data/lib/vedeu/cells/cursor.rb +1 -1
- data/lib/vedeu/cells/support/html.rb +6 -18
- data/lib/vedeu/coercers/all.rb +18 -1
- data/lib/vedeu/coercers/chars.rb +29 -0
- data/lib/vedeu/coercers/coercer.rb +59 -0
- data/lib/vedeu/coercers/colour.rb +15 -33
- data/lib/vedeu/coercers/colour_attributes.rb +8 -3
- data/lib/vedeu/coercers/editor_line.rb +36 -0
- data/lib/vedeu/coercers/editor_lines.rb +36 -0
- data/lib/vedeu/coercers/lines.rb +36 -0
- data/lib/vedeu/coercers/page.rb +52 -0
- data/lib/vedeu/coercers/position.rb +69 -0
- data/lib/vedeu/coercers/row.rb +43 -0
- data/lib/vedeu/coercers/streams.rb +29 -0
- data/lib/vedeu/coercers/style.rb +54 -0
- data/lib/vedeu/configuration/api.rb +10 -0
- data/lib/vedeu/configuration/configuration.rb +11 -0
- data/lib/vedeu/cursors/coordinate.rb +41 -66
- data/lib/vedeu/cursors/cursor.rb +4 -4
- data/lib/vedeu/cursors/reposition.rb +3 -3
- data/lib/vedeu/dsl/border.rb +2 -39
- data/lib/vedeu/dsl/elements.rb +5 -6
- data/lib/vedeu/dsl/geometry.rb +3 -12
- data/lib/vedeu/editor/cropper.rb +2 -1
- data/lib/vedeu/error.rb +4 -0
- data/lib/vedeu/geometries/position.rb +14 -27
- data/lib/vedeu/input/mouse.rb +14 -5
- data/lib/vedeu/input/read.rb +1 -11
- data/lib/vedeu/interfaces/clear.rb +2 -1
- data/lib/vedeu/logging/log.rb +1 -1
- data/lib/vedeu/models/page.rb +5 -23
- data/lib/vedeu/models/row.rb +5 -14
- data/lib/vedeu/models/toggleable.rb +2 -7
- data/lib/vedeu/plugins/plugin.rb +1 -0
- data/lib/vedeu/presentation/style.rb +4 -20
- data/lib/vedeu/renderers/all.rb +24 -10
- data/lib/vedeu/repositories/model.rb +2 -8
- data/lib/vedeu/repositories/registerable.rb +4 -9
- data/lib/vedeu/runtime/application.rb +2 -0
- data/lib/vedeu/runtime/flags.rb +2 -0
- data/lib/vedeu/runtime/router.rb +2 -0
- data/lib/vedeu/support/point.rb +9 -7
- data/lib/vedeu/support/x_coordinate.rb +57 -0
- data/lib/vedeu/support/y_coordinate.rb +57 -0
- data/lib/vedeu/terminal/terminal.rb +2 -0
- data/lib/vedeu/version.rb +1 -1
- data/lib/vedeu/views/value.rb +3 -12
- data/test/lib/vedeu/coercers/chars_test.rb +33 -0
- data/test/lib/vedeu/coercers/coercer_test.rb +34 -0
- data/test/lib/vedeu/coercers/colour_test.rb +9 -7
- data/test/lib/vedeu/coercers/editor_line_test.rb +40 -0
- data/test/lib/vedeu/coercers/editor_lines_test.rb +40 -0
- data/test/lib/vedeu/coercers/lines_test.rb +40 -0
- data/test/lib/vedeu/coercers/page_test.rb +150 -0
- data/test/lib/vedeu/coercers/position_test.rb +76 -0
- data/test/lib/vedeu/coercers/row_test.rb +64 -0
- data/test/lib/vedeu/coercers/streams_test.rb +33 -0
- data/test/lib/vedeu/coercers/style_test.rb +62 -0
- data/test/lib/vedeu/cursors/coordinate_test.rb +11 -12
- data/test/lib/vedeu/geometries/position_test.rb +10 -54
- data/test/lib/vedeu/input/capture_test.rb +1 -1
- data/test/lib/vedeu/models/page_test.rb +4 -116
- data/test/lib/vedeu/models/row_test.rb +1 -31
- data/test/lib/vedeu/presentation/style_test.rb +4 -38
- data/test/lib/vedeu/renderers/all_test.rb +6 -0
- data/test/lib/vedeu/support/point_test.rb +13 -1
- data/test/lib/vedeu/support/x_coordinate_test.rb +64 -0
- data/test/lib/vedeu/support/y_coordinate_test.rb +64 -0
- data/test/support/examples/material_colours_app.rb +1 -0
- data/vedeu.gemspec +1 -1
- metadata +41 -4
data/lib/vedeu/cursors/cursor.rb
CHANGED
@@ -188,7 +188,7 @@ module Vedeu
|
|
188
188
|
#
|
189
189
|
# @return [Vedeu::Geometries::Position]
|
190
190
|
def position
|
191
|
-
@position = Vedeu::Geometries::Position.
|
191
|
+
@position = Vedeu::Geometries::Position.new(y, x)
|
192
192
|
end
|
193
193
|
|
194
194
|
# {include:file:docs/events/by_name/show_cursor.md}
|
@@ -224,9 +224,9 @@ module Vedeu
|
|
224
224
|
#
|
225
225
|
# @return [Vedeu::Cursors::Coordinate]
|
226
226
|
def coordinate(offset, type)
|
227
|
-
Vedeu::Cursors::Coordinate.new(
|
228
|
-
offset:
|
229
|
-
type:
|
227
|
+
Vedeu::Cursors::Coordinate.new(geometry: geometry,
|
228
|
+
offset: offset,
|
229
|
+
type: type)
|
230
230
|
end
|
231
231
|
|
232
232
|
# The default values for a new instance of this class.
|
@@ -71,9 +71,9 @@ module Vedeu
|
|
71
71
|
# @param type [Symbol]
|
72
72
|
# @return [Vedeu::Cursors::Coordinate]
|
73
73
|
def coordinate(offset, type)
|
74
|
-
Vedeu::Cursors::Coordinate.new(
|
75
|
-
offset:
|
76
|
-
type:
|
74
|
+
Vedeu::Cursors::Coordinate.new(geometry: geometry,
|
75
|
+
offset: offset,
|
76
|
+
type: type)
|
77
77
|
end
|
78
78
|
|
79
79
|
# @return [Vedeu::Cursors::Cursor]
|
data/lib/vedeu/dsl/border.rb
CHANGED
@@ -10,39 +10,7 @@ module Vedeu
|
|
10
10
|
#
|
11
11
|
module Border
|
12
12
|
|
13
|
-
#
|
14
|
-
# methods within this module are included as class methods on
|
15
|
-
# that class.
|
16
|
-
#
|
17
|
-
module ClassMethods
|
18
|
-
|
19
|
-
# Specify the border of an interface or view with a simple
|
20
|
-
# DSL.
|
21
|
-
#
|
22
|
-
# # Standalone (preferred):
|
23
|
-
# Vedeu.border :my_interface do
|
24
|
-
# # ... see {Vedeu::Borders::DSL}
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# @param name [String|Symbol] The name of the interface or
|
28
|
-
# view to which this border belongs.
|
29
|
-
# @param block [Proc]
|
30
|
-
# @macro raise_requires_block
|
31
|
-
# @macro raise_missing_required
|
32
|
-
# @return [Vedeu::Borders::Border]
|
33
|
-
# @see Vedeu::Borders::DSL
|
34
|
-
def border(name, &block)
|
35
|
-
fail Vedeu::Error::MissingRequired unless name
|
36
|
-
fail Vedeu::Error::RequiresBlock unless block_given?
|
37
|
-
|
38
|
-
Vedeu::Borders::Border.build(enabled: true, name: name, &block).store
|
39
|
-
end
|
40
|
-
|
41
|
-
end # ClassMethods
|
42
|
-
|
43
|
-
# When {Vedeu::DSL::Border} is included in a class, the
|
44
|
-
# methods within this module are included as instance methods on
|
45
|
-
# that class.
|
13
|
+
# Provide additional behaviour as instance methods.
|
46
14
|
#
|
47
15
|
module InstanceMethods
|
48
16
|
|
@@ -110,13 +78,8 @@ module Vedeu
|
|
110
78
|
|
111
79
|
end # InstanceMethods
|
112
80
|
|
113
|
-
#
|
114
|
-
# as class methods for the class.
|
115
|
-
#
|
116
|
-
# @param klass [Class]
|
117
|
-
# @return [void]
|
81
|
+
# @macro included_module
|
118
82
|
def self.included(klass)
|
119
|
-
klass.extend(Vedeu::DSL::Border::ClassMethods)
|
120
83
|
klass.include(Vedeu::DSL::Border::InstanceMethods)
|
121
84
|
end
|
122
85
|
|
data/lib/vedeu/dsl/elements.rb
CHANGED
@@ -61,7 +61,7 @@ module Vedeu
|
|
61
61
|
#
|
62
62
|
# @param block [Proc]
|
63
63
|
# @macro raise_requires_block
|
64
|
-
# @
|
64
|
+
# @macro raise_fatal
|
65
65
|
# @return [void]
|
66
66
|
def lines(opts = {}, &block)
|
67
67
|
requires_block!(&block)
|
@@ -113,7 +113,7 @@ module Vedeu
|
|
113
113
|
# @param opts [Hash]
|
114
114
|
# @option opts ... [void]
|
115
115
|
# @param block [Proc]
|
116
|
-
# @
|
116
|
+
# @macro raise_fatal
|
117
117
|
# @return [void]
|
118
118
|
def line(value = '', opts = {}, &block)
|
119
119
|
requires_model!
|
@@ -148,7 +148,7 @@ module Vedeu
|
|
148
148
|
# @param opts [Hash]
|
149
149
|
# @option opts ... [void]
|
150
150
|
# @param block [Proc]
|
151
|
-
# @
|
151
|
+
# @macro raise_fatal
|
152
152
|
# @return [void]
|
153
153
|
def stream(value = '', opts = {}, &block)
|
154
154
|
requires_model!
|
@@ -241,7 +241,7 @@ module Vedeu
|
|
241
241
|
# @option opts :pad [String] The character to use to pad the
|
242
242
|
# width, by default uses an empty space (0x20). Only when the
|
243
243
|
# string is shorter than the specified width.
|
244
|
-
# @
|
244
|
+
# @macro raise_fatal
|
245
245
|
# @return [void]
|
246
246
|
def text(value = '', opts = {})
|
247
247
|
requires_model!
|
@@ -302,8 +302,7 @@ module Vedeu
|
|
302
302
|
fail Vedeu::Error::RequiresBlock unless block_given?
|
303
303
|
end
|
304
304
|
|
305
|
-
# @
|
306
|
-
# determined.
|
305
|
+
# @macro raise_fatal
|
307
306
|
# @return [NilClass]
|
308
307
|
def requires_model!
|
309
308
|
fail Vedeu::Error::Fatal,
|
data/lib/vedeu/dsl/geometry.rb
CHANGED
@@ -10,9 +10,7 @@ module Vedeu
|
|
10
10
|
#
|
11
11
|
module Geometry
|
12
12
|
|
13
|
-
#
|
14
|
-
# methods within this module are included as class methods on
|
15
|
-
# that class.
|
13
|
+
# Provide additional behaviour as class methods.
|
16
14
|
#
|
17
15
|
module ClassMethods
|
18
16
|
|
@@ -44,9 +42,7 @@ module Vedeu
|
|
44
42
|
|
45
43
|
end # ClassMethods
|
46
44
|
|
47
|
-
#
|
48
|
-
# methods within this module are included as instance methods on
|
49
|
-
# that class.
|
45
|
+
# Provide additional behaviour as instance methods.
|
50
46
|
#
|
51
47
|
module InstanceMethods
|
52
48
|
|
@@ -70,12 +66,7 @@ module Vedeu
|
|
70
66
|
|
71
67
|
end # InstanceMethods
|
72
68
|
|
73
|
-
#
|
74
|
-
# as class methods and InstanceMethods as instance methods for
|
75
|
-
# the given class.
|
76
|
-
#
|
77
|
-
# @param klass [Class]
|
78
|
-
# @return [void]
|
69
|
+
# @macro included_module
|
79
70
|
def self.included(klass)
|
80
71
|
klass.extend(Vedeu::DSL::Geometry::ClassMethods)
|
81
72
|
klass.include(Vedeu::DSL::Geometry::InstanceMethods)
|
data/lib/vedeu/editor/cropper.rb
CHANGED
@@ -45,8 +45,9 @@ module Vedeu
|
|
45
45
|
|
46
46
|
visible.each_with_index do |line, iy|
|
47
47
|
line.chars.each_with_index do |char, ix|
|
48
|
+
position = Vedeu::Geometries::Position.new((by + iy), (bx + ix))
|
48
49
|
out << Vedeu::Cells::Char.new(name: name,
|
49
|
-
position:
|
50
|
+
position: position,
|
50
51
|
value: char)
|
51
52
|
end
|
52
53
|
end
|
data/lib/vedeu/error.rb
CHANGED
@@ -37,6 +37,10 @@ module Vedeu
|
|
37
37
|
# given or cannot be found is to use the name of the currently
|
38
38
|
# focussed interface.
|
39
39
|
#
|
40
|
+
# @!macro [new] raise_fatal
|
41
|
+
# @raise [Vedeu::Error::Fatal] When Vedeu does not understand
|
42
|
+
# that which the client application is attempting to achieve.
|
43
|
+
#
|
40
44
|
class Fatal < StandardError
|
41
45
|
|
42
46
|
end # Fatal
|
@@ -21,34 +21,21 @@ module Vedeu
|
|
21
21
|
attr_reader :x
|
22
22
|
alias last x
|
23
23
|
|
24
|
-
|
25
|
-
#
|
26
|
-
# @param (see #initialize)
|
27
|
-
def self.[](y = 1, x = 1)
|
28
|
-
new(y, x)
|
29
|
-
end
|
30
|
-
|
31
|
-
# @param value [Array<Fixnum>|Fixnum|Hash|
|
32
|
-
# Vedeu::Geometries::Position]
|
33
|
-
# @return [Vedeu::Geometries::Position]
|
34
|
-
def self.coerce(value)
|
35
|
-
if value.is_a?(self)
|
36
|
-
value
|
24
|
+
class << self
|
37
25
|
|
38
|
-
|
39
|
-
new(*value)
|
26
|
+
extend Forwardable
|
40
27
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
elsif value.is_a?(Hash)
|
45
|
-
new(value.fetch(:y, 1), value.fetch(:x, 1))
|
46
|
-
|
47
|
-
elsif value.is_a?(NilClass)
|
48
|
-
nil
|
28
|
+
def_delegators Vedeu::Coercers::Position,
|
29
|
+
:coerce
|
49
30
|
|
31
|
+
# Convenience constructor for Vedeu::Geometries::Position.
|
32
|
+
#
|
33
|
+
# @param (see #initialize)
|
34
|
+
def [](y = 1, x = 1)
|
35
|
+
new(y, x)
|
50
36
|
end
|
51
|
-
|
37
|
+
|
38
|
+
end # Eigenclass
|
52
39
|
|
53
40
|
# Initializes a new instance of Vedeu::Geometries::Position.
|
54
41
|
#
|
@@ -67,10 +54,10 @@ module Vedeu
|
|
67
54
|
#
|
68
55
|
# @return [Array<Fixnum>]
|
69
56
|
def as_indices
|
70
|
-
|
71
|
-
|
57
|
+
ix = Vedeu::Point.coerce(value: (x - 1), min: 0).value
|
58
|
+
iy = Vedeu::Point.coerce(value: (y - 1), min: 0).value
|
72
59
|
|
73
|
-
[
|
60
|
+
[iy, ix]
|
74
61
|
end
|
75
62
|
|
76
63
|
# @param other [Vedeu::Geometries::Position]
|
data/lib/vedeu/input/mouse.rb
CHANGED
@@ -65,21 +65,30 @@ module Vedeu
|
|
65
65
|
mouse[0]
|
66
66
|
end
|
67
67
|
|
68
|
-
#
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
|
68
|
+
# Returns a boolean indicating the mouse interaction was
|
69
|
+
# recognised as a left click.
|
70
|
+
#
|
73
71
|
# @return [Boolean]
|
74
72
|
def left_click?
|
75
73
|
button == 0
|
76
74
|
end
|
77
75
|
|
76
|
+
# @return [Array<Fixnum>]
|
77
|
+
def mouse
|
78
|
+
@_input ||= input.chars[3..-1].map { |character| character.ord - 32 }
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns a boolean indicating the mouse interaction was
|
82
|
+
# recognised as the scroll wheel moving up.
|
83
|
+
#
|
78
84
|
# @return [Boolean]
|
79
85
|
def wheel_up?
|
80
86
|
button == 64
|
81
87
|
end
|
82
88
|
|
89
|
+
# Returns a boolean indicating the mouse interaction was
|
90
|
+
# recognised as the scroll wheel moving down.
|
91
|
+
#
|
83
92
|
# @return [Boolean]
|
84
93
|
def wheel_down?
|
85
94
|
button == 65
|
data/lib/vedeu/input/read.rb
CHANGED
@@ -25,7 +25,7 @@ module Vedeu
|
|
25
25
|
#
|
26
26
|
# @param input [NilClass|String]
|
27
27
|
# @param options [Hash<Symbol => Symbol]
|
28
|
-
# @option mode [Symbol] Either :cooked (default) or :
|
28
|
+
# @option mode [Symbol] Either :cooked (default), :raw or :fake.
|
29
29
|
# @return [Vedeu::Input::Read]
|
30
30
|
def initialize(input = nil, options = {})
|
31
31
|
@input = input
|
@@ -78,16 +78,6 @@ module Vedeu
|
|
78
78
|
mode == :fake
|
79
79
|
end
|
80
80
|
|
81
|
-
# @return [String]
|
82
|
-
def mouse_off
|
83
|
-
Vedeu.esc.mouse_x10_off
|
84
|
-
end
|
85
|
-
|
86
|
-
# @return [String]
|
87
|
-
def show_cursor
|
88
|
-
Vedeu.esc.show_cursor
|
89
|
-
end
|
90
|
-
|
91
81
|
# @return [String]
|
92
82
|
def input
|
93
83
|
@_input ||= if input?
|
@@ -162,9 +162,10 @@ module Vedeu
|
|
162
162
|
Vedeu.timer("Clearing #{clearing}: '#{name}'") do
|
163
163
|
@clear ||= Array.new(height) do |iy|
|
164
164
|
Array.new(width) do |ix|
|
165
|
+
position = Vedeu::Geometries::Position.new((y + iy), (x + ix))
|
165
166
|
Vedeu::Cells::Clear.new(colour: colour,
|
166
167
|
name: name,
|
167
|
-
position:
|
168
|
+
position: position)
|
168
169
|
end
|
169
170
|
end
|
170
171
|
end
|
data/lib/vedeu/logging/log.rb
CHANGED
data/lib/vedeu/models/page.rb
CHANGED
@@ -14,32 +14,14 @@ module Vedeu
|
|
14
14
|
# @return [Array<NilClass|Vedeu::Models::Row>]
|
15
15
|
attr_reader :rows
|
16
16
|
|
17
|
-
|
18
|
-
# [Vedeu::Models::Page|Vedeu::Models::Row|Array<void>|void]
|
19
|
-
# @macro raise_invalid_syntax
|
20
|
-
# @return [Vedeu::Models::Page]
|
21
|
-
def self.coerce(value)
|
22
|
-
if value.is_a?(Vedeu::Models::Page)
|
23
|
-
value
|
24
|
-
|
25
|
-
elsif value.is_a?(Vedeu::Models::Row)
|
26
|
-
Vedeu::Models::Page.new([value])
|
27
|
-
|
28
|
-
elsif value.is_a?(Array) && value.empty?
|
29
|
-
Vedeu::Models::Page.new([Vedeu::Models::Row.coerce(value)])
|
17
|
+
class << self
|
30
18
|
|
31
|
-
|
32
|
-
values = value.map { |v| Vedeu::Models::Row.coerce(v) }
|
19
|
+
extend Forwardable
|
33
20
|
|
34
|
-
|
21
|
+
def_delegators Vedeu::Coercers::Page,
|
22
|
+
:coerce
|
35
23
|
|
36
|
-
|
37
|
-
fail Vedeu::Error::InvalidSyntax,
|
38
|
-
'Cannot coerce as value is not an Array, Vedeu::Models::Page ' \
|
39
|
-
"or Vedeu::Models::Row. Is a '#{value.class.name}'."
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
24
|
+
end # Eigenclass
|
43
25
|
|
44
26
|
# Returns a new instance of Vedeu::Models::Page.
|
45
27
|
#
|
data/lib/vedeu/models/row.rb
CHANGED
@@ -15,23 +15,14 @@ module Vedeu
|
|
15
15
|
# @return [Array<NilClass|void>]
|
16
16
|
attr_reader :cells
|
17
17
|
|
18
|
-
|
19
|
-
# @return [Vedeu::Models::Row]
|
20
|
-
def self.coerce(value)
|
21
|
-
if value.is_a?(self)
|
22
|
-
value
|
23
|
-
|
24
|
-
elsif value.is_a?(Array)
|
25
|
-
new(value.compact)
|
18
|
+
class << self
|
26
19
|
|
27
|
-
|
28
|
-
new
|
20
|
+
extend Forwardable
|
29
21
|
|
30
|
-
|
31
|
-
|
22
|
+
def_delegators Vedeu::Coercers::Row,
|
23
|
+
:coerce
|
32
24
|
|
33
|
-
|
34
|
-
end
|
25
|
+
end # Eigenclass
|
35
26
|
|
36
27
|
# Returns a new instance of Vedeu::Models::Row.
|
37
28
|
#
|
@@ -43,8 +43,7 @@ module Vedeu
|
|
43
43
|
show
|
44
44
|
end
|
45
45
|
|
46
|
-
# Provide
|
47
|
-
# changed.
|
46
|
+
# Provide additional behaviour as class methods.
|
48
47
|
#
|
49
48
|
module ClassMethods
|
50
49
|
|
@@ -146,11 +145,7 @@ module Vedeu
|
|
146
145
|
|
147
146
|
end # ClassMethods
|
148
147
|
|
149
|
-
#
|
150
|
-
# class methods for the class.
|
151
|
-
#
|
152
|
-
# @param klass [Class]
|
153
|
-
# @return [void]
|
148
|
+
# @macro included_module
|
154
149
|
def self.included(klass)
|
155
150
|
klass.extend(Vedeu::Toggleable::ClassMethods)
|
156
151
|
end
|
data/lib/vedeu/plugins/plugin.rb
CHANGED
@@ -19,26 +19,10 @@ module Vedeu
|
|
19
19
|
|
20
20
|
class << self
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
#
|
27
|
-
# @param value [Object|NilClass]
|
28
|
-
# @return [Object]
|
29
|
-
def coerce(value)
|
30
|
-
return value if value.is_a?(Vedeu::Presentation::Style)
|
31
|
-
return new(value) unless value.is_a?(Hash)
|
32
|
-
return new unless present?(value[:style])
|
33
|
-
|
34
|
-
if value[:style].is_a?(Vedeu::Presentation::Style)
|
35
|
-
value[:style]
|
36
|
-
|
37
|
-
else
|
38
|
-
new(value[:style])
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
22
|
+
extend Forwardable
|
23
|
+
|
24
|
+
def_delegators Vedeu::Coercers::Style,
|
25
|
+
:coerce
|
42
26
|
|
43
27
|
end # Eigenclass
|
44
28
|
|