striuct 0.3.4 → 0.3.5

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 (39) hide show
  1. data/History.rdoc +6 -0
  2. data/Manifest.txt +13 -7
  3. data/README.md +12 -10
  4. data/example/README.rb +5 -3
  5. data/lib/striuct/attributes.rb +114 -0
  6. data/lib/striuct/classmethods/adjustment.rb +8 -15
  7. data/lib/striuct/classmethods/copy.rb +55 -0
  8. data/lib/striuct/classmethods/default.rb +18 -13
  9. data/lib/striuct/classmethods/enum.rb +1 -3
  10. data/lib/striuct/classmethods/fix.rb +28 -0
  11. data/lib/striuct/classmethods/hashy.rb +22 -0
  12. data/lib/striuct/classmethods/inner.rb +24 -58
  13. data/lib/striuct/classmethods/macro.rb +33 -47
  14. data/lib/striuct/classmethods/named.rb +52 -40
  15. data/lib/striuct/classmethods/prevent_conflicts.rb +1 -1
  16. data/lib/striuct/classmethods/requiremnets.rb +4 -2
  17. data/lib/striuct/classmethods/validation.rb +19 -22
  18. data/lib/striuct/hashdeepdupulicatable.rb +21 -0
  19. data/lib/striuct/instancemethods/assign.rb +9 -6
  20. data/lib/striuct/instancemethods/default.rb +1 -1
  21. data/lib/striuct/instancemethods/delegate_class_methods.rb +11 -5
  22. data/lib/striuct/instancemethods/hashy.rb +1 -1
  23. data/lib/striuct/instancemethods/{inner.rb → inner_accessor.rb} +6 -13
  24. data/lib/striuct/instancemethods/lock.rb +7 -4
  25. data/lib/striuct/instancemethods/object.rb +25 -28
  26. data/lib/striuct/instancemethods/requirements.rb +3 -2
  27. data/lib/striuct/instancemethods/subscript.rb +4 -32
  28. data/lib/striuct/instancemethods/to_s.rb +35 -0
  29. data/lib/striuct/instancemethods/validation.rb +1 -1
  30. data/lib/striuct/instancemethods/values.rb +0 -17
  31. data/lib/striuct/requirements.rb +3 -2
  32. data/lib/striuct/singleton_class.rb +6 -4
  33. data/lib/striuct/version.rb +1 -1
  34. data/test/test_striuct-subclass-class-copy.rb +71 -0
  35. data/test/{test_striuct-subclass-instance-cloning.rb → test_striuct-subclass-instance-copy.rb} +2 -2
  36. metadata +13 -9
  37. data/lib/striuct/classmethods/object.rb +0 -54
  38. data/lib/striuct/specificcontainer.rb +0 -19
  39. data/test/test_striuct-subclass-class-cloning.rb +0 -21
@@ -18,10 +18,6 @@ class Striuct; module ClassMethods
18
18
  setter_validation: true
19
19
  }.freeze
20
20
 
21
- def closed?
22
- [@autonyms, @adjusters, @defaults, @aliases].any?(&:frozen?)
23
- end
24
-
25
21
  private
26
22
 
27
23
  # @param [Symbol, String] autonym
@@ -36,6 +32,7 @@ class Striuct; module ClassMethods
36
32
  # @option options [Boolean] :setter_validation
37
33
  # @return [nil]
38
34
  def add_member(autonym, condition=Validation::Condition::ANYTHING, options=DEFAULT_MEMBER_OPTIONS, &adjuster)
35
+ raise "can't modify frozen Class" if frozen?
39
36
  raise "already closed to add member in #{self}" if closed?
40
37
  options = DEFAULT_MEMBER_OPTIONS.merge(options).extend(KeyValidatable)
41
38
  options.validate_keys let: VALID_MEMBER_OPTIONS
@@ -43,17 +40,26 @@ class Striuct; module ClassMethods
43
40
  raise ArgumentError, 'It is not able to choose "default" with "default_proc" in options'
44
41
  end
45
42
 
46
- autonym = keyable_for autonym # First difinition for an autonym
43
+ autonym = _nameable_for autonym # First difinition for an autonym
47
44
 
