striuct 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +35 -34
- data/.travis.yml +6 -6
- data/Gemfile +12 -12
- data/History.rdoc +279 -273
- data/LICENSE +21 -21
- data/Manifest.txt +91 -90
- data/README.ja.old.rdoc +297 -297
- data/README.md +128 -128
- data/Rakefile +11 -11
- data/benchmark/basics.rb +56 -56
- data/example/README.rb +44 -44
- data/example/example.old.rdoc +187 -187
- data/example/example1.rb +233 -233
- data/example/example2.rb +22 -22
- data/example/see_trace.rb +32 -32
- data/lib/striuct/classmethods/README.md +5 -5
- data/lib/striuct/classmethods/adjustment.rb +32 -32
- data/lib/striuct/classmethods/constructor.rb +63 -63
- data/lib/striuct/classmethods/default.rb +27 -27
- data/lib/striuct/classmethods/enum.rb +48 -48
- data/lib/striuct/classmethods/inner.rb +91 -91
- data/lib/striuct/classmethods/length.rb +14 -14
- data/lib/striuct/classmethods/macro.rb +144 -144
- data/lib/striuct/classmethods/named.rb +113 -113
- data/lib/striuct/classmethods/object.rb +54 -54
- data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
- data/lib/striuct/classmethods/requiremnets.rb +11 -11
- data/lib/striuct/classmethods/to_struct.rb +23 -25
- data/lib/striuct/classmethods/validation.rb +55 -55
- data/lib/striuct/classmethods.rb +1 -1
- data/lib/striuct/instancemethods/README.md +5 -5
- data/lib/striuct/instancemethods/assign.rb +30 -30
- data/lib/striuct/instancemethods/cast.rb +34 -34
- data/lib/striuct/instancemethods/compare.rb +30 -30
- data/lib/striuct/instancemethods/default.rb +13 -13
- data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
- data/lib/striuct/instancemethods/enum.rb +103 -103
- data/lib/striuct/instancemethods/hashy.rb +121 -121
- data/lib/striuct/instancemethods/inner.rb +60 -60
- data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
- data/lib/striuct/instancemethods/lock.rb +61 -61
- data/lib/striuct/instancemethods/object.rb +52 -52
- data/lib/striuct/instancemethods/requirements.rb +14 -14
- data/lib/striuct/instancemethods/safety.rb +11 -11
- data/lib/striuct/instancemethods/subscript.rb +55 -55
- data/lib/striuct/instancemethods/validation.rb +29 -25
- data/lib/striuct/instancemethods/values.rb +57 -57
- data/lib/striuct/instancemethods.rb +1 -1
- data/lib/striuct/requirements.rb +5 -5
- data/lib/striuct/singleton_class.rb +66 -66
- data/lib/striuct/specificcontainer.rb +19 -19
- data/lib/striuct/structs.rb +7 -7
- data/lib/striuct/version.rb +5 -5
- data/lib/striuct.rb +13 -13
- data/striuct.gemspec +24 -24
- data/test/helper.rb +5 -5
- data/test/test_striuct-singleton_class-define.rb +19 -19
- data/test/test_striuct-subclass-class-cloning.rb +20 -20
- data/test/test_striuct-subclass-class-close.rb +36 -36
- data/test/test_striuct-subclass-class-constructor.rb +82 -82
- data/test/test_striuct-subclass-class-freeze.rb +36 -36
- data/test/test_striuct-subclass-class-inheritable.rb +57 -57
- data/test/test_striuct-subclass-class-macro.rb +13 -13
- data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
- data/test/test_striuct-subclass-class-validation.rb +26 -26
- data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
- data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
- data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
- data/test/test_striuct-subclass-instance-accessor.rb +137 -137
- data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
- data/test/test_striuct-subclass-instance-assign.rb +30 -30
- data/test/test_striuct-subclass-instance-basic.rb +32 -32
- data/test/test_striuct-subclass-instance-cloning.rb +22 -22
- data/test/test_striuct-subclass-instance-compare.rb +51 -51
- data/test/test_striuct-subclass-instance-default_value.rb +128 -128
- data/test/test_striuct-subclass-instance-enum.rb +92 -92
- data/test/test_striuct-subclass-instance-freeze.rb +19 -19
- data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
- data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
- data/test/test_striuct-subclass-instance-lock.rb +39 -39
- data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
- data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
- data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
- data/test/test_striuct-subclass-instance_names.rb +18 -18
- data/test/test_striuct-version.rb +10 -10
- metadata +4 -2
@@ -1,104 +1,104 @@
|
|
1
|
-
class Striuct; module InstanceMethods
|
2
|
-
|
3
|
-
# @group Enumerative
|
4
|
-
|
5
|
-
# @yield [autonym]
|
6
|
-
# @yieldparam [Symbol] autonym - sequential under defined
|
7
|
-
# @yieldreturn [self]
|
8
|
-
# @return [Enumerator]
|
9
|
-
def each_autonym(&block)
|
10
|
-
return to_enum(__callee__) unless block_given?
|
11
|
-
|
12
|
-
self.class.each_autonym(&block)
|
13
|
-
self
|
14
|
-
end
|
15
|
-
|
16
|
-
alias_method :each_name, :each_autonym
|
17
|
-
alias_method :each_member, :each_autonym
|
18
|
-
alias_method :each_key, :each_autonym
|
19
|
-
|
20
|
-
# @yield [value]
|
21
|
-
# @yieldparam [Object] value - sequential under defined
|
22
|
-
# @see #each_autonym
|
23
|
-
# @yieldreturn [self]
|
24
|
-
# @return [Enumerator]
|
25
|
-
def each_value
|
26
|
-
return to_enum(__callee__) unless block_given?
|
27
|
-
|
28
|
-
each_autonym{|autonym|yield self[autonym]}
|
29
|
-
end
|
30
|
-
|
31
|
-
alias_method :each, :each_value
|
32
|
-
|
33
|
-
# @yield [autonym, value]
|
34
|
-
# @yieldparam [Symbol] autonym
|
35
|
-
# @yieldparam [Object] value
|
36
|
-
# @yieldreturn [self]
|
37
|
-
# @return [Enumerator]
|
38
|
-
# @see #each_autonym
|
39
|
-
# @see #each_value
|
40
|
-
def each_pair
|
41
|
-
return to_enum(__callee__) unless block_given?
|
42
|
-
|
43
|
-
each_autonym{|autonym|yield autonym, self[autonym]}
|
44
|
-
end
|
45
|
-
|
46
|
-
# @yield [index]
|
47
|
-
# @yieldparam [Integer] index
|
48
|
-
# @yieldreturn [self]
|
49
|
-
# @return [Enumerator]
|
50
|
-
def each_index
|
51
|
-
return to_enum(__callee__) unless block_given?
|
52
|
-
|
53
|
-
self.class.each_index{|index|yield index}
|
54
|
-
self
|
55
|
-
end
|
56
|
-
|
57
|
-
# @yield [autonym, index]
|
58
|
-
# @yieldparam [Symbol] autonym
|
59
|
-
# @yieldparam [Integer] index
|
60
|
-
# @yieldreturn [self]
|
61
|
-
# @return [Enumerator]
|
62
|
-
def each_autonym_with_index
|
63
|
-
return to_enum(__callee__) unless block_given?
|
64
|
-
|
65
|
-
self.class.each_autonym_with_index{|autonym, index|yield autonym, index}
|
66
|
-
self
|
67
|
-
end
|
68
|
-
|
69
|
-
alias_method :each_name_with_index, :each_autonym_with_index
|
70
|
-
alias_method :each_member_with_index, :each_autonym_with_index
|
71
|
-
alias_method :each_key_with_index, :each_autonym_with_index
|
72
|
-
|
73
|
-
# @yield [value, index]
|
74
|
-
# @yieldparam [Integer] index
|
75
|
-
# @yieldreturn [self]
|
76
|
-
# @return [Enumerator]
|
77
|
-
def each_value_with_index
|
78
|
-
return to_enum(__callee__) unless block_given?
|
79
|
-
|
80
|
-
each_value.with_index{|value, index|yield value, index}
|
81
|
-
self
|
82
|
-
end
|
83
|
-
|
84
|
-
alias_method :each_with_index, :each_value_with_index
|
85
|
-
|
86
|
-
# @yield [autonym, value, index]
|
87
|
-
# @yieldparam [Symbol] autonym
|
88
|
-
# @yieldparam [Integer] index
|
89
|
-
# @yieldreturn [self]
|
90
|
-
# @return [Enumerator]
|
91
|
-
def each_pair_with_index
|
92
|
-
return to_enum(__callee__) unless block_given?
|
93
|
-
|
94
|
-
index = 0
|
95
|
-
each_pair do |autonym, value|
|
96
|
-
yield autonym, value, index
|
97
|
-
index += 1
|
98
|
-
end
|
99
|
-
self
|
100
|
-
end
|
101
|
-
|
102
|
-
# @endgroup
|
103
|
-
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
# @group Enumerative
|
4
|
+
|
5
|
+
# @yield [autonym]
|
6
|
+
# @yieldparam [Symbol] autonym - sequential under defined
|
7
|
+
# @yieldreturn [self]
|
8
|
+
# @return [Enumerator]
|
9
|
+
def each_autonym(&block)
|
10
|
+
return to_enum(__callee__) unless block_given?
|
11
|
+
|
12
|
+
self.class.each_autonym(&block)
|
13
|
+
self
|
14
|
+
end
|
15
|
+
|
16
|
+
alias_method :each_name, :each_autonym
|
17
|
+
alias_method :each_member, :each_autonym
|
18
|
+
alias_method :each_key, :each_autonym
|
19
|
+
|
20
|
+
# @yield [value]
|
21
|
+
# @yieldparam [Object] value - sequential under defined
|
22
|
+
# @see #each_autonym
|
23
|
+
# @yieldreturn [self]
|
24
|
+
# @return [Enumerator]
|
25
|
+
def each_value
|
26
|
+
return to_enum(__callee__) unless block_given?
|
27
|
+
|
28
|
+
each_autonym{|autonym|yield self[autonym]}
|
29
|
+
end
|
30
|
+
|
31
|
+
alias_method :each, :each_value
|
32
|
+
|
33
|
+
# @yield [autonym, value]
|
34
|
+
# @yieldparam [Symbol] autonym
|
35
|
+
# @yieldparam [Object] value
|
36
|
+
# @yieldreturn [self]
|
37
|
+
# @return [Enumerator]
|
38
|
+
# @see #each_autonym
|
39
|
+
# @see #each_value
|
40
|
+
def each_pair
|
41
|
+
return to_enum(__callee__) unless block_given?
|
42
|
+
|
43
|
+
each_autonym{|autonym|yield autonym, self[autonym]}
|
44
|
+
end
|
45
|
+
|
46
|
+
# @yield [index]
|
47
|
+
# @yieldparam [Integer] index
|
48
|
+
# @yieldreturn [self]
|
49
|
+
# @return [Enumerator]
|
50
|
+
def each_index
|
51
|
+
return to_enum(__callee__) unless block_given?
|
52
|
+
|
53
|
+
self.class.each_index{|index|yield index}
|
54
|
+
self
|
55
|
+
end
|
56
|
+
|
57
|
+
# @yield [autonym, index]
|
58
|
+
# @yieldparam [Symbol] autonym
|
59
|
+
# @yieldparam [Integer] index
|
60
|
+
# @yieldreturn [self]
|
61
|
+
# @return [Enumerator]
|
62
|
+
def each_autonym_with_index
|
63
|
+
return to_enum(__callee__) unless block_given?
|
64
|
+
|
65
|
+
self.class.each_autonym_with_index{|autonym, index|yield autonym, index}
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
alias_method :each_name_with_index, :each_autonym_with_index
|
70
|
+
alias_method :each_member_with_index, :each_autonym_with_index
|
71
|
+
alias_method :each_key_with_index, :each_autonym_with_index
|
72
|
+
|
73
|
+
# @yield [value, index]
|
74
|
+
# @yieldparam [Integer] index
|
75
|
+
# @yieldreturn [self]
|
76
|
+
# @return [Enumerator]
|
77
|
+
def each_value_with_index
|
78
|
+
return to_enum(__callee__) unless block_given?
|
79
|
+
|
80
|
+
each_value.with_index{|value, index|yield value, index}
|
81
|
+
self
|
82
|
+
end
|
83
|
+
|
84
|
+
alias_method :each_with_index, :each_value_with_index
|
85
|
+
|
86
|
+
# @yield [autonym, value, index]
|
87
|
+
# @yieldparam [Symbol] autonym
|
88
|
+
# @yieldparam [Integer] index
|
89
|
+
# @yieldreturn [self]
|
90
|
+
# @return [Enumerator]
|
91
|
+
def each_pair_with_index
|
92
|
+
return to_enum(__callee__) unless block_given?
|
93
|
+
|
94
|
+
index = 0
|
95
|
+
each_pair do |autonym, value|
|
96
|
+
yield autonym, value, index
|
97
|
+
index += 1
|
98
|
+
end
|
99
|
+
self
|
100
|
+
end
|
101
|
+
|
102
|
+
# @endgroup
|
103
|
+
|
104
104
|
end; end
|
@@ -1,122 +1,122 @@
|
|
1
|
-
require_relative 'subscript'
|
2
|
-
|
3
|
-
class Striuct; module InstanceMethods
|
4
|
-
|
5
|
-
# @group Like Ruby's Hash
|
6
|
-
|
7
|
-
alias_method :fetch, :[]
|
8
|
-
|
9
|
-
def has_value?(value)
|
10
|
-
@db.has_value? value
|
11
|
-
end
|
12
|
-
|
13
|
-
alias_method :value?, :has_value?
|
14
|
-
|
15
|
-
# keep truthy only (unassign falsy member)
|
16
|
-
# @yield [autonym, value]
|
17
|
-
# @yieldparam [Symbol] autonym
|
18
|
-
# @see #each_pair
|
19
|
-
# @return [Enumerator]
|
20
|
-
# @yieldreturn [self]
|
21
|
-
# @yieldreturn [nil]
|
22
|
-
def select!
|
23
|
-
raise "can't modify frozen #{self.class}" if frozen?
|
24
|
-
return to_enum(__callee__) unless block_given?
|
25
|
-
|
26
|
-
modified = false
|
27
|
-
each_pair do |autonym, value|
|
28
|
-
unless yield autonym, value
|
29
|
-
unassign autonym
|
30
|
-
modified = true
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
modified ? self : nil
|
35
|
-
end
|
36
|
-
|
37
|
-
# @see #select!
|
38
|
-
# @yield [autonym, value]
|
39
|
-
# @yieldparam [Symbol] autonym
|
40
|
-
# @return [Enumerator]
|
41
|
-
def keep_if(&block)
|
42
|
-
raise "can't modify frozen #{self.class}" if frozen?
|
43
|
-
return to_enum(__callee__) unless block_given?
|
44
|
-
|
45
|
-
select!(&block)
|
46
|
-
self
|
47
|
-
end
|
48
|
-
|
49
|
-
# @see #select!
|
50
|
-
# keep falsy only (unassign truthy member)
|
51
|
-
# @yield [autonym, value]
|
52
|
-
# @yieldparam [Symbol] autonym
|
53
|
-
# @return [Enumerator]
|
54
|
-
def reject!
|
55
|
-
raise "can't modify frozen #{self.class}" if frozen?
|
56
|
-
return to_enum(__callee__) unless block_given?
|
57
|
-
|
58
|
-
modified = false
|
59
|
-
each_pair do |autonym, value|
|
60
|
-
if yield autonym, value
|
61
|
-
unassign autonym
|
62
|
-
modified = true
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
modified ? self : nil
|
67
|
-
end
|
68
|
-
|
69
|
-
# @see #reject!
|
70
|
-
# @yield [autonym, value]
|
71
|
-
# @yieldparam [Symbol] autonym
|
72
|
-
# @return [Enumerator]
|
73
|
-
def delete_if(&block)
|
74
|
-
raise "can't modify frozen #{self.class}" if frozen?
|
75
|
-
return to_enum(__callee__) unless block_given?
|
76
|
-
|
77
|
-
reject!(&block)
|
78
|
-
self
|
79
|
-
end
|
80
|
-
|
81
|
-
# @param [Symbol, String] name
|
82
|
-
# @return [Array] e.g [autonym, value]
|
83
|
-
def assoc(name)
|
84
|
-
autonym = autonym_for name
|
85
|
-
|
86
|
-
[autonym, self[name]]
|
87
|
-
end
|
88
|
-
|
89
|
-
# @return [Array] [autonym, value]
|
90
|
-
def rassoc(value)
|
91
|
-
each_pair.find{|_, val|val == value}
|
92
|
-
end
|
93
|
-
|
94
|
-
# @see Hash#flatten
|
95
|
-
# @return [Array]
|
96
|
-
def flatten(level=1)
|
97
|
-
each_pair.to_a.flatten level
|
98
|
-
end
|
99
|
-
|
100
|
-
# @see #select!
|
101
|
-
# @yield [autonym, value]
|
102
|
-
# @yieldparam [Symbol] autonym
|
103
|
-
# @return [Striuct]
|
104
|
-
def select(&block)
|
105
|
-
return to_enum(__callee__) unless block_given?
|
106
|
-
|
107
|
-
dup.tap {|r|r.select!(&block)}
|
108
|
-
end
|
109
|
-
|
110
|
-
# @see #reject!
|
111
|
-
# @yield [autonym, value]
|
112
|
-
# @yieldparam [Symbol] autonym
|
113
|
-
# @return [Striuct]
|
114
|
-
def reject(&block)
|
115
|
-
return to_enum(__callee__) unless block_given?
|
116
|
-
|
117
|
-
dup.tap {|r|r.reject!(&block)}
|
118
|
-
end
|
119
|
-
|
120
|
-
# @endgroup
|
121
|
-
|
1
|
+
require_relative 'subscript'
|
2
|
+
|
3
|
+
class Striuct; module InstanceMethods
|
4
|
+
|
5
|
+
# @group Like Ruby's Hash
|
6
|
+
|
7
|
+
alias_method :fetch, :[]
|
8
|
+
|
9
|
+
def has_value?(value)
|
10
|
+
@db.has_value? value
|
11
|
+
end
|
12
|
+
|
13
|
+
alias_method :value?, :has_value?
|
14
|
+
|
15
|
+
# keep truthy only (unassign falsy member)
|
16
|
+
# @yield [autonym, value]
|
17
|
+
# @yieldparam [Symbol] autonym
|
18
|
+
# @see #each_pair
|
19
|
+
# @return [Enumerator]
|
20
|
+
# @yieldreturn [self]
|
21
|
+
# @yieldreturn [nil]
|
22
|
+
def select!
|
23
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
24
|
+
return to_enum(__callee__) unless block_given?
|
25
|
+
|
26
|
+
modified = false
|
27
|
+
each_pair do |autonym, value|
|
28
|
+
unless yield autonym, value
|
29
|
+
unassign autonym
|
30
|
+
modified = true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
modified ? self : nil
|
35
|
+
end
|
36
|
+
|
37
|
+
# @see #select!
|
38
|
+
# @yield [autonym, value]
|
39
|
+
# @yieldparam [Symbol] autonym
|
40
|
+
# @return [Enumerator]
|
41
|
+
def keep_if(&block)
|
42
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
43
|
+
return to_enum(__callee__) unless block_given?
|
44
|
+
|
45
|
+
select!(&block)
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
# @see #select!
|
50
|
+
# keep falsy only (unassign truthy member)
|
51
|
+
# @yield [autonym, value]
|
52
|
+
# @yieldparam [Symbol] autonym
|
53
|
+
# @return [Enumerator]
|
54
|
+
def reject!
|
55
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
56
|
+
return to_enum(__callee__) unless block_given?
|
57
|
+
|
58
|
+
modified = false
|
59
|
+
each_pair do |autonym, value|
|
60
|
+
if yield autonym, value
|
61
|
+
unassign autonym
|
62
|
+
modified = true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
modified ? self : nil
|
67
|
+
end
|
68
|
+
|
69
|
+
# @see #reject!
|
70
|
+
# @yield [autonym, value]
|
71
|
+
# @yieldparam [Symbol] autonym
|
72
|
+
# @return [Enumerator]
|
73
|
+
def delete_if(&block)
|
74
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
75
|
+
return to_enum(__callee__) unless block_given?
|
76
|
+
|
77
|
+
reject!(&block)
|
78
|
+
self
|
79
|
+
end
|
80
|
+
|
81
|
+
# @param [Symbol, String] name
|
82
|
+
# @return [Array] e.g [autonym, value]
|
83
|
+
def assoc(name)
|
84
|
+
autonym = autonym_for name
|
85
|
+
|
86
|
+
[autonym, self[name]]
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [Array] [autonym, value]
|
90
|
+
def rassoc(value)
|
91
|
+
each_pair.find{|_, val|val == value}
|
92
|
+
end
|
93
|
+
|
94
|
+
# @see Hash#flatten
|
95
|
+
# @return [Array]
|
96
|
+
def flatten(level=1)
|
97
|
+
each_pair.to_a.flatten level
|
98
|
+
end
|
99
|
+
|
100
|
+
# @see #select!
|
101
|
+
# @yield [autonym, value]
|
102
|
+
# @yieldparam [Symbol] autonym
|
103
|
+
# @return [Striuct]
|
104
|
+
def select(&block)
|
105
|
+
return to_enum(__callee__) unless block_given?
|
106
|
+
|
107
|
+
dup.tap {|r|r.select!(&block)}
|
108
|
+
end
|
109
|
+
|
110
|
+
# @see #reject!
|
111
|
+
# @yield [autonym, value]
|
112
|
+
# @yieldparam [Symbol] autonym
|
113
|
+
# @return [Striuct]
|
114
|
+
def reject(&block)
|
115
|
+
return to_enum(__callee__) unless block_given?
|
116
|
+
|
117
|
+
dup.tap {|r|r.reject!(&block)}
|
118
|
+
end
|
119
|
+
|
120
|
+
# @endgroup
|
121
|
+
|
122
122
|
end; end
|
@@ -1,60 +1,60 @@
|
|
1
|
-
class Striuct; module InstanceMethods
|
2
|
-
|
3
|
-
# @group Use Only Inner
|
4
|
-
|
5
|
-
private
|
6
|
-
|
7
|
-
def __get__(name)
|
8
|
-
autonym = autonym_for name
|
9
|
-
value = @db[autonym]
|
10
|
-
|
11
|
-
if safety_getter?(autonym) and !accept?(autonym, value)
|
12
|
-
raise ::Validation::InvalidReadingError,
|
13
|
-
"#{value.inspect} is deficient for #{name} in #{self.class}"
|
14
|
-
end
|
15
|
-
|
16
|
-
value
|
17
|
-
end
|
18
|
-
|
19
|
-
def __set__(name, value)
|
20
|
-
raise "can't modify frozen #{self.class}" if frozen?
|
21
|
-
autonym = autonym_for name
|
22
|
-
raise "can't modify locked member #{name}" if lock? autonym
|
23
|
-
|
24
|
-
if has_adjuster? autonym
|
25
|
-
begin
|
26
|
-
value = instance_exec value, &adjuster_for(autonym)
|
27
|
-
rescue Exception
|
28
|
-
raise ::Validation::UnmanagebleError
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
if safety_setter?(autonym) and !accept?(autonym, value)
|
33
|
-
raise ::Validation::InvalidWritingError,
|
34
|
-
"#{value.inspect} is deficient for #{name} in #{self.class}"
|
35
|
-
end
|
36
|
-
|
37
|
-
if inference? autonym
|
38
|
-
self.class.__send__ :__found_family__!, self, autonym, value
|
39
|
-
end
|
40
|
-
|
41
|
-
@db[autonym] = value
|
42
|
-
rescue ::Validation::InvalidError
|
43
|
-
unless /in \[\]=/ =~ caller[1].slice(/([^:]+)\z/)
|
44
|
-
$!.backtrace.delete_if{|s|/#{Regexp.escape(File.dirname __FILE__)}/ =~ s}
|
45
|
-
$!.backtrace.first.sub!(/([^:]+)\z/){"in `#{name}='"}
|
46
|
-
end
|
47
|
-
|
48
|
-
raise
|
49
|
-
end
|
50
|
-
|
51
|
-
# @param [Symbol] autonym
|
52
|
-
def __clear__(autonym)
|
53
|
-
raise "can't modify frozen #{self.class}" if frozen?
|
54
|
-
|
55
|
-
@db.delete autonym
|
56
|
-
end
|
57
|
-
|
58
|
-
# @endgroup
|
59
|
-
|
60
|
-
end; end
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
# @group Use Only Inner
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def __get__(name)
|
8
|
+
autonym = autonym_for name
|
9
|
+
value = @db[autonym]
|
10
|
+
|
11
|
+
if safety_getter?(autonym) and !accept?(autonym, value)
|
12
|
+
raise ::Validation::InvalidReadingError,
|
13
|
+
"#{value.inspect} is deficient for #{name} in #{self.class}"
|
14
|
+
end
|
15
|
+
|
16
|
+
value
|
17
|
+
end
|
18
|
+
|
19
|
+
def __set__(name, value)
|
20
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
21
|
+
autonym = autonym_for name
|
22
|
+
raise "can't modify locked member #{name}" if lock? autonym
|
23
|
+
|
24
|
+
if has_adjuster? autonym
|
25
|
+
begin
|
26
|
+
value = instance_exec value, &adjuster_for(autonym)
|
27
|
+
rescue Exception
|
28
|
+
raise ::Validation::UnmanagebleError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
if safety_setter?(autonym) and !accept?(autonym, value)
|
33
|
+
raise ::Validation::InvalidWritingError,
|
34
|
+
"#{value.inspect} is deficient for #{name} in #{self.class}"
|
35
|
+
end
|
36
|
+
|
37
|
+
if inference? autonym
|
38
|
+
self.class.__send__ :__found_family__!, self, autonym, value
|
39
|
+
end
|
40
|
+
|
41
|
+
@db[autonym] = value
|
42
|
+
rescue ::Validation::InvalidError
|
43
|
+
unless /in \[\]=/ =~ caller[1].slice(/([^:]+)\z/)
|
44
|
+
$!.backtrace.delete_if{|s|/#{Regexp.escape(File.dirname __FILE__)}/ =~ s}
|
45
|
+
$!.backtrace.first.sub!(/([^:]+)\z/){"in `#{name}='"}
|
46
|
+
end
|
47
|
+
|
48
|
+
raise
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param [Symbol] autonym
|
52
|
+
def __clear__(autonym)
|
53
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
54
|
+
|
55
|
+
@db.delete autonym
|
56
|
+
end
|
57
|
+
|
58
|
+
# @endgroup
|
59
|
+
|
60
|
+
end; end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
require 'keyvalidatable'
|
2
|
-
|
3
|
-
class Striuct; module InstanceMethods
|
4
|
-
|
5
|
-
extend Forwardable
|
6
|
-
include KeyValidatable
|
7
|
-
|
8
|
-
KeyValidatable.instance_methods.each do |feature|
|
9
|
-
if specific_feature = feature.to_s.sub!('members'){'autonyms'}
|
10
|
-
def_delegator :self, feature, specific_feature.to_sym
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
end; end
|
1
|
+
require 'keyvalidatable'
|
2
|
+
|
3
|
+
class Striuct; module InstanceMethods
|
4
|
+
|
5
|
+
extend Forwardable
|
6
|
+
include KeyValidatable
|
7
|
+
|
8
|
+
KeyValidatable.instance_methods.each do |feature|
|
9
|
+
if specific_feature = feature.to_s.sub!('members'){'autonyms'}
|
10
|
+
def_delegator :self, feature, specific_feature.to_sym
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end; end
|