striuct 0.3.3 → 0.3.4
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.
- 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,144 +1,144 @@
|
|
1
|
-
require 'keyvalidatable'
|
2
|
-
|
3
|
-
class Striuct; module ClassMethods
|
4
|
-
|
5
|
-
# @group Macro for Member Definition
|
6
|
-
|
7
|
-
VALID_MEMBER_OPTIONS = [
|
8
|
-
:default,
|
9
|
-
:default_proc,
|
10
|
-
:inference,
|
11
|
-
:reader_validation,
|
12
|
-
:getter_validation,
|
13
|
-
:writer_validation,
|
14
|
-
:setter_validation
|
15
|
-
].freeze
|
16
|
-
|
17
|
-
DEFAULT_MEMBER_OPTIONS = {
|
18
|
-
setter_validation: true
|
19
|
-
}.freeze
|
20
|
-
|
21
|
-
def closed?
|
22
|
-
[@autonyms, @adjusters, @defaults, @aliases].any?(&:frozen?)
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
# @param [Symbol, String] autonym
|
28
|
-
# @param [#===, Proc, Method, ANYTHING] condition
|
29
|
-
# @param [Hash] options
|
30
|
-
# @option options [BasicObject] :default
|
31
|
-
# @option options [Proc] :default_proc
|
32
|
-
# @option options [Boolean] :inference
|
33
|
-
# @option options [Boolean] :reader_validation
|
34
|
-
# @option options [Boolean] :getter_validation
|
35
|
-
# @option options [Boolean] :writer_validation
|
36
|
-
# @option options [Boolean] :setter_validation
|
37
|
-
# @return [nil]
|
38
|
-
def add_member(autonym, condition=Validation::Condition::ANYTHING, options=DEFAULT_MEMBER_OPTIONS, &adjuster)
|
39
|
-
raise "already closed to add member in #{self}" if closed?
|
40
|
-
options = DEFAULT_MEMBER_OPTIONS.merge(options).extend(KeyValidatable)
|
41
|
-
options.validate_keys let: VALID_MEMBER_OPTIONS
|
42
|
-
if options.has_key?(:default) and options.has_key?(:default_proc)
|
43
|
-
raise ArgumentError, 'It is not able to choose "default" with "default_proc" in options'
|
44
|
-
end
|
45
|
-
|
46
|
-
autonym = keyable_for autonym # First difinition for an autonym
|
47
|
-
|
48
|
-
raise ArgumentError, %Q!already exist name "#{autonym}"! if member? autonym
|
49
|
-
_check_safety_naming autonym
|
50
|
-
_mark_setter_validation autonym if options[:setter_validation] or options[:writer_validation]
|
51
|
-
_mark_getter_validation autonym if options[:getter_validation] or options[:reader_validation]
|
52
|
-
_mark_inference autonym if options[:inference]
|
53
|
-
|
54
|
-
@autonyms << autonym
|
55
|
-
__getter__! autonym
|
56
|
-
__setter__! autonym, condition, &adjuster
|
57
|
-
|
58
|
-
if options.has_key?(:default)
|
59
|
-
set_default_value autonym, options.fetch(:default)
|
60
|
-
end
|
61
|
-
|
62
|
-
if options.has_key?(:default_proc)
|
63
|
-
set_default_value autonym, &options.fetch(:default_proc)
|
64
|
-
end
|
65
|
-
|
66
|
-
nil
|
67
|
-
end
|
68
|
-
|
69
|
-
alias_method :member, :add_member
|
70
|
-
|
71
|
-
# @param [Symbol, String] autonym
|
72
|
-
# @param [Symbol, String] autonyms
|
73
|
-
# @return [nil]
|
74
|
-
def add_members(autonym, *autonyms)
|
75
|
-
raise "already closed to add members in #{self}" if closed?
|
76
|
-
|
77
|
-
[autonym, *autonyms].each {|_autonym|add_member _autonym}
|
78
|
-
nil
|
79
|
-
end
|
80
|
-
|
81
|
-
# @param [Symbol, String] aliased
|
82
|
-
# @param [Symbol, String] autonym
|
83
|
-
# @return [nil]
|
84
|
-
def alias_member(aliased, autonym)
|
85
|
-
raise "already closed to add members in #{self}" if closed?
|
86
|
-
autonym = autonym_for autonym
|
87
|
-
aliased = keyable_for aliased
|
88
|
-
raise ArgumentError, %Q!already exist name "#{aliased}"! if member? aliased
|
89
|
-
_check_safety_naming aliased
|
90
|
-
|
91
|
-
alias_method aliased, autonym
|
92
|
-
alias_method :"#{aliased}=", :"#{autonym}="
|
93
|
-
_alias_member aliased, autonym
|
94
|
-
nil
|
95
|
-
end
|
96
|
-
|
97
|
-
# @param [Symbol, String] name
|
98
|
-
# @return [nil]
|
99
|
-
def set_default_value(name, value=nil, &block)
|
100
|
-
raise "already closed to modify member attributes in #{self}" if closed?
|
101
|
-
autonym = autonym_for(name)
|
102
|
-
raise "already settled default value for #{name}" if has_default? autonym
|
103
|
-
|
104
|
-
value = (
|
105
|
-
if block_given?
|
106
|
-
if value.nil?
|
107
|
-
arity = block.arity
|
108
|
-
|
109
|
-
if valid_default_proc? block
|
110
|
-
DefaultProcHolder.new block
|
111
|
-
else
|
112
|
-
raise ArgumentError, "wrong number of block parameter #{arity} for 0..2"
|
113
|
-
end
|
114
|
-
else
|
115
|
-
raise ArgumentError, 'can not use value and block arguments'
|
116
|
-
end
|
117
|
-
else
|
118
|
-
value
|
119
|
-
end
|
120
|
-
)
|
121
|
-
|
122
|
-
_set_default_value autonym, value
|
123
|
-
nil
|
124
|
-
end
|
125
|
-
|
126
|
-
alias_method :default, :set_default_value
|
127
|
-
|
128
|
-
# @param [Proc] _proc
|
129
|
-
def valid_default_proc?(_proc)
|
130
|
-
_proc.arity <= 2
|
131
|
-
end
|
132
|
-
|
133
|
-
# @return [self]
|
134
|
-
def close_member
|
135
|
-
[@autonyms, @adjusters, @defaults, @aliases].each(&:freeze)
|
136
|
-
self
|
137
|
-
end
|
138
|
-
|
139
|
-
alias_method :fix_structural, :close_member
|
140
|
-
alias_method :close, :close_member
|
141
|
-
|
142
|
-
# @endgroup
|
143
|
-
|
144
|
-
end; end
|
1
|
+
require 'keyvalidatable'
|
2
|
+
|
3
|
+
class Striuct; module ClassMethods
|
4
|
+
|
5
|
+
# @group Macro for Member Definition
|
6
|
+
|
7
|
+
VALID_MEMBER_OPTIONS = [
|
8
|
+
:default,
|
9
|
+
:default_proc,
|
10
|
+
:inference,
|
11
|
+
:reader_validation,
|
12
|
+
:getter_validation,
|
13
|
+
:writer_validation,
|
14
|
+
:setter_validation
|
15
|
+
].freeze
|
16
|
+
|
17
|
+
DEFAULT_MEMBER_OPTIONS = {
|
18
|
+
setter_validation: true
|
19
|
+
}.freeze
|
20
|
+
|
21
|
+
def closed?
|
22
|
+
[@autonyms, @adjusters, @defaults, @aliases].any?(&:frozen?)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# @param [Symbol, String] autonym
|
28
|
+
# @param [#===, Proc, Method, ANYTHING] condition
|
29
|
+
# @param [Hash] options
|
30
|
+
# @option options [BasicObject] :default
|
31
|
+
# @option options [Proc] :default_proc
|
32
|
+
# @option options [Boolean] :inference
|
33
|
+
# @option options [Boolean] :reader_validation
|
34
|
+
# @option options [Boolean] :getter_validation
|
35
|
+
# @option options [Boolean] :writer_validation
|
36
|
+
# @option options [Boolean] :setter_validation
|
37
|
+
# @return [nil]
|
38
|
+
def add_member(autonym, condition=Validation::Condition::ANYTHING, options=DEFAULT_MEMBER_OPTIONS, &adjuster)
|
39
|
+
raise "already closed to add member in #{self}" if closed?
|
40
|
+
options = DEFAULT_MEMBER_OPTIONS.merge(options).extend(KeyValidatable)
|
41
|
+
options.validate_keys let: VALID_MEMBER_OPTIONS
|
42
|
+
if options.has_key?(:default) and options.has_key?(:default_proc)
|
43
|
+
raise ArgumentError, 'It is not able to choose "default" with "default_proc" in options'
|
44
|
+
end
|
45
|
+
|
46
|
+
autonym = keyable_for autonym # First difinition for an autonym
|
47
|
+
|
48
|
+
raise ArgumentError, %Q!already exist name "#{autonym}"! if member? autonym
|
49
|
+
_check_safety_naming autonym
|
50
|
+
_mark_setter_validation autonym if options[:setter_validation] or options[:writer_validation]
|
51
|
+
_mark_getter_validation autonym if options[:getter_validation] or options[:reader_validation]
|
52
|
+
_mark_inference autonym if options[:inference]
|
53
|
+
|
54
|
+
@autonyms << autonym
|
55
|
+
__getter__! autonym
|
56
|
+
__setter__! autonym, condition, &adjuster
|
57
|
+
|
58
|
+
if options.has_key?(:default)
|
59
|
+
set_default_value autonym, options.fetch(:default)
|
60
|
+
end
|
61
|
+
|
62
|
+
if options.has_key?(:default_proc)
|
63
|
+
set_default_value autonym, &options.fetch(:default_proc)
|
64
|
+
end
|
65
|
+
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
|
69
|
+
alias_method :member, :add_member
|
70
|
+
|
71
|
+
# @param [Symbol, String] autonym
|
72
|
+
# @param [Symbol, String] autonyms
|
73
|
+
# @return [nil]
|
74
|
+
def add_members(autonym, *autonyms)
|
75
|
+
raise "already closed to add members in #{self}" if closed?
|
76
|
+
|
77
|
+
[autonym, *autonyms].each {|_autonym|add_member _autonym}
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
|
81
|
+
# @param [Symbol, String] aliased
|
82
|
+
# @param [Symbol, String] autonym
|
83
|
+
# @return [nil]
|
84
|
+
def alias_member(aliased, autonym)
|
85
|
+
raise "already closed to add members in #{self}" if closed?
|
86
|
+
autonym = autonym_for autonym
|
87
|
+
aliased = keyable_for aliased
|
88
|
+
raise ArgumentError, %Q!already exist name "#{aliased}"! if member? aliased
|
89
|
+
_check_safety_naming aliased
|
90
|
+
|
91
|
+
alias_method aliased, autonym
|
92
|
+
alias_method :"#{aliased}=", :"#{autonym}="
|
93
|
+
_alias_member aliased, autonym
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
|
97
|
+
# @param [Symbol, String] name
|
98
|
+
# @return [nil]
|
99
|
+
def set_default_value(name, value=nil, &block)
|
100
|
+
raise "already closed to modify member attributes in #{self}" if closed?
|
101
|
+
autonym = autonym_for(name)
|
102
|
+
raise "already settled default value for #{name}" if has_default? autonym
|
103
|
+
|
104
|
+
value = (
|
105
|
+
if block_given?
|
106
|
+
if value.nil?
|
107
|
+
arity = block.arity
|
108
|
+
|
109
|
+
if valid_default_proc? block
|
110
|
+
DefaultProcHolder.new block
|
111
|
+
else
|
112
|
+
raise ArgumentError, "wrong number of block parameter #{arity} for 0..2"
|
113
|
+
end
|
114
|
+
else
|
115
|
+
raise ArgumentError, 'can not use value and block arguments'
|
116
|
+
end
|
117
|
+
else
|
118
|
+
value
|
119
|
+
end
|
120
|
+
)
|
121
|
+
|
122
|
+
_set_default_value autonym, value
|
123
|
+
nil
|
124
|
+
end
|
125
|
+
|
126
|
+
alias_method :default, :set_default_value
|
127
|
+
|
128
|
+
# @param [Proc] _proc
|
129
|
+
def valid_default_proc?(_proc)
|
130
|
+
_proc.arity <= 2
|
131
|
+
end
|
132
|
+
|
133
|
+
# @return [self]
|
134
|
+
def close_member
|
135
|
+
[@autonyms, @adjusters, @defaults, @aliases].each(&:freeze)
|
136
|
+
self
|
137
|
+
end
|
138
|
+
|
139
|
+
alias_method :fix_structural, :close_member
|
140
|
+
alias_method :close, :close_member
|
141
|
+
|
142
|
+
# @endgroup
|
143
|
+
|
144
|
+
end; end
|
@@ -1,114 +1,114 @@
|
|
1
|
-
class Striuct; module ClassMethods
|
2
|
-
|
3
|
-
# @group Named
|
4
|
-
|
5
|
-
# @param [Symbol, String, #to_sym] name
|
6
|
-
# @return [Symbol]
|
7
|
-
def keyable_for(name)
|
8
|
-
name.to_sym
|
9
|
-
end
|
10
|
-
|
11
|
-
# @return [Array<Symbol>]
|
12
|
-
def autonyms
|
13
|
-
@autonyms.dup
|
14
|
-
end
|
15
|
-
|
16
|
-
alias_method :names, :autonyms
|
17
|
-
alias_method :members, :autonyms
|
18
|
-
alias_method :keys, :autonyms
|
19
|
-
|
20
|
-
# @return [Array<Symbol>]
|
21
|
-
def all_members
|
22
|
-
@autonyms + @aliases.keys
|
23
|
-
end
|
24
|
-
|
25
|
-
def has_member?(name)
|
26
|
-
autonym_for name
|
27
|
-
rescue Exception
|
28
|
-
false
|
29
|
-
else
|
30
|
-
true
|
31
|
-
end
|
32
|
-
|
33
|
-
alias_method :member?, :has_member?
|
34
|
-
alias_method :has_key?, :has_member?
|
35
|
-
alias_method :key?, :has_key?
|
36
|
-
|
37
|
-
# @param [Symbol, String, #to_sym, #to_str] name
|
38
|
-
# @return [Symbol]
|
39
|
-
def autonym_for(name)
|
40
|
-
name = keyable_for name
|
41
|
-
|
42
|
-
if @autonyms.include? name
|
43
|
-
name
|
44
|
-
else
|
45
|
-
if autonym = _autonym_for(name)
|
46
|
-
autonym
|
47
|
-
else
|
48
|
-
raise NameError, "not defined member for #{name}"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# @param [Symbol, String] name
|
54
|
-
def autonym?(name)
|
55
|
-
name = keyable_for name
|
56
|
-
raise NameError unless member? name
|
57
|
-
|
58
|
-
@autonyms.include? name
|
59
|
-
end
|
60
|
-
|
61
|
-
alias_method :original?, :autonym?
|
62
|
-
|
63
|
-
# @param [Symbol, String] name
|
64
|
-
def alias?(name)
|
65
|
-
name = keyable_for name
|
66
|
-
raise NameError unless member? name
|
67
|
-
|
68
|
-
@aliases.has_key? name
|
69
|
-
end
|
70
|
-
|
71
|
-
alias_method :aliased?, :alias?
|
72
|
-
|
73
|
-
# @param [Symbol, String] autonym
|
74
|
-
def has_aliases?(autonym)
|
75
|
-
raise NameError unless autonym? autonym
|
76
|
-
|
77
|
-
@aliases.has_value? autonym
|
78
|
-
end
|
79
|
-
|
80
|
-
# @param [Symbol, String] autonym
|
81
|
-
# @return [Array<Symbol>]
|
82
|
-
def aliases_for(autonym)
|
83
|
-
autonym = keyable_for autonym
|
84
|
-
raise NameError unless has_aliases? autonym
|
85
|
-
|
86
|
-
_aliases_for autonym
|
87
|
-
end
|
88
|
-
|
89
|
-
# @return [Hash] alias => autonym
|
90
|
-
def aliases
|
91
|
-
@aliases.dup
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
|
96
|
-
def _autonyms
|
97
|
-
@autonyms
|
98
|
-
end
|
99
|
-
|
100
|
-
def _alias_member(aliased, autonym)
|
101
|
-
@aliases[aliased] = autonym
|
102
|
-
end
|
103
|
-
|
104
|
-
def _autonym_for(aliased)
|
105
|
-
@aliases[aliased]
|
106
|
-
end
|
107
|
-
|
108
|
-
def _aliases_for(autonym)
|
109
|
-
@aliases.group_by{|aliased, an|an}.fetch(autonym)
|
110
|
-
end
|
111
|
-
|
112
|
-
# @endgroup
|
113
|
-
|
1
|
+
class Striuct; module ClassMethods
|
2
|
+
|
3
|
+
# @group Named
|
4
|
+
|
5
|
+
# @param [Symbol, String, #to_sym] name
|
6
|
+
# @return [Symbol]
|
7
|
+
def keyable_for(name)
|
8
|
+
name.to_sym
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Array<Symbol>]
|
12
|
+
def autonyms
|
13
|
+
@autonyms.dup
|
14
|
+
end
|
15
|
+
|
16
|
+
alias_method :names, :autonyms
|
17
|
+
alias_method :members, :autonyms
|
18
|
+
alias_method :keys, :autonyms
|
19
|
+
|
20
|
+
# @return [Array<Symbol>]
|
21
|
+
def all_members
|
22
|
+
@autonyms + @aliases.keys
|
23
|
+
end
|
24
|
+
|
25
|
+
def has_member?(name)
|
26
|
+
autonym_for name
|
27
|
+
rescue Exception
|
28
|
+
false
|
29
|
+
else
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :member?, :has_member?
|
34
|
+
alias_method :has_key?, :has_member?
|
35
|
+
alias_method :key?, :has_key?
|
36
|
+
|
37
|
+
# @param [Symbol, String, #to_sym, #to_str] name
|
38
|
+
# @return [Symbol]
|
39
|
+
def autonym_for(name)
|
40
|
+
name = keyable_for name
|
41
|
+
|
42
|
+
if @autonyms.include? name
|
43
|
+
name
|
44
|
+
else
|
45
|
+
if autonym = _autonym_for(name)
|
46
|
+
autonym
|
47
|
+
else
|
48
|
+
raise NameError, "not defined member for #{name}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param [Symbol, String] name
|
54
|
+
def autonym?(name)
|
55
|
+
name = keyable_for name
|
56
|
+
raise NameError unless member? name
|
57
|
+
|
58
|
+
@autonyms.include? name
|
59
|
+
end
|
60
|
+
|
61
|
+
alias_method :original?, :autonym?
|
62
|
+
|
63
|
+
# @param [Symbol, String] name
|
64
|
+
def alias?(name)
|
65
|
+
name = keyable_for name
|
66
|
+
raise NameError unless member? name
|
67
|
+
|
68
|
+
@aliases.has_key? name
|
69
|
+
end
|
70
|
+
|
71
|
+
alias_method :aliased?, :alias?
|
72
|
+
|
73
|
+
# @param [Symbol, String] autonym
|
74
|
+
def has_aliases?(autonym)
|
75
|
+
raise NameError unless autonym? autonym
|
76
|
+
|
77
|
+
@aliases.has_value? autonym
|
78
|
+
end
|
79
|
+
|
80
|
+
# @param [Symbol, String] autonym
|
81
|
+
# @return [Array<Symbol>]
|
82
|
+
def aliases_for(autonym)
|
83
|
+
autonym = keyable_for autonym
|
84
|
+
raise NameError unless has_aliases? autonym
|
85
|
+
|
86
|
+
_aliases_for autonym
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [Hash] alias => autonym
|
90
|
+
def aliases
|
91
|
+
@aliases.dup
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def _autonyms
|
97
|
+
@autonyms
|
98
|
+
end
|
99
|
+
|
100
|
+
def _alias_member(aliased, autonym)
|
101
|
+
@aliases[aliased] = autonym
|
102
|
+
end
|
103
|
+
|
104
|
+
def _autonym_for(aliased)
|
105
|
+
@aliases[aliased]
|
106
|
+
end
|
107
|
+
|
108
|
+
def _aliases_for(autonym)
|
109
|
+
@aliases.group_by{|aliased, an|an}.fetch(autonym)
|
110
|
+
end
|
111
|
+
|
112
|
+
# @endgroup
|
113
|
+
|
114
114
|
end; end
|
@@ -1,54 +1,54 @@
|
|
1
|
-
class Striuct; module ClassMethods
|
2
|
-
|
3
|
-
# @group Basic Methods for Ruby's Object
|
4
|
-
|
5
|
-
# @return [self]
|
6
|
-
def freeze
|
7
|
-
__floating_attributes__.each(&:freeze)
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
# @return [Class]
|
12
|
-
def dup
|
13
|
-
r = super
|
14
|
-
@autonyms, @adjusters, @defaults, @aliases,
|
15
|
-
@setter_validations, @getter_validations,
|
16
|
-
@conditions, @inferences =
|
17
|
-
*__floating_attributes__.map(&:dup)
|
18
|
-
r
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def inherited(subclass)
|
24
|
-
autonyms = @autonyms.dup
|
25
|
-
attributes = [@conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations].map(&:dup)
|
26
|
-
protect_level = @protect_level
|
27
|
-
|
28
|
-
subclass.class_eval do
|
29
|
-
original_inherited subclass
|
30
|
-
|
31
|
-
@autonyms = autonyms
|
32
|
-
@conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations = *attributes
|
33
|
-
@protect_level = protect_level
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def initialize_copy(original)
|
38
|
-
ret = super original
|
39
|
-
@autonyms, @adjusters, @defaults, @aliases,
|
40
|
-
@setter_validations, @getter_validations,
|
41
|
-
@conditions, @inferences =
|
42
|
-
*__floating_attributes__.map(&:dup)
|
43
|
-
ret
|
44
|
-
end
|
45
|
-
|
46
|
-
def __floating_attributes__
|
47
|
-
[@autonyms, @adjusters, @defaults, @aliases,
|
48
|
-
@setter_validations, @getter_validations,
|
49
|
-
@conditions, @inferences]
|
50
|
-
end
|
51
|
-
|
52
|
-
# @endgroup
|
53
|
-
|
54
|
-
end; end
|
1
|
+
class Striuct; module ClassMethods
|
2
|
+
|
3
|
+
# @group Basic Methods for Ruby's Object
|
4
|
+
|
5
|
+
# @return [self]
|
6
|
+
def freeze
|
7
|
+
__floating_attributes__.each(&:freeze)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Class]
|
12
|
+
def dup
|
13
|
+
r = super
|
14
|
+
@autonyms, @adjusters, @defaults, @aliases,
|
15
|
+
@setter_validations, @getter_validations,
|
16
|
+
@conditions, @inferences =
|
17
|
+
*__floating_attributes__.map(&:dup)
|
18
|
+
r
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def inherited(subclass)
|
24
|
+
autonyms = @autonyms.dup
|
25
|
+
attributes = [@conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations].map(&:dup)
|
26
|
+
protect_level = @protect_level
|
27
|
+
|
28
|
+
subclass.class_eval do
|
29
|
+
original_inherited subclass
|
30
|
+
|
31
|
+
@autonyms = autonyms
|
32
|
+
@conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations = *attributes
|
33
|
+
@protect_level = protect_level
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize_copy(original)
|
38
|
+
ret = super original
|
39
|
+
@autonyms, @adjusters, @defaults, @aliases,
|
40
|
+
@setter_validations, @getter_validations,
|
41
|
+
@conditions, @inferences =
|
42
|
+
*__floating_attributes__.map(&:dup)
|
43
|
+
ret
|
44
|
+
end
|
45
|
+
|
46
|
+
def __floating_attributes__
|
47
|
+
[@autonyms, @adjusters, @defaults, @aliases,
|
48
|
+
@setter_validations, @getter_validations,
|
49
|
+
@conditions, @inferences]
|
50
|
+
end
|
51
|
+
|
52
|
+
# @endgroup
|
53
|
+
|
54
|
+
end; end
|