48
45
  raise ArgumentError, %Q!already exist name "#{autonym}"! if member? autonym
49
46
  _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]
47
+ _add_autonym autonym
53
48
 
54
- @autonyms << autonym
55
- __getter__! autonym
56
- __setter__! autonym, condition, &adjuster
49
+ if options[:setter_validation] or options[:writer_validation]
50
+ _attributes_for(autonym).validate_with_setter = true
51
+ end
52
+
53
+ if options[:getter_validation] or options[:reader_validation]
54
+ _attributes_for(autonym).validate_with_getter = true
55
+ end
56
+
57
+ if options[:inference]
58
+ _attributes_for(autonym).inference = true
59
+ end
60
+
61
+ _def_getter! autonym
62
+ _def_setter! autonym, condition, &adjuster
57
63
 
58
64
  if options.has_key?(:default)
59
65
  set_default_value autonym, options.fetch(:default)
@@ -72,6 +78,7 @@ class Striuct; module ClassMethods
72
78
  # @param [Symbol, String] autonyms
73
79
  # @return [nil]
74
80
  def add_members(autonym, *autonyms)
81
+ raise "can't modify frozen Class" if frozen?
75
82
  raise "already closed to add members in #{self}" if closed?
76
83
 
77
84
  [autonym, *autonyms].each {|_autonym|add_member _autonym}
@@ -82,63 +89,42 @@ class Striuct; module ClassMethods
82
89
  # @param [Symbol, String] autonym
83
90
  # @return [nil]
84
91
  def alias_member(aliased, autonym)
92
+ raise "can't modify frozen Class" if frozen?
85
93
  raise "already closed to add members in #{self}" if closed?
86
- autonym = autonym_for autonym
87
- aliased = keyable_for aliased
94
+ autonym = autonym_for_name autonym
95
+ aliased = _nameable_for aliased
88
96
  raise ArgumentError, %Q!already exist name "#{aliased}"! if member? aliased
89
97
  _check_safety_naming aliased
90
98
 
91
99
  alias_method aliased, autonym
92
100
  alias_method :"#{aliased}=", :"#{autonym}="
93
- _alias_member aliased, autonym
101
+ @aliases[aliased] = autonym
94
102
  nil
95
103
  end
96
104
 
97
105
  # @param [Symbol, String] name
98
106
  # @return [nil]
99
107
  def set_default_value(name, value=nil, &block)
108
+ raise "can't modify frozen Class" if frozen?
100
109
  raise "already closed to modify member attributes in #{self}" if closed?
101
- autonym = autonym_for(name)
110
+ autonym = autonym_for_name(name)
102
111
  raise "already settled default value for #{name}" if has_default? autonym
103
112
 
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
113
+ if block_given?
114
+ unless value.nil?
115
+ raise ArgumentError, 'can not use default-value with default-proc'
119
116
  end
120
- )
117
+
118
+ _attributes_for(autonym).set_default block, :lazy
119
+ else
120
+ _attributes_for(autonym).set_default value, :value
121
+ end
121
122
 
122
- _set_default_value autonym, value
123
123
  nil
124
124
  end
125
125
 
126
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
-
127
+
142
128
  # @endgroup
143
129
 
144
130
  end; end
@@ -2,12 +2,6 @@ class Striuct; module ClassMethods
2
2
 
3
3
  # @group Named
4
4
 
5
- # @param [Symbol, String, #to_sym] name
6
- # @return [Symbol]
7
- def keyable_for(name)
8
- name.to_sym
9
- end
10
-
11
5
  # @return [Array<Symbol>]
12
6
  def autonyms
13
7
  @autonyms.dup
@@ -15,7 +9,6 @@ class Striuct; module ClassMethods
15
9
 
16
10
  alias_method :names, :autonyms
17
11
  alias_method :members, :autonyms
18
- alias_method :keys, :autonyms
19
12
 
20
13
  # @return [Array<Symbol>]
21
14
  def all_members
@@ -23,7 +16,7 @@ class Striuct; module ClassMethods
23
16
  end
24
17
 
25
18
  def has_member?(name)
26
- autonym_for name
19
+ autonym_for_name name
27
20
  rescue Exception
28
21
  false
29
22
  else
