striuct 0.6.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE.txt +21 -0
- data/README.md +19 -39
- data/lib/striuct.rb +3 -3
- data/lib/striuct/classmethods/README.md +2 -2
- data/lib/striuct/classmethods/adjustment.rb +15 -13
- data/lib/striuct/classmethods/attributes.rb +94 -92
- data/lib/striuct/classmethods/conflict_management.rb +109 -106
- data/lib/striuct/classmethods/constructor.rb +47 -54
- data/lib/striuct/classmethods/copy.rb +45 -43
- data/lib/striuct/classmethods/default.rb +23 -21
- data/lib/striuct/classmethods/enum.rb +46 -44
- data/lib/striuct/classmethods/fix.rb +23 -21
- data/lib/striuct/classmethods/hashdeepdupulicatable.rb +15 -15
- data/lib/striuct/classmethods/inner.rb +57 -55
- data/lib/striuct/classmethods/length.rb +12 -10
- data/lib/striuct/classmethods/macro.rb +110 -106
- data/lib/striuct/classmethods/names.rb +69 -65
- data/lib/striuct/classmethods/predicate.rb +131 -129
- data/lib/striuct/classmethods/requirements.rb +3 -1
- data/lib/striuct/classmethods/to_struct.rb +21 -18
- data/lib/striuct/classmethods/validation.rb +15 -13
- data/lib/striuct/instancemethods/README.md +2 -2
- data/lib/striuct/instancemethods/assign.rb +29 -27
- data/lib/striuct/instancemethods/cast.rb +28 -26
- data/lib/striuct/instancemethods/compare.rb +26 -24
- data/lib/striuct/instancemethods/default.rb +31 -29
- data/lib/striuct/instancemethods/delegate_class_methods.rb +35 -33
- data/lib/striuct/instancemethods/enum.rb +86 -84
- data/lib/striuct/instancemethods/getter.rb +39 -37
- data/lib/striuct/instancemethods/hashy.rb +99 -97
- data/lib/striuct/instancemethods/keyvalidatable.rb +8 -6
- data/lib/striuct/instancemethods/lock.rb +46 -44
- data/lib/striuct/instancemethods/object.rb +50 -48
- data/lib/striuct/instancemethods/requirements.rb +11 -9
- data/lib/striuct/instancemethods/safety.rb +11 -9
- data/lib/striuct/instancemethods/setter.rb +46 -45
- data/lib/striuct/instancemethods/to_s.rb +39 -37
- data/lib/striuct/instancemethods/validation.rb +31 -29
- data/lib/striuct/instancemethods/values.rb +50 -48
- data/lib/striuct/requirements.rb +3 -1
- data/lib/striuct/singleton_class.rb +12 -17
- data/lib/striuct/structs.rb +3 -3
- metadata +33 -178
- data/.gitignore +0 -35
- data/.travis.yml +0 -17
- data/.yardopts +0 -1
- data/Gemfile +0 -11
- data/MIT-LICENSE +0 -22
- data/Rakefile +0 -11
- data/benchmark/basics.rb +0 -56
- data/example/README.rb +0 -50
- data/example/example1.rb +0 -195
- data/example/example2.rb +0 -20
- data/example/see_trace.rb +0 -32
- data/striuct.gemspec +0 -45
- data/test/helper.rb +0 -3
- data/test/test_sglc-constructor.rb +0 -36
- data/test/test_subc-c-add_members.rb +0 -13
- data/test/test_subc-c-close_member.rb +0 -36
- data/test/test_subc-c-constructor.rb +0 -92
- data/test/test_subc-c-copy.rb +0 -71
- data/test/test_subc-c-freeze.rb +0 -36
- data/test/test_subc-c-inheritable.rb +0 -58
- data/test/test_subc-c-safety_naming.rb +0 -73
- data/test/test_subc-f-alias_member.rb +0 -54
- data/test/test_subc-f-enum.rb +0 -159
- data/test/test_subc-f-predicate.rb +0 -647
- data/test/test_subc-f-to_struct.rb +0 -61
- data/test/test_subc-f-validation_util.rb +0 -59
- data/test/test_subc-f_debug.rb +0 -39
- data/test/test_subc-f_name.rb +0 -525
- data/test/test_subc-i-accessor.rb +0 -138
- data/test/test_subc-i-adjuster.rb +0 -95
- data/test/test_subc-i-assign.rb +0 -53
- data/test/test_subc-i-basic.rb +0 -43
- data/test/test_subc-i-cast.rb +0 -27
- data/test/test_subc-i-compare.rb +0 -52
- data/test/test_subc-i-copy.rb +0 -23
- data/test/test_subc-i-default_value.rb +0 -129
- data/test/test_subc-i-freeze.rb +0 -19
- data/test/test_subc-i-hashlike.rb +0 -144
- data/test/test_subc-i-keyvalidatable.rb +0 -25
- data/test/test_subc-i-lock.rb +0 -40
- data/test/test_subc-i-must.rb +0 -30
- data/test/test_subc-i-to_s_family.rb +0 -26
- data/test/test_subc-i-validation_specific_conditions.rb +0 -297
- data/test/test_subc-i-validation_with_getter.rb +0 -33
- data/test/test_version.rb +0 -13
@@ -1,66 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'keyvalidatable'
|
2
|
-
require 'optionalargument'
|
3
4
|
|
4
|
-
class Striuct
|
5
|
+
class Striuct
|
6
|
+
module ClassMethods
|
7
|
+
# @group Constructor
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
new_instance(*values)
|
11
|
-
end
|
9
|
+
# @return [Striuct]
|
10
|
+
def for_values(*values)
|
11
|
+
new_instance(*values)
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
+
alias_method :new, :for_values
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
KeyValidatable.validate_array KeyValidatable.keys_for(pairs).map(&:to_sym),
|
20
|
-
let: all_members
|
16
|
+
# @param [Hash, Struct, Striuct, #each_pair] pairs
|
17
|
+
# @return [Striuct]
|
18
|
+
def for_pairs(pairs)
|
19
|
+
raise TypeError, 'no pairs object' unless pairs.respond_to?(:each_pair)
|
21
20
|
|
22
|
-
|
23
|
-
instance.__send__ :initialize_for_pairs, pairs
|
24
|
-
instance
|
25
|
-
end
|
21
|
+
KeyValidatable.validate_array(KeyValidatable.keys_for(pairs).map(&:to_sym), let: all_members)
|
26
22
|
|
27
|
-
|
23
|
+
instance = allocate
|
24
|
+
instance.__send__(:initialize_for_pairs, pairs)
|
25
|
+
instance
|
26
|
+
end
|
28
27
|
|
29
|
-
|
30
|
-
DEFINE_OptArg = OptionalArgument.define {
|
31
|
-
opt :lock, default: true, condition: BOOLEAN?
|
32
|
-
opt :strict, default: true, condition: BOOLEAN?
|
33
|
-
}
|
28
|
+
alias_method :[], :for_pairs
|
34
29
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
raise ArgumentError, 'must with block' unless block_given?
|
44
|
-
opts = DEFINE_OptArg.parse options
|
45
|
-
|
46
|
-
new.tap {|instance|
|
47
|
-
yield instance
|
48
|
-
|
49
|
-
yets = autonyms.select{|autonym|! instance.assigned?(autonym)}
|
50
|
-
unless yets.empty?
|
51
|
-
raise "not assigned members are, yet '#{yets.inspect} in #{self}'"
|
52
|
-
end
|
53
|
-
|
54
|
-
invalids = autonyms.select{|autonym|! instance.valid?(autonym)}
|
55
|
-
if opts.strict && !invalids.empty?
|
56
|
-
raise Validation::InvalidWritingError,
|
57
|
-
"invalids members are, yet '#{invalids.inspect} in #{self}'"
|
58
|
-
end
|
30
|
+
# for build the fixed object
|
31
|
+
# @param [Boolean] lock
|
32
|
+
# @param [Boolean] strict
|
33
|
+
# @yieldparam [Striuct] instance
|
34
|
+
# @yieldreturn [Striuct] instance
|
35
|
+
# @return [void]
|
36
|
+
def define(lock: true, strict: true)
|
37
|
+
raise ArgumentError, 'must with block' unless block_given?
|
59
38
|
|
60
|
-
|
61
|
-
|
62
|
-
end
|
39
|
+
new.tap { |instance|
|
40
|
+
yield instance
|
63
41
|
|
64
|
-
|
42
|
+
yets = autonyms.select { |autonym| !instance.assigned?(autonym) }
|
43
|
+
unless yets.empty?
|
44
|
+
raise "not assigned members are, yet '#{yets.inspect} in #{self}'"
|
45
|
+
end
|
65
46
|
|
66
|
-
|
47
|
+
invalids = autonyms.select { |autonym| !instance.valid?(autonym) }
|
48
|
+
if strict && !invalids.empty?
|
49
|
+
raise Validation::InvalidWritingError,
|
50
|
+
"invalids members are, yet '#{invalids.inspect} in #{self}'"
|
51
|
+
end
|
52
|
+
|
53
|
+
instance.lock_all if lock
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
# @endgroup
|
58
|
+
end
|
59
|
+
end
|
@@ -1,52 +1,54 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
class Striuct
|
4
|
+
module ClassMethods
|
5
|
+
# @group Basic Methods for Ruby's Object
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
# @return [Class]
|
8
|
+
def clone
|
9
|
+
ret = super
|
10
|
+
ret.__send__(:close_member) if closed?
|
11
|
+
ret
|
12
|
+
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
# @return [Class]
|
15
|
+
def dup
|
16
|
+
copy_variables!(super)
|
17
|
+
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
def inherited(subclass)
|
20
|
-
ret = super subclass
|
21
|
-
copy_variables! subclass
|
22
|
-
ret
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize_copy(original)
|
26
|
-
ret = super original
|
27
|
-
@autonyms = @autonyms.dup
|
28
|
-
@aliases = @aliases.dup
|
29
|
-
@attributes = @attributes.deep_dup
|
30
|
-
ret
|
31
|
-
end
|
19
|
+
private
|
32
20
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
attributes = @attributes.deep_dup
|
38
|
-
conflict_management = @conflict_management_level
|
39
|
-
|
40
|
-
familar_class.class_eval do
|
41
|
-
@autonyms = autonyms
|
42
|
-
@aliases = aliases
|
43
|
-
@attributes = attributes
|
44
|
-
@conflict_management_level = conflict_management
|
21
|
+
def inherited(subclass)
|
22
|
+
ret = super(subclass)
|
23
|
+
copy_variables!(subclass)
|
24
|
+
ret
|
45
25
|
end
|
46
26
|
|
47
|
-
|
48
|
-
|
27
|
+
def initialize_copy(original)
|
28
|
+
ret = super(original)
|
29
|
+
@autonyms = @autonyms.dup
|
30
|
+
@aliases = @aliases.dup
|
31
|
+
@attributes = @attributes.deep_dup
|
32
|
+
ret
|
33
|
+
end
|
49
34
|
|
50
|
-
|
35
|
+
# @return [familiar_class]
|
36
|
+
def copy_variables!(familiar_class)
|
37
|
+
autonyms = @autonyms.dup
|
38
|
+
aliases = @aliases.dup
|
39
|
+
attributes = @attributes.deep_dup
|
40
|
+
conflict_management = @conflict_management_level
|
41
|
+
|
42
|
+
familiar_class.class_eval do
|
43
|
+
@autonyms = autonyms
|
44
|
+
@aliases = aliases
|
45
|
+
@attributes = attributes
|
46
|
+
@conflict_management_level = conflict_management
|
47
|
+
end
|
48
|
+
|
49
|
+
familiar_class
|
50
|
+
end
|
51
51
|
|
52
|
-
|
52
|
+
# @endgroup
|
53
|
+
end
|
54
|
+
end
|
@@ -1,24 +1,26 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def default_value_for(key)
|
7
|
-
autonym = autonym_for_key key
|
8
|
-
raise KeyError unless with_default? autonym
|
9
|
-
|
10
|
-
_attributes_for(autonym).default_value
|
11
|
-
end
|
3
|
+
class Striuct
|
4
|
+
module ClassMethods
|
5
|
+
# @group With default value
|
12
6
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
# @endgroup
|
7
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
8
|
+
def default_value_for(key)
|
9
|
+
autonym = autonym_for_key(key)
|
10
|
+
raise KeyError unless with_default?(autonym)
|
11
|
+
|
12
|
+
_attributes_for(autonym).default_value
|
13
|
+
end
|
23
14
|
|
24
|
-
|
15
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
16
|
+
# @return [Symbol] :value / :proc
|
17
|
+
def default_type_for(key)
|
18
|
+
autonym = autonym_for_key(key)
|
19
|
+
raise KeyError unless with_default?(autonym)
|
20
|
+
|
21
|
+
_attributes_for(autonym).default_type
|
22
|
+
end
|
23
|
+
|
24
|
+
# @endgroup
|
25
|
+
end
|
26
|
+
end
|
@@ -1,45 +1,47 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
return
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Striuct
|
4
|
+
module ClassMethods
|
5
|
+
# @group Enumerative
|
6
|
+
|
7
|
+
# @yield [autonym]
|
8
|
+
# @yieldparam [Symbol] autonym - sequential under defined
|
9
|
+
# @yieldreturn [Class] self
|
10
|
+
# @return [Enumerator]
|
11
|
+
def each_autonym
|
12
|
+
return to_enum(__callee__) { size } unless block_given?
|
13
|
+
|
14
|
+
@autonyms.each { |autonym| yield autonym }
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :each_member, :each_autonym
|
19
|
+
|
20
|
+
# @yield [index]
|
21
|
+
# @yieldparam [Integer] Index
|
22
|
+
# @yieldreturn [Class] self
|
23
|
+
# @return [Enumerator]
|
24
|
+
def each_index
|
25
|
+
return to_enum(__callee__) { size } unless block_given?
|
26
|
+
|
27
|
+
@autonyms.each_index { |index| yield index }
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
# @yield [autonym, index]
|
32
|
+
# @yieldparam [Symbol] autonym
|
33
|
+
# @yieldparam [Integer] index
|
34
|
+
# @yieldreturn [Class] self
|
35
|
+
# @return [Enumerator]
|
36
|
+
def each_autonym_with_index
|
37
|
+
return to_enum(__callee__) { size } unless block_given?
|
38
|
+
|
39
|
+
@autonyms.each_with_index { |autonym, index| yield autonym, index }
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
alias_method :each_member_with_index, :each_autonym_with_index
|
44
|
+
|
45
|
+
# @endgroup
|
14
46
|
end
|
15
|
-
|
16
|
-
alias_method :each_member, :each_autonym
|
17
|
-
|
18
|
-
# @yield [index]
|
19
|
-
# @yieldparam [Integer] Index
|
20
|
-
# @yieldreturn [Class] self
|
21
|
-
# @return [Enumerator]
|
22
|
-
def each_index
|
23
|
-
return to_enum(__callee__) { size } unless block_given?
|
24
|
-
|
25
|
-
@autonyms.each_index{|index|yield index}
|
26
|
-
self
|
27
|
-
end
|
28
|
-
|
29
|
-
# @yield [autonym, index]
|
30
|
-
# @yieldparam [Symbol] autonym
|
31
|
-
# @yieldparam [Integer] index
|
32
|
-
# @yieldreturn [Class] self
|
33
|
-
# @return [Enumerator]
|
34
|
-
def each_autonym_with_index
|
35
|
-
return to_enum(__callee__) { size } unless block_given?
|
36
|
-
|
37
|
-
@autonyms.each_with_index{|autonym, index|yield autonym, index}
|
38
|
-
self
|
39
|
-
end
|
40
|
-
|
41
|
-
alias_method :each_member_with_index, :each_autonym_with_index
|
42
|
-
|
43
|
-
# @endgroup
|
44
|
-
|
45
|
-
end; end
|
47
|
+
end
|
@@ -1,28 +1,30 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
class Striuct
|
4
|
+
module ClassMethods
|
5
|
+
# @group Fix inner data structures
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
# @return [self]
|
8
|
+
def freeze
|
9
|
+
[@autonyms, @attributes, @aliases].each(&:freeze)
|
10
|
+
super
|
11
|
+
end
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
def closed?
|
14
|
+
[@autonyms, @attributes, @aliases].any?(&:frozen?)
|
15
|
+
end
|
14
16
|
|
15
|
-
|
17
|
+
private
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
alias_method :fix_structural, :close_member
|
24
|
-
alias_method :close, :close_member
|
19
|
+
# @return [self]
|
20
|
+
def close_member
|
21
|
+
[@autonyms, @attributes, @aliases].each(&:freeze)
|
22
|
+
self
|
23
|
+
end
|
25
24
|
|
26
|
-
|
25
|
+
alias_method :fix_structural, :close_member
|
26
|
+
alias_method :close, :close_member
|
27
27
|
|
28
|
-
|
28
|
+
# @endgroup
|
29
|
+
end
|
30
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
class Striuct
|
4
|
+
module ClassMethods
|
5
|
+
module HashDeepDupulicatable
|
6
|
+
# @return [Hash]
|
7
|
+
def deep_dup
|
8
|
+
dup.tap { |h|
|
9
|
+
each_pair do |key, value|
|
10
|
+
h[key] = value.dup
|
11
|
+
end
|
12
|
+
h.extend HashDeepDupulicatable
|
13
|
+
}
|
14
|
+
end
|
13
15
|
end
|
14
16
|
|
17
|
+
private_constant :HashDeepDupulicatable
|
15
18
|
end
|
16
|
-
|
17
|
-
private_constant :HashDeepDupulicatable
|
18
|
-
|
19
|
-
end; end
|
19
|
+
end
|
@@ -1,71 +1,73 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# @group Inner Methods
|
4
|
-
|
5
|
-
# for debug
|
6
|
-
# @return [Hash]
|
7
|
-
def attributes
|
8
|
-
{
|
9
|
-
autonyms: @autonyms.dup,
|
10
|
-
aliases: @aliases.dup,
|
11
|
-
conflict_management_level: @conflict_management_level,
|
12
|
-
attributes_each_autonym: @attributes.dup
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
1
|
+
# frozen_string_literal: true
|
17
2
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
@aliases = {} # aliased => autonym
|
22
|
-
@conflict_management_level = DEFAULT_CONFLICT_MANAGEMENT_LEVEL
|
23
|
-
end
|
3
|
+
class Striuct
|
4
|
+
module ClassMethods
|
5
|
+
# @group Inner Methods
|
24
6
|
|
25
|
-
|
26
|
-
|
27
|
-
|
7
|
+
# for debug
|
8
|
+
# @return [Hash]
|
9
|
+
def attributes
|
10
|
+
{
|
11
|
+
autonyms: @autonyms.dup,
|
12
|
+
aliases: @aliases.dup,
|
13
|
+
conflict_management_level: @conflict_management_level,
|
14
|
+
attributes_each_autonym: @attributes.dup
|
15
|
+
}
|
16
|
+
end
|
28
17
|
|
29
|
-
|
30
|
-
@autonyms << autonym
|
31
|
-
end
|
18
|
+
private
|
32
19
|
|
33
|
-
|
34
|
-
|
35
|
-
|
20
|
+
def _init
|
21
|
+
@autonyms = []
|
22
|
+
@attributes = {}.extend HashDeepDupulicatable # autonym => Attributes
|
23
|
+
@aliases = {} # aliased => autonym
|
24
|
+
@conflict_management_level = DEFAULT_CONFLICT_MANAGEMENT_LEVEL
|
25
|
+
end
|
36
26
|
|
37
|
-
|
38
|
-
|
39
|
-
|
27
|
+
def _add_autonym(autonym)
|
28
|
+
autonym = autonym.to_sym
|
29
|
+
raise NameError, 'already defined' if member?(autonym)
|
40
30
|
|
41
|
-
|
42
|
-
|
43
|
-
|
31
|
+
@attributes[autonym] = Attributes.new
|
32
|
+
@autonyms << autonym
|
33
|
+
end
|
44
34
|
|
45
|
-
|
46
|
-
|
47
|
-
_get autonym
|
35
|
+
def _attributes_for(autonym)
|
36
|
+
@attributes.fetch(autonym)
|
48
37
|
end
|
49
|
-
|
50
|
-
nil
|
51
|
-
end
|
52
38
|
|
53
|
-
|
54
|
-
|
55
|
-
_attributes_for(autonym).condition = condition
|
39
|
+
def _check_frozen
|
40
|
+
raise "can't modify frozen Class" if frozen?
|
56
41
|
end
|
57
42
|
|
58
|
-
|
59
|
-
|
43
|
+
def _check_closed
|
44
|
+
raise "can't modify closed member attributes in #{self}" if closed?
|
60
45
|
end
|
61
46
|
|
62
|
-
|
63
|
-
|
47
|
+
def _def_getter(autonym)
|
48
|
+
define_method(autonym) do
|
49
|
+
_get(autonym)
|
50
|
+
end
|
51
|
+
|
52
|
+
nil
|
64
53
|
end
|
65
|
-
|
66
|
-
nil
|
67
|
-
end
|
68
54
|
|
69
|
-
|
55
|
+
def _def_setter(autonym, condition, &adjuster)
|
56
|
+
unless ANYTHING.equal?(condition)
|
57
|
+
_attributes_for(autonym).condition = condition
|
58
|
+
end
|
59
|
+
|
60
|
+
if adjuster
|
61
|
+
_attributes_for(autonym).adjuster = adjuster
|
62
|
+
end
|
70
63
|
|
71
|
-
|
64
|
+
define_method(:"#{autonym}=") do |value|
|
65
|
+
_set(autonym, value)
|
66
|
+
end
|
67
|
+
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
|
71
|
+
# @endgroup
|
72
|
+
end
|
73
|
+
end
|