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.
Files changed (88) hide show
  1. data/.gitignore +35 -34
  2. data/.travis.yml +6 -6
  3. data/Gemfile +12 -12
  4. data/History.rdoc +279 -273
  5. data/LICENSE +21 -21
  6. data/Manifest.txt +91 -90
  7. data/README.ja.old.rdoc +297 -297
  8. data/README.md +128 -128
  9. data/Rakefile +11 -11
  10. data/benchmark/basics.rb +56 -56
  11. data/example/README.rb +44 -44
  12. data/example/example.old.rdoc +187 -187
  13. data/example/example1.rb +233 -233
  14. data/example/example2.rb +22 -22
  15. data/example/see_trace.rb +32 -32
  16. data/lib/striuct/classmethods/README.md +5 -5
  17. data/lib/striuct/classmethods/adjustment.rb +32 -32
  18. data/lib/striuct/classmethods/constructor.rb +63 -63
  19. data/lib/striuct/classmethods/default.rb +27 -27
  20. data/lib/striuct/classmethods/enum.rb +48 -48
  21. data/lib/striuct/classmethods/inner.rb +91 -91
  22. data/lib/striuct/classmethods/length.rb +14 -14
  23. data/lib/striuct/classmethods/macro.rb +144 -144
  24. data/lib/striuct/classmethods/named.rb +113 -113
  25. data/lib/striuct/classmethods/object.rb +54 -54
  26. data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
  27. data/lib/striuct/classmethods/requiremnets.rb +11 -11
  28. data/lib/striuct/classmethods/to_struct.rb +23 -25
  29. data/lib/striuct/classmethods/validation.rb +55 -55
  30. data/lib/striuct/classmethods.rb +1 -1
  31. data/lib/striuct/instancemethods/README.md +5 -5
  32. data/lib/striuct/instancemethods/assign.rb +30 -30
  33. data/lib/striuct/instancemethods/cast.rb +34 -34
  34. data/lib/striuct/instancemethods/compare.rb +30 -30
  35. data/lib/striuct/instancemethods/default.rb +13 -13
  36. data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
  37. data/lib/striuct/instancemethods/enum.rb +103 -103
  38. data/lib/striuct/instancemethods/hashy.rb +121 -121
  39. data/lib/striuct/instancemethods/inner.rb +60 -60
  40. data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
  41. data/lib/striuct/instancemethods/lock.rb +61 -61
  42. data/lib/striuct/instancemethods/object.rb +52 -52
  43. data/lib/striuct/instancemethods/requirements.rb +14 -14
  44. data/lib/striuct/instancemethods/safety.rb +11 -11
  45. data/lib/striuct/instancemethods/subscript.rb +55 -55
  46. data/lib/striuct/instancemethods/validation.rb +29 -25
  47. data/lib/striuct/instancemethods/values.rb +57 -57
  48. data/lib/striuct/instancemethods.rb +1 -1
  49. data/lib/striuct/requirements.rb +5 -5
  50. data/lib/striuct/singleton_class.rb +66 -66
  51. data/lib/striuct/specificcontainer.rb +19 -19
  52. data/lib/striuct/structs.rb +7 -7
  53. data/lib/striuct/version.rb +5 -5
  54. data/lib/striuct.rb +13 -13
  55. data/striuct.gemspec +24 -24
  56. data/test/helper.rb +5 -5
  57. data/test/test_striuct-singleton_class-define.rb +19 -19
  58. data/test/test_striuct-subclass-class-cloning.rb +20 -20
  59. data/test/test_striuct-subclass-class-close.rb +36 -36
  60. data/test/test_striuct-subclass-class-constructor.rb +82 -82
  61. data/test/test_striuct-subclass-class-freeze.rb +36 -36
  62. data/test/test_striuct-subclass-class-inheritable.rb +57 -57
  63. data/test/test_striuct-subclass-class-macro.rb +13 -13
  64. data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
  65. data/test/test_striuct-subclass-class-validation.rb +26 -26
  66. data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
  67. data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
  68. data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
  69. data/test/test_striuct-subclass-instance-accessor.rb +137 -137
  70. data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
  71. data/test/test_striuct-subclass-instance-assign.rb +30 -30
  72. data/test/test_striuct-subclass-instance-basic.rb +32 -32
  73. data/test/test_striuct-subclass-instance-cloning.rb +22 -22
  74. data/test/test_striuct-subclass-instance-compare.rb +51 -51
  75. data/test/test_striuct-subclass-instance-default_value.rb +128 -128
  76. data/test/test_striuct-subclass-instance-enum.rb +92 -92
  77. data/test/test_striuct-subclass-instance-freeze.rb +19 -19
  78. data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
  79. data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
  80. data/test/test_striuct-subclass-instance-lock.rb +39 -39
  81. data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
  82. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
  83. data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
  84. data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
  85. data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
  86. data/test/test_striuct-subclass-instance_names.rb +18 -18
  87. data/test/test_striuct-version.rb +10 -10
  88. 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