@@ -31,44 +24,68 @@ class Striuct; module ClassMethods
31
24
  end
32
25
 
33
26
  alias_method :member?, :has_member?
34
- alias_method :has_key?, :has_member?
35
- alias_method :key?, :has_key?
36
27
 
37
- # @param [Symbol, String, #to_sym, #to_str] name
28
+ # @param [Symbol, String, #to_sym] name - autonym / aliased
38
29
  # @return [Symbol]
39
- def autonym_for(name)
40
- name = keyable_for name
30
+ def autonym_for_name(name)
31
+ name = _nameable_for name
41
32
 
42
- if @autonyms.include? name
43
- name
44
- else
45
- if autonym = _autonym_for(name)
46
- autonym
33
+ return name if @autonyms.include? name
34
+
35
+ unless @aliases.has_key? name
36
+ raise NameError, "not defined member for #{name}"
37
+ end
38
+
39
+ @aliases.fetch name
40
+ end
41
+
42
+ alias_method :autonym_for, :autonym_for_name # todo modify to autonym_for_key
43
+
44
+ # @param [Symbol, String, Fixnum] key - autonym / aliased / index
45
+ # @return [Symbol] autonym
46
+ def autonym_for_key(key)
47
+ case key
48
+ when Symbol, String
49
+ name = _nameable_for key
50
+ if member? name
51
+ return autonym_for_name(name)
47
52
  else
48
- raise NameError, "not defined member for #{name}"
53
+ raise NameError
49
54
  end
55
+ when Fixnum
56
+ if autonym = _autonyms[key]
57
+ return autonym
58
+ else
59
+ raise IndexError
60
+ end
61
+ else
62
+ raise ArgumentError
50
63
  end
64
+
65
+ raise 'must not happen'
51
66
  end
52
67
 
53
68
  # @param [Symbol, String] name
54
- def autonym?(name)
55
- name = keyable_for name
69
+ def has_autonym?(name)
70
+ name = _nameable_for name
56
71
  raise NameError unless member? name
57
72
 
58
73
  @autonyms.include? name
59
74
  end
60
75
 
61
- alias_method :original?, :autonym?
76
+ alias_method :autonym?, :has_autonym?
77
+ alias_method :original?, :has_autonym? # obsolute
62
78
 
63
79
  # @param [Symbol, String] name
64
- def alias?(name)
65
- name = keyable_for name
80
+ def has_alias?(name)
81
+ name = _nameable_for name
66
82
  raise NameError unless member? name
67
83
 
68
84
  @aliases.has_key? name
69
85
  end
70
86
 
71
- alias_method :aliased?, :alias?
87
+ alias_method :alias?, :has_alias?
88
+ alias_method :aliased?, :has_alias? # obsolute
72
89
 
73
90
  # @param [Symbol, String] autonym
74
91
  def has_aliases?(autonym)
@@ -80,10 +97,10 @@ class Striuct; module ClassMethods
80
97
  # @param [Symbol, String] autonym
81
98
  # @return [Array<Symbol>]
82
99
  def aliases_for(autonym)
83
- autonym = keyable_for autonym
100
+ autonym = _nameable_for autonym
84
101
  raise NameError unless has_aliases? autonym
85
102
 
86
- _aliases_for autonym
103
+ @aliases.group_by{|aliased, an|an}.fetch(autonym)
87
104
  end
88
105
 
89
106
  # @return [Hash] alias => autonym
@@ -92,23 +109,18 @@ class Striuct; module ClassMethods
92
109
  end
93
110
 
94
111
  private
112
+
113
+ # @param [Symbol, String, #to_sym] name
114
+ # @return [Symbol]
115
+ def _nameable_for(name)
116
+ name.to_sym
117
+ end
95
118
 
119
+ # for access from own instance
96
120
  def _autonyms
97
121
  @autonyms
98
122
  end
99
123
 
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
124
  # @endgroup
113
125
 
114
- end; end
126
+ end; end
@@ -21,7 +21,7 @@ class Striuct; module ClassMethods
21
21
  # @param [Object] name
22
22
  # accpeptable the name into own member, under protect level of runtime
23
23
  def cname?(name)
