striuct 0.1.7 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +43 -1
- data/LICENSE +22 -0
- data/Manifest.txt +21 -17
- data/{README.ja.rdoc → README.ja.old.rdoc} +11 -16
- data/README.rdoc +36 -250
- data/Rakefile +2 -2
- data/example/example.old.rdoc +188 -0
- data/example/example.rb +11 -219
- data/example/example1.rb +234 -0
- data/example/example2.rb +22 -0
- data/lib/striuct/abstract.rb +7 -7
- data/lib/striuct/conditions.rb +110 -69
- data/lib/striuct/{subclassable → containable}/basic.rb +9 -9
- data/lib/striuct/containable/classutil.rb +22 -0
- data/lib/striuct/{subclassable → containable}/eigen/basic.rb +9 -1
- data/lib/striuct/{subclassable → containable}/eigen/constructor.rb +1 -1
- data/lib/striuct/{subclassable → containable}/eigen/handy.rb +38 -5
- data/lib/striuct/{subclassable → containable}/eigen/inner.rb +22 -28
- data/lib/striuct/{subclassable → containable}/eigen/macro.rb +34 -25
- data/lib/striuct/{subclassable → containable}/eigen/safety.rb +15 -19
- data/lib/striuct/{subclassable/eigen/frame.rb → containable/eigen.rb} +10 -14
- data/lib/striuct/containable/handy.rb +91 -0
- data/lib/striuct/{subclassable → containable}/hashlike.rb +1 -1
- data/lib/striuct/{subclassable → containable}/inner.rb +23 -11
- data/lib/striuct/{subclassable → containable}/safety.rb +24 -5
- data/lib/striuct/{subclassable → containable}/yaml.rb +1 -1
- data/lib/striuct/containable.rb +39 -0
- data/lib/striuct/flavors.rb +83 -0
- data/lib/striuct/version.rb +2 -2
- data/lib/striuct.rb +13 -2
- data/test/test_striuct.rb +194 -17
- metadata +43 -35
- data/lib/striuct/frame.rb +0 -8
- data/lib/striuct/subclassable/classutil.rb +0 -26
- data/lib/striuct/subclassable/frame.rb +0 -33
- data/lib/striuct/subclassable/handy.rb +0 -57
data/lib/striuct/conditions.rb
CHANGED
@@ -1,51 +1,54 @@
|
|
1
1
|
class Striuct
|
2
2
|
|
3
|
-
# Useful
|
3
|
+
# Condition Builders and Useful Conditions
|
4
|
+
#
|
5
|
+
# Any conditions need #pass?(arg, condition) method
|
6
|
+
# @author Kenichi Kamiya
|
7
|
+
# @example overview
|
8
|
+
# class Person < Striuct
|
9
|
+
# member :name, OR(String, Symbol, CAN(:to_str))
|
10
|
+
# member :friends, GENERICS(AND(Person, NOT(->v{equal? v})))
|
4
11
|
module Conditions
|
12
|
+
ANYTHING = Object.new.freeze
|
13
|
+
BOOLEAN = ->v{[true, false].any?{|bool|bool.equal? v}}
|
14
|
+
|
5
15
|
module_function
|
6
|
-
|
7
|
-
#
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
condition.arity == 1
|
12
|
-
else
|
13
|
-
condition.respond_to? :===
|
14
|
-
end
|
16
|
+
|
17
|
+
# The getter for a special condition.
|
18
|
+
# @return [ANYTHING] A condition always pass with any objects.
|
19
|
+
def ANYTHING?
|
20
|
+
ANYTHING
|
15
21
|
end
|
16
22
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
def pass?(value, condition, context)
|
21
|
-
if context && ! context.instance_of?(self)
|
22
|
-
raise ArgumentError,
|
23
|
-
"to change context is allowed in instance of #{self}"
|
24
|
-
end
|
23
|
+
alias_method :ANYTHING, :ANYTHING?
|
24
|
+
alias_method :anything, :ANYTHING?
|
25
|
+
module_function :anything, :ANYTHING
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
condition.call value
|
27
|
+
# true if object is sufficient for condition.
|
28
|
+
# @param [Object] object
|
29
|
+
def conditionable?(object)
|
30
|
+
case object
|
31
|
+
when ANYTHING
|
32
|
+
true
|
33
|
+
when Proc, Method
|
34
|
+
object.arity == 1
|
35
35
|
else
|
36
|
-
|
37
|
-
end
|
36
|
+
object.respond_to? :===
|
37
|
+
end
|
38
38
|
end
|
39
|
-
|
40
|
-
#
|
39
|
+
|
40
|
+
# A condition builder.
|
41
|
+
# @return [lambda] A condition invert the original condition.
|
41
42
|
def NOT(condition)
|
42
43
|
unless conditionable? condition
|
43
44
|
raise TypeError, 'wrong object for condition'
|
44
45
|
end
|
45
46
|
|
46
|
-
->v{!
|
47
|
+
->v{! pass?(v, condition)}
|
47
48
|
end
|
48
49
|
|
50
|
+
# A innner method for some condition builders.
|
51
|
+
# For build conditions AND, NAND, OR, NOR, XOR, XNOR.
|
49
52
|
# @return [lambda]
|
50
53
|
def _logical_operator(delegated, *conditions)
|
51
54
|
unless conditions.all?{|c|conditionable? c}
|
@@ -54,37 +57,38 @@ class Striuct
|
|
54
57
|
|
55
58
|
->v{
|
56
59
|
conditions.__send__(delegated) {|condition|
|
57
|
-
|
60
|
+
pass? v, condition
|
58
61
|
}
|
59
62
|
}
|
60
63
|
end
|
61
64
|
|
62
|
-
#
|
65
|
+
# A condition builder.
|
66
|
+
# @return [lambda]
|
67
|
+
# this lambda return true if match all conditions
|
63
68
|
def AND(cond1, cond2, *conds)
|
64
69
|
_logical_operator :all?, cond1, cond2, *conds
|
65
70
|
end
|
66
|
-
|
67
|
-
alias_method :ALL, :AND
|
68
|
-
module_function :ALL
|
69
71
|
|
72
|
+
# A condition builder.
|
70
73
|
# @return [lambda]
|
71
74
|
def NAND(cond1, cond2, *conds)
|
72
|
-
|
75
|
+
NOT AND(cond1, cond2, *conds)
|
73
76
|
end
|
74
77
|
|
75
|
-
#
|
78
|
+
# A condition builder.
|
79
|
+
# @return [lambda]
|
80
|
+
# this lambda return true if match a any condition
|
76
81
|
def OR(cond1, cond2, *conds)
|
77
82
|
_logical_operator :any?, cond1, cond2, *conds
|
78
83
|
end
|
79
84
|
|
80
|
-
|
81
|
-
module_function :ANY
|
82
|
-
|
85
|
+
# A condition builder.
|
83
86
|
# @return [lambda]
|
84
87
|
def NOR(cond1, cond2, *conds)
|
85
|
-
|
88
|
+
NOT OR(cond1, cond2, *conds)
|
86
89
|
end
|
87
90
|
|
91
|
+
# A condition builder.
|
88
92
|
# @return [lambda]
|
89
93
|
def XOR(cond1, cond2, *conds)
|
90
94
|
_logical_operator :one?, cond1, cond2, *conds
|
@@ -93,30 +97,40 @@ class Striuct
|
|
93
97
|
alias_method :ONE, :XOR
|
94
98
|
module_function :ONE
|
95
99
|
|
100
|
+
# A condition builder.
|
96
101
|
# @return [lambda]
|
97
102
|
def XNOR(cond1, cond2, *conds)
|
98
|
-
|
103
|
+
NOT XOR(cond1, cond2, *conds)
|
99
104
|
end
|
100
105
|
|
101
|
-
#
|
106
|
+
# A condition builder.
|
107
|
+
# @return [lambda]
|
108
|
+
# this lambda return true if a argment match under #== method
|
102
109
|
def EQUAL(obj)
|
103
110
|
->v{obj == v}
|
104
111
|
end
|
105
|
-
|
106
|
-
#
|
112
|
+
|
113
|
+
# A condition builder.
|
114
|
+
# @return [lambda]
|
115
|
+
# this lambda return true if a argment match under #equal? method
|
107
116
|
def SAME(obj)
|
108
117
|
->v{obj.equal? v}
|
109
118
|
end
|
110
119
|
|
111
|
-
#
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
120
|
+
# A condition builder.
|
121
|
+
# @param [Symbol, String] messages
|
122
|
+
# @return [lambda]
|
123
|
+
# this lambda return true if a argment respond to all messages
|
124
|
+
def RESPONSIBLE(message1, *messages)
|
125
|
+
messages = [message1, *messages]
|
126
|
+
unless messages.all?{|s|
|
127
|
+
[Symbol, String].any?{|klass|s.kind_of? klass}
|
128
|
+
}
|
129
|
+
raise TypeError, 'only Symbol or String for message'
|
116
130
|
end
|
117
131
|
|
118
132
|
->v{
|
119
|
-
|
133
|
+
messages.all?{|message|v.respond_to? message}
|
120
134
|
}
|
121
135
|
end
|
122
136
|
|
@@ -124,8 +138,11 @@ class Striuct
|
|
124
138
|
alias_method :RESPOND_TO, :RESPONSIBLE
|
125
139
|
alias_method :responsible, :RESPONSIBLE
|
126
140
|
module_function :CAN, :responsible, :RESPOND_TO
|
127
|
-
|
128
|
-
#
|
141
|
+
|
142
|
+
# A condition builder.
|
143
|
+
# @return [lambda]
|
144
|
+
# this lambda return true
|
145
|
+
# if face no exception when a argment checking under all conditions
|
129
146
|
def NO_RAISES(condition1, *conditions)
|
130
147
|
conditions = [condition1, *conditions]
|
131
148
|
unless conditions.all?{|c|conditionable? c}
|
@@ -135,7 +152,7 @@ class Striuct
|
|
135
152
|
->v{
|
136
153
|
conditions.all?{|condition|
|
137
154
|
begin
|
138
|
-
|
155
|
+
pass? v, condition
|
139
156
|
rescue Exception
|
140
157
|
false
|
141
158
|
else
|
@@ -147,15 +164,18 @@ class Striuct
|
|
147
164
|
|
148
165
|
alias_method :STILL, :NO_RAISES
|
149
166
|
module_function :STILL
|
150
|
-
|
151
|
-
#
|
167
|
+
|
168
|
+
# A condition builder.
|
169
|
+
# @return [lambda]
|
170
|
+
# this lambda return true
|
171
|
+
# if catch a kindly exception when a argment checking in a block parameter
|
152
172
|
def CATCH(exception=Exception, &condition)
|
153
173
|
raise ArgumentError unless conditionable? condition
|
154
174
|
raise TypeError unless exception.ancestors.include? Exception
|
155
175
|
|
156
176
|
->v{
|
157
177
|
begin
|
158
|
-
|
178
|
+
pass? v, condition
|
159
179
|
rescue exception
|
160
180
|
true
|
161
181
|
rescue Exception
|
@@ -169,7 +189,10 @@ class Striuct
|
|
169
189
|
alias_method :RESCUE, :CATCH
|
170
190
|
module_function :RESCUE
|
171
191
|
|
172
|
-
#
|
192
|
+
# A condition builder.
|
193
|
+
# @return [lambda]
|
194
|
+
# this lambda return true
|
195
|
+
# if all included objects match all conditions
|
173
196
|
def GENERICS(condition1, *conditions)
|
174
197
|
conditions = [condition1, *conditions]
|
175
198
|
unless conditions.all?{|c|conditionable? c}
|
@@ -177,9 +200,16 @@ class Striuct
|
|
177
200
|
end
|
178
201
|
|
179
202
|
->list{
|
203
|
+
enum = (
|
204
|
+
(list.respond_to?(:each_value) && list.each_value) or
|
205
|
+
(list.respond_to?(:all?) && list) or
|
206
|
+
(list.respond_to?(:each) && list.each) or
|
207
|
+
return false
|
208
|
+
)
|
209
|
+
|
180
210
|
conditions.all?{|condition|
|
181
|
-
|
182
|
-
|
211
|
+
enum.all?{|v|
|
212
|
+
pass? v, condition
|
183
213
|
}
|
184
214
|
}
|
185
215
|
}
|
@@ -187,8 +217,11 @@ class Striuct
|
|
187
217
|
|
188
218
|
alias_method :generics, :GENERICS
|
189
219
|
module_function :generics
|
190
|
-
|
220
|
+
|
221
|
+
# A condition builder.
|
191
222
|
# @return [lambda]
|
223
|
+
# this lambda return true
|
224
|
+
# if all lists including the object
|
192
225
|
def MEMBER_OF(list1, *lists)
|
193
226
|
lists = [list1, *lists]
|
194
227
|
unless lists.all?{|l|l.respond_to? :all?}
|
@@ -202,24 +235,32 @@ class Striuct
|
|
202
235
|
|
203
236
|
alias_method :member_of, :MEMBER_OF
|
204
237
|
module_function :member_of
|
205
|
-
|
206
|
-
BOOLEAN = OR(SAME(true), SAME(false))
|
207
238
|
|
239
|
+
# A getter for a useful condition.
|
208
240
|
# @return [BOOLEAN] "true or false"
|
209
|
-
def
|
241
|
+
def BOOLEAN?
|
210
242
|
BOOLEAN
|
211
243
|
end
|
212
244
|
|
213
|
-
alias_method :
|
214
|
-
|
245
|
+
alias_method :boolean, :BOOLEAN?
|
246
|
+
alias_method :bool, :BOOLEAN?
|
247
|
+
alias_method :BOOLEAN, :BOOLEAN?
|
248
|
+
alias_method :BOOL, :BOOLEAN?
|
249
|
+
alias_method :BOOL?, :BOOLEAN?
|
250
|
+
module_function :boolean, :bool, :BOOLEAN, :BOOL, :BOOL?
|
215
251
|
|
216
252
|
STRINGABLE = OR(String, Symbol, CAN(:to_str), CAN(:to_sym))
|
217
253
|
|
254
|
+
# A getter for a useful condition.
|
218
255
|
# @return [STRINGABLE] check "looks string family"
|
219
|
-
def
|
256
|
+
def STRINGABLE?
|
220
257
|
STRINGABLE
|
221
258
|
end
|
222
259
|
|
260
|
+
alias_method :stringable, :STRINGABLE?
|
261
|
+
alias_method :STRINGABLE, :STRINGABLE?
|
262
|
+
module_function :stringable, :STRINGABLE
|
263
|
+
|
223
264
|
class << self
|
224
265
|
private :_logical_operator
|
225
266
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module Containable
|
2
2
|
# @group Basic
|
3
3
|
|
4
4
|
def initialize(*values)
|
@@ -31,25 +31,25 @@ class Striuct; module Subclassable
|
|
31
31
|
|
32
32
|
# @return [String]
|
33
33
|
def inspect
|
34
|
-
"#<#{self.class} (
|
34
|
+
"#<#{self.class} (Striuct)".tap {|s|
|
35
35
|
each_pair do |name, value|
|
36
36
|
suffix = (has_default?(name) && default?(name)) ? '(default)' : nil
|
37
37
|
s << " #{name}=#{value.inspect}#{suffix}"
|
38
38
|
end
|
39
39
|
|
40
40
|
s << ">"
|
41
|
-
|
41
|
+
}
|
42
42
|
end
|
43
43
|
|
44
44
|
# @return [String]
|
45
45
|
def to_s
|
46
|
-
"#<struct #{self.class}".tap
|
46
|
+
"#<struct #{self.class}".tap {|s|
|
47
47
|
each_pair do |name, value|
|
48
48
|
s << " #{name}=#{value.inspect}"
|
49
49
|
end
|
50
50
|
|
51
51
|
s << '>'
|
52
|
-
|
52
|
+
}
|
53
53
|
end
|
54
54
|
|
55
55
|
# @param [Symbol, String, Fixnum] key
|
@@ -65,7 +65,7 @@ class Striuct; module Subclassable
|
|
65
65
|
__subscript__(key){|name|true_name = name; __set__ name, value}
|
66
66
|
rescue ConditionError
|
67
67
|
$@ = [
|
68
|
-
"#{$@[-1].sub(/[^:]+\z/){''}}in `[#{key}(#{true_name})]=': #{$!.message}",
|
68
|
+
"#{$@[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{true_name})]=': #{$!.message}",
|
69
69
|
$@[-1]
|
70
70
|
]
|
71
71
|
|
@@ -107,9 +107,9 @@ class Striuct; module Subclassable
|
|
107
107
|
|
108
108
|
# @param [Fixnum, Range] *keys
|
109
109
|
# @return [Array]
|
110
|
-
def values_at(*
|
110
|
+
def values_at(*_keys)
|
111
111
|
[].tap {|r|
|
112
|
-
|
112
|
+
_keys.each do |key|
|
113
113
|
case key
|
114
114
|
when Fixnum
|
115
115
|
r << self[key]
|
@@ -132,4 +132,4 @@ class Striuct; module Subclassable
|
|
132
132
|
end
|
133
133
|
|
134
134
|
# @endgroup
|
135
|
-
end; end
|
135
|
+
end; end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Striuct; module Containable
|
2
|
+
|
3
|
+
|
4
|
+
# @author Kenichi Kamiya
|
5
|
+
module ClassUtil
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def delegate_class_method(name)
|
10
|
+
define_method name do |*args, &block|
|
11
|
+
self.class.__send__ name, *args, &block
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def delegate_class_methods(name, *names)
|
16
|
+
[name, *names].each{|_name|delegate_class_method _name}
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
end; end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module Containable; module Eigen
|
2
2
|
# @group Basic
|
3
3
|
|
4
4
|
# @return [Array<Symbol>]
|
@@ -34,5 +34,13 @@ class Striuct; module Subclassable; module Eigen
|
|
34
34
|
super
|
35
35
|
end
|
36
36
|
|
37
|
+
def dup
|
38
|
+
r = super
|
39
|
+
@names, @flavors, @defaults, @aliases, @setter_validations, @getter_validations =
|
40
|
+
*[@names, @flavors, @defaults, @aliases, @setter_validations, @getter_validations].map(&:dup)
|
41
|
+
@conditions, @inferences = @conditions.dup, @inferences.dup
|
42
|
+
r
|
43
|
+
end
|
44
|
+
|
37
45
|
# @endgroup
|
38
46
|
end; end; end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module Containable; module Eigen
|
2
2
|
# @group Struct+ Handy
|
3
3
|
|
4
4
|
# @yield [name]
|
5
5
|
# @yieldparam [Symbol] name - sequential under defined
|
6
6
|
# @yieldreturn [self]
|
7
7
|
# @return [Enumerator]
|
8
|
-
def each_name
|
8
|
+
def each_name
|
9
9
|
return to_enum(__method__) unless block_given?
|
10
|
-
_names.each
|
10
|
+
_names.each{|name|yield name}
|
11
11
|
self
|
12
12
|
end
|
13
13
|
|
@@ -18,12 +18,26 @@ class Striuct; module Subclassable; module Eigen
|
|
18
18
|
# @yieldparam [Integer] Index
|
19
19
|
# @yieldreturn [self]
|
20
20
|
# @return [Enumerator]
|
21
|
-
def each_index
|
21
|
+
def each_index
|
22
22
|
return to_enum(__method__) unless block_given?
|
23
|
-
_names.each_index
|
23
|
+
_names.each_index{|index|yield index}
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
# @yield [name, index]
|
28
|
+
# @yieldparam [Symbol] name
|
29
|
+
# @yieldparam [Integer] index
|
30
|
+
# @yieldreturn [self]
|
31
|
+
# @return [Enumerator]
|
32
|
+
def each_name_with_index
|
33
|
+
return to_enum(__method__) unless block_given?
|
34
|
+
_names.each_with_index{|name, index|yield name, index}
|
24
35
|
self
|
25
36
|
end
|
26
37
|
|
38
|
+
alias_method :each_member_with_index, :each_name_with_index
|
39
|
+
alias_method :each_key_with_index, :each_name_with_index
|
40
|
+
|
27
41
|
# @param [Symbol, String] name
|
28
42
|
def original?(name)
|
29
43
|
if member? name
|
@@ -87,6 +101,25 @@ class Striuct; module Subclassable; module Eigen
|
|
87
101
|
raise "#{name} has no default value"
|
88
102
|
end
|
89
103
|
end
|
104
|
+
|
105
|
+
# @return [Class]
|
106
|
+
def to_struct_class
|
107
|
+
raise 'No defined members' if names.empty?
|
108
|
+
|
109
|
+
struct_klass = Struct.new(*names)
|
110
|
+
|
111
|
+
if name
|
112
|
+
tail_name = name.slice(/[^:]+\z/)
|
113
|
+
if ::Striuct::Structs.const_defined?(tail_name) &&
|
114
|
+
((already = ::Striuct::Structs.const_get(tail_name)).members == members)
|
115
|
+
already
|
116
|
+
else
|
117
|
+
::Striuct::Structs.const_set tail_name, struct_klass
|
118
|
+
end
|
119
|
+
else
|
120
|
+
struct_klass
|
121
|
+
end
|
122
|
+
end
|
90
123
|
|
91
124
|
# @endgroup
|
92
125
|
end; end; end
|
@@ -1,14 +1,6 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module Containable; module Eigen
|
2
2
|
# @group Use Only Inner
|
3
3
|
|
4
|
-
def dup
|
5
|
-
r = super
|
6
|
-
@names, @flavors, @defaults, @aliases =
|
7
|
-
*[@names, @flavors, @defaults, @aliases].map(&:dup)
|
8
|
-
@conditions, @inferences = @conditions.dup, @inferences.dup
|
9
|
-
r
|
10
|
-
end
|
11
|
-
|
12
4
|
private
|
13
5
|
|
14
6
|
def _names
|
@@ -31,6 +23,14 @@ class Striuct; module Subclassable; module Eigen
|
|
31
23
|
@inferences.delete name
|
32
24
|
end
|
33
25
|
|
26
|
+
def _mark_setter_validation(name)
|
27
|
+
@setter_validations[name] = true
|
28
|
+
end
|
29
|
+
|
30
|
+
def _mark_getter_validation(name)
|
31
|
+
@getter_validations[name] = true
|
32
|
+
end
|
33
|
+
|
34
34
|
def _mark_inference(name)
|
35
35
|
@inferences[name] = true
|
36
36
|
end
|
@@ -39,8 +39,8 @@ class Striuct; module Subclassable; module Eigen
|
|
39
39
|
@flavors[name] = flavor
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
43
|
-
@conditions[name] =
|
42
|
+
def _set_condition(name, condition)
|
43
|
+
@conditions[name] = condition
|
44
44
|
end
|
45
45
|
|
46
46
|
def _set_default_value(name, value)
|
@@ -144,8 +144,8 @@ class Striuct; module Subclassable; module Eigen
|
|
144
144
|
nil
|
145
145
|
end
|
146
146
|
|
147
|
-
def __setter__!(name,
|
148
|
-
|
147
|
+
def __setter__!(name, condition, &flavor)
|
148
|
+
__set_condition__! name, condition unless ANYTHING.equal? condition
|
149
149
|
__set_flavor__! name, &flavor if block_given?
|
150
150
|
|
151
151
|
define_method "#{name}=" do |value|
|
@@ -156,17 +156,11 @@ class Striuct; module Subclassable; module Eigen
|
|
156
156
|
|
157
157
|
end
|
158
158
|
|
159
|
-
def
|
160
|
-
if
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
unless conditions.empty?
|
165
|
-
if conditions.all?{|c|conditionable? c}
|
166
|
-
_set_conditions name, conditions
|
167
|
-
else
|
168
|
-
raise TypeError, 'wrong object for condition'
|
169
|
-
end
|
159
|
+
def __set_condition__!(name, condition)
|
160
|
+
if conditionable? condition
|
161
|
+
_set_condition name, condition
|
162
|
+
else
|
163
|
+
raise TypeError, 'wrong object for condition'
|
170
164
|
end
|
171
165
|
|
172
166
|
nil
|
@@ -192,19 +186,19 @@ class Striuct; module Subclassable; module Eigen
|
|
192
186
|
|
193
187
|
raise ArgumentError unless conditionable? family
|
194
188
|
|
195
|
-
|
189
|
+
_set_condition name, family
|
196
190
|
_remove_inference name
|
197
191
|
|
198
192
|
nil
|
199
193
|
end
|
200
194
|
|
201
|
-
def
|
195
|
+
def _condition_for(name)
|
202
196
|
@conditions[name]
|
203
197
|
end
|
204
198
|
|
205
199
|
# @param [Symbol, String] name
|
206
|
-
def
|
207
|
-
|
200
|
+
def condition_for(name)
|
201
|
+
_condition_for originalkey_for(keyable_for name)
|
208
202
|
end
|
209
203
|
|
210
204
|
def _flavor_for(name)
|