24
- _check_safety_naming(keyable_for name){|r|r}
24
+ _check_safety_naming(_nameable_for name){|r|r}
25
25
  rescue Exception
26
26
  false
27
27
  end
@@ -1,12 +1,14 @@
1
1
  require_relative 'inner'
2
2
  require_relative 'named'
3
- require_relative 'object'
3
+ require_relative 'copy'
4
+ require_relative 'fix'
4
5
  require_relative 'length'
5
6
  require_relative 'to_struct'
6
7
  require_relative 'constructor'
7
8
  require_relative 'enum'
9
+ require_relative 'hashy'
8
10
  require_relative 'default'
9
11
  require_relative 'adjustment'
10
12
  require_relative 'macro'
11
13
  require_relative 'prevent_conflicts'
12
- require_relative 'validation'
14
+ require_relative 'validation'
@@ -5,52 +5,49 @@ class Striuct; module ClassMethods
5
5
  # @param [Symbol, String] name
6
6
  # inference checker is waiting yet
7
7
  def inference?(name)
8
- autonym = autonym_for name
8
+ autonym = autonym_for_name name
9
9
 
10
- @inferences.has_key? autonym
10
+ _attributes_for(autonym).inference?
11
11
  end
12
12
 
13
13
  # @param [Symbol, String] name
14
- def has_validator?(name)
15
- autonym = autonym_for name
14
+ def has_condition?(name)
15
+ autonym = autonym_for_name name
16
16
 
17
- @conditions.has_key? autonym
17
+ _attributes_for(autonym).has_condition?
18
18
  end
19
19
 
20
- alias_method :has_condition?, :has_validator?
21
- alias_method :restrict?, :has_validator?
22
-
20
+ alias_method :restrict?, :has_condition?
21
+ alias_method :has_validator?, :has_condition? # obsolute
22
+
23
23
  # @param [Symbol, String] name
24
- def validator_for(name)
25
- _condition_for autonym_for(name)
24
+ def condition_for(name)
25
+ return nil unless has_condition? name
26
+ autonym = autonym_for_name name
27
+
28
+ _attributes_for(autonym).condition
26
29
  end
27
30
 
28
- alias_method :condition_for, :validator_for
31
+ alias_method :validator_for, :condition_for # obsolute
29
32
 
30
33
  # @param [Symbol, String] name
31
34
  def safety_getter?(name)
32
- autonym = autonym_for name
35
+ autonym = autonym_for_name name
33
36
 
34
- @getter_validations.has_key? autonym
37
+ _attributes_for(autonym).validate_with_getter?
35
38
  end
36
39
 
37
40
  alias_method :safety_reader?, :safety_getter?
38
41
 
39
42
  # @param [Symbol, String] name
40
43
  def safety_setter?(name)
41
- autonym = autonym_for name
44
+ autonym = autonym_for_name name
42
45
 
43
- @setter_validations.has_key? autonym
46
+ _attributes_for(autonym).validate_with_setter?
44
47
  end
45
48
 
46
49
  alias_method :safety_writer?, :safety_setter?
47
50
 
48
- private
49
-
50
- def _condition_for(name)
51
- @conditions[name]
52
- end
53
-
54
51
  # @endgroup
55
52
 
56
- end; end
53
+ end; end
@@ -0,0 +1,21 @@
1
+ class Striuct
2
+
3
+ module HashDeepDupulicatable
4
+
5
+ # @return [Hash]
6
+ def deep_dup
7
+ dup.tap {|h|
8
+ each_pair do |key, value|
9
+ h[key] = value.dup
10
+ end
11
+ h.extend HashDeepDupulicatable
12
+ }
13
+ end
14
+
15
+ end
16
+
17
+ if respond_to? :private_constant
18
+ private_constant :HashDeepDupulicatable
19
+ end
20
+
21
+ end
@@ -8,18 +8,21 @@ class Striuct; module InstanceMethods
8
8
 
9
9
  # @param [Symbol, String] name
10
10
  def assign?(name)
11
- autonym = autonym_for name
11
+ autonym = autonym_for_name name
12
12
 
13
13
  @db.has_key? autonym
14
14
  end
15
15
 
16
16
  # @param [Symbol, String, Fixnum] key
17
- def clear_at(key)
18
- __subscript__(key){|autonym|__clear__ autonym}
17
+ def unassign(key)
18
+ raise "can't modify frozen #{self.class}" if frozen?
19
+ autonym = autonym_for_key key
20
+
21
+ @db.delete autonym
19
22
  end
20
23
 
21
- alias_method :unassign, :clear_at
22
- alias_method :reset_at, :clear_at
24
+ alias_method :clear_at, :unassign # obsolute
25
+ alias_method :reset_at, :unassign
23
26
 
24
27
  # all members aren't assigned
25
28
  def empty?
@@ -28,4 +31,4 @@ class Striuct; module InstanceMethods
28
31
 
29
32
  # @endgroup
30
33
 
31
- end; end
34
+ end; end
@@ -4,7 +4,7 @@ class Striuct; module InstanceMethods
4
4
 
5
5
  # @param [Symbol, String] name
6
6
  def default?(name)
7
- autonym = autonym_for name
7
+ autonym = autonym_for_name name
8
8
 
9
9
  default_for(autonym) == self[autonym]
10
10
  end
@@ -10,18 +10,24 @@ class Striuct; module InstanceMethods
10
10
  # @group Delegate Class Methods
11
11
 
12
12
  def_delegators :'self.class',
13
- :_autonyms,
14
- :keyable_for, :autonym_for, :aliases_for,
13
+ :_autonyms, :_nameable_for,
14
+ :autonym_for, :autonym_for_name, :autonym_for_key,
15
+ :aliases_for,
15
16
  :validator_for, :condition_for,
16
17
  :adjuster_for, :flavor_for,
17
18
  :members, :keys, :names, :autonyms, :all_members, :aliases,
18
19
  :has_member?, :member?, :has_key?, :key?,
20
+ :has_autonym?, :autonym?,
21
+ :has_alias?, :alias?, :aliased?,
22
+ :has_aliases?,
19
23
  :length, :size,
20
24
  :restrict?, :has_validator?, :has_condition?,
21
- :safety_getter?, :safety_reader?, :safety_setter?, :safty_writer?, :inference?,
22
- :has_default?, :default_for, :has_adjuster?, :has_flavor?
25
+ :safety_getter?, :safety_reader?, :safety_setter?, :safty_writer?,
26
+ :inference?,
27
+ :has_default?, :default_value_for, :default_for, :default_type_for,
28
+ :has_adjuster?, :has_flavor?
23
29
 
24
- private :_autonyms
30
+ private :_autonyms, :_nameable_for
25
31
 
26
32
  # @endgroup
27
33
 
@@ -81,7 +81,7 @@ class Striuct; module InstanceMethods
81
81
  # @param [Symbol, String] name
82
82
  # @return [Array] e.g [autonym, value]
83
83
  def assoc(name)
84
- autonym = autonym_for name
84
+ autonym = autonym_for_name name
85
85
 
86
86
  [autonym, self[name]]
87
87
  end
@@ -1,11 +1,11 @@
1
1
  class Striuct; module InstanceMethods
2
2
 
3
- # @group Use Only Inner
3
+ # @group These Accessor API using only inner
4
4
 
5
5
  private
6
6
 
7
- def __get__(name)
8
- autonym = autonym_for name
7
+ def _get(name)
8
+ autonym = autonym_for_name name
9
9
  value = @db[autonym]
10
10
 
11
11
  if safety_getter?(autonym) and !accept?(autonym, value)
@@ -16,9 +16,9 @@ class Striuct; module InstanceMethods
16
16
  value
17
17
  end
18
18
 
19
- def __set__(name, value)
19
+ def _set(name, value)
20
20
  raise "can't modify frozen #{self.class}" if frozen?
21
- autonym = autonym_for name
21
+ autonym = autonym_for_name name
22
22
  raise "can't modify locked member #{name}" if lock? autonym
23
23
 
24
24
  if has_adjuster? autonym
@@ -35,7 +35,7 @@ class Striuct; module InstanceMethods
35
35
  end
36
36
 
37
37
  if inference? autonym
38
- self.class.__send__ :__found_family__!, self, autonym, value
38
+ self.class.__send__ :_found_family!, self, autonym, value
39
39
  end
40
40
 
41
41
  @db[autonym] = value
@@ -48,13 +48,6 @@ class Striuct; module InstanceMethods
48
48
  raise
49
49
  end
50
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
51
  # @endgroup
59
52
 
60
53
  end; end
@@ -17,7 +17,8 @@ class Striuct; module InstanceMethods
17
17
  @locks[autonym] = true
18
18
  end
19
19
  else
20
- __subscript__(key){|autonym|@locks[autonym] = true}
20
+ autonym = autonym_for_key key
21
+ @locks[autonym] = true
21
22
  end
22
23
 
23
24
  self
@@ -33,7 +34,8 @@ class Striuct; module InstanceMethods
33
34
  if key.equal? true
34
35
  _autonyms.all?{|autonym|@locks[autonym]}
35
36
  else
36
- __subscript__(key){|autonym|@locks[autonym]} || false
37
+ autonym = autonym_for_key key
38
+ @locks[autonym] || false
37
39
  end
38
40
  end
39
41
 
@@ -51,7 +53,8 @@ class Striuct; module InstanceMethods
51
53
  if key.equal? true
52
54
  @locks.clear
53
55
  else
54
- __subscript__(key){|autonym|@locks.delete autonym}
56
+ autonym = autonym_for_key key
57
+ @locks.delete autonym
55
58
  end
56
59
 
57
60
  self
@@ -59,4 +62,4 @@ class Striuct; module InstanceMethods
59
62
 
60
63
  # @endgroup
61
64
 
62
- end; end
65
+ end; end
@@ -5,34 +5,8 @@ class Striuct; module InstanceMethods
5
5
  def initialize(*values)
6
6
  @db, @locks = {}, {}
7
7
  replace_values(*values)
8
- end
9
-
10
- # @return [String]
11
- def inspect
12
- "#<struct' #{self.class} strict?:#{strict?}".tap {|s|
13
- each_pair do |autonym, value|
14
- suffix = (has_default?(autonym) && default?(autonym)) ? '/default' : nil
15
- s << " #{autonym}=#{value.inspect}#{suffix}("
16
- s << "valid?:#{valid? autonym}, "
17
- s << "lock?:#{lock? autonym}"
18
- s << '),'
19
- end
20
-
21
- s.chop!
22
- s << '>'
23
- }
24
- end
25
-
26
- # @return [String]
27
- def to_s
28
- "#<struct' #{self.class}".tap {|s|
29
- each_pair do |autonym, value|
30
- s << " #{autonym}=#{value.inspect},"
31
- end
32
-
33
- s.chop!
34
- s << '>'
35
- }
8
+ excess = _autonyms.last(size - values.size)
9
+ set_defaults(*excess)
36
10
  end
37
11
 
38
12
  # @return [self]
@@ -49,4 +23,27 @@ class Striuct; module InstanceMethods
49
23
 
50
24
  # @endgroup
51
25
 
26
+ # @group Default Value
27
+
28
+ # @return [self]
29
+ def set_defaults(*target_autonyms)
30
+ target_autonyms.each do |autonym|
31
+ if has_default? autonym
32
+ default = default_value_for autonym
33
+ self[autonym] = (
34
+ if default_type_for(autonym) == :lazy
35
+ args = [self, autonym][0, default.arity]
36
+ default.call(*args)
37
+ else
38
+ default
39
+ end
40
+ )
41
+ end
42
+ end
43
+
44
+ self
45
+ end
46
+
47
+ # @endgroup
48
+
52
49
  end; end
@@ -1,8 +1,9 @@
1
1
  require_relative 'delegate_class_methods'
2
2
  require_relative 'keyvalidatable'
3
- require_relative 'inner'
3
+ require_relative 'inner_accessor'
4
4
  require_relative 'object'
5
5
  require_relative 'compare'
6
+ require_relative 'to_s'
6
7
  require_relative 'values'
7
8
  require_relative 'cast'
8
9
  require_relative 'default'
@@ -12,4 +13,4 @@ require_relative 'subscript'
12
13
  require_relative 'assign'
13
14
  require_relative 'lock'
14
15
  require_relative 'validation'
15
- require_relative 'safety'
16
+ require_relative 'safety'