striuct 0.3.5.1 → 0.4.0
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/.travis.yml +3 -0
- data/.yardopts +1 -1
- data/LICENSE +1 -1
- data/README.md +7 -3
- data/example/example1.rb +5 -4
- data/lib/striuct/classmethods/README.md +9 -4
- data/lib/striuct/classmethods/adjustment.rb +4 -15
- data/lib/striuct/{attributes.rb → classmethods/attributes.rb} +15 -17
- data/lib/striuct/classmethods/{prevent_conflicts.rb → conflict_management.rb} +37 -14
- data/lib/striuct/classmethods/constructor.rb +2 -4
- data/lib/striuct/classmethods/copy.rb +2 -2
- data/lib/striuct/classmethods/default.rb +9 -18
- data/lib/striuct/classmethods/enum.rb +3 -5
- data/lib/striuct/classmethods/inner.rb +6 -10
- data/lib/striuct/classmethods/macro.rb +33 -48
- data/lib/striuct/classmethods/names.rb +75 -0
- data/lib/striuct/classmethods/predicate.rb +128 -0
- data/lib/striuct/classmethods/{requiremnets.rb → requirements.rb} +6 -3
- data/lib/striuct/classmethods/validation.rb +5 -43
- data/lib/striuct/instancemethods/README.md +4 -4
- data/lib/striuct/instancemethods/assign.rb +11 -13
- data/lib/striuct/instancemethods/cast.rb +5 -8
- data/lib/striuct/instancemethods/compare.rb +6 -6
- data/lib/striuct/instancemethods/default.rb +28 -6
- data/lib/striuct/instancemethods/delegate_class_methods.rb +21 -21
- data/lib/striuct/instancemethods/enum.rb +3 -9
- data/lib/striuct/instancemethods/getter.rb +47 -0
- data/lib/striuct/instancemethods/hashy.rb +2 -6
- data/lib/striuct/instancemethods/keyvalidatable.rb +0 -5
- data/lib/striuct/instancemethods/lock.rb +35 -43
- data/lib/striuct/instancemethods/object.rb +3 -26
- data/lib/striuct/instancemethods/requirements.rb +16 -2
- data/lib/striuct/instancemethods/safety.rb +1 -1
- data/lib/striuct/instancemethods/setter.rb +58 -0
- data/lib/striuct/instancemethods/to_s.rb +2 -2
- data/lib/striuct/instancemethods/validation.rb +13 -7
- data/lib/striuct/instancemethods/values.rb +8 -7
- data/lib/striuct/requirements.rb +2 -5
- data/lib/striuct/{hashdeepdupulicatable.rb → singleton_class/hashdeepdupulicatable.rb} +2 -2
- data/lib/striuct/singleton_class.rb +3 -4
- data/striuct.gemspec +7 -4
- data/test/test_sglc-constructor.rb +36 -0
- data/test/test_subc-c-constructor.rb +88 -0
- data/test/{test_striuct-subclass-class-safety_naming.rb → test_subc-c-safety_naming.rb} +6 -5
- data/test/test_subc-f-enum.rb +139 -0
- data/test/test_subc-f-predicate.rb +647 -0
- data/test/{test_striuct-subclass-feature-validation_util.rb → test_subc-f-validation_util.rb} +10 -8
- data/test/test_subc-f_name.rb +525 -0
- data/test/{test_striuct-subclass-instance-accessor.rb → test_subc-i-accessor.rb} +3 -2
- data/test/test_subc-i-assign.rb +49 -0
- data/test/test_subc-i-cast.rb +27 -0
- data/test/{test_striuct-subclass-instance-default_value.rb → test_subc-i-default_value.rb} +2 -2
- data/test/{test_striuct-subclass-instance-hashlike.rb → test_subc-i-hashlike.rb} +0 -9
- data/test/{test_striuct-subclass-instance-lock.rb → test_subc-i-lock.rb} +8 -8
- data/test/{test_striuct-subclass-instance-to_s_family.rb → test_subc-i-to_s_family.rb} +1 -1
- data/test/{test_striuct-subclass-instance-validation_specific_conditions.rb → test_subc-i-validation_specific_conditions.rb} +50 -0
- data/test/test_version.rb +14 -0
- metadata +124 -80
- data/Manifest.txt +0 -97
- data/README.ja.old.rdoc +0 -298
- data/example/example.old.rdoc +0 -188
- data/lib/striuct/classmethods/hashy.rb +0 -22
- data/lib/striuct/classmethods/named.rb +0 -126
- data/lib/striuct/classmethods.rb +0 -1
- data/lib/striuct/instancemethods/inner_accessor.rb +0 -53
- data/lib/striuct/instancemethods/subscript.rb +0 -27
- data/lib/striuct/instancemethods.rb +0 -1
- data/lib/striuct/version.rb +0 -5
- data/test/test_striuct-singleton_class-define.rb +0 -19
- data/test/test_striuct-subclass-class-constructor.rb +0 -82
- data/test/test_striuct-subclass-class-validation.rb +0 -26
- data/test/test_striuct-subclass-instance-assign.rb +0 -30
- data/test/test_striuct-subclass-instance-enum.rb +0 -93
- data/test/test_striuct-subclass-instance-validation_functional_condition.rb +0 -51
- data/test/test_striuct-subclass-instance_names.rb +0 -18
- data/test/test_striuct-version.rb +0 -11
- /data/{History.rdoc → History.old(~0.3.n).rdoc} +0 -0
- /data/test/{test_striuct-subclass-class-macro.rb → test_subc-c-add_members.rb} +0 -0
- /data/test/{test_striuct-subclass-class-close.rb → test_subc-c-close_member.rb} +0 -0
- /data/test/{test_striuct-subclass-class-copy.rb → test_subc-c-copy.rb} +0 -0
- /data/test/{test_striuct-subclass-class-freeze.rb → test_subc-c-freeze.rb} +0 -0
- /data/test/{test_striuct-subclass-class-inheritable.rb → test_subc-c-inheritable.rb} +0 -0
- /data/test/{test_striuct-subclass-feature-alias_member.rb → test_subc-f-alias_member.rb} +0 -0
- /data/test/{test_striuct-subclass-feature-to_struct.rb → test_subc-f-to_struct.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-adjuster.rb → test_subc-i-adjuster.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-basic.rb → test_subc-i-basic.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-compare.rb → test_subc-i-compare.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-copy.rb → test_subc-i-copy.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-freeze.rb → test_subc-i-freeze.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-keyvalidatable.rb → test_subc-i-keyvalidatable.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-validation_inference.rb → test_subc-i-validation_inference.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-validation_with_getter.rb → test_subc-i-validation_with_getter.rb} +0 -0
@@ -0,0 +1,128 @@
|
|
1
|
+
class Striuct; module ClassMethods
|
2
|
+
|
3
|
+
# @group Basic Predicate
|
4
|
+
|
5
|
+
# @param [Symbol, String, #to_sym] name
|
6
|
+
def has_autonym?(name)
|
7
|
+
name = name.to_sym
|
8
|
+
rescue NoMethodError
|
9
|
+
false
|
10
|
+
else
|
11
|
+
@autonyms.include? name
|
12
|
+
end
|
13
|
+
|
14
|
+
alias_method :autonym?, :has_autonym?
|
15
|
+
|
16
|
+
# @param [Symbol, String, #to_sym] als
|
17
|
+
def has_alias?(als)
|
18
|
+
als = als.to_sym
|
19
|
+
rescue NoMethodError
|
20
|
+
false
|
21
|
+
else
|
22
|
+
@aliases.has_key? als
|
23
|
+
end
|
24
|
+
|
25
|
+
alias_method :alias?, :has_alias?
|
26
|
+
alias_method :aliased?, :has_alias? # obsolute
|
27
|
+
|
28
|
+
# @param [Symbol, String, #to_sym] name
|
29
|
+
def has_member?(name)
|
30
|
+
autonym_for_member name
|
31
|
+
rescue Exception
|
32
|
+
false
|
33
|
+
else
|
34
|
+
true
|
35
|
+
end
|
36
|
+
|
37
|
+
alias_method :member?, :has_member?
|
38
|
+
|
39
|
+
# @param [Integer, #to_int] index
|
40
|
+
def has_index?(index)
|
41
|
+
@autonyms.fetch index
|
42
|
+
rescue Exception
|
43
|
+
false
|
44
|
+
else
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
48
|
+
alias_method :index?, :has_index?
|
49
|
+
|
50
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
51
|
+
def has_key?(key)
|
52
|
+
has_member?(key) || has_index?(key)
|
53
|
+
end
|
54
|
+
|
55
|
+
alias_method :key?, :has_key?
|
56
|
+
|
57
|
+
# @param [Symbol, String, #to_sym] autonym
|
58
|
+
def with_aliases?(autonym)
|
59
|
+
autonym = autonym.to_sym
|
60
|
+
rescue NoMethodError
|
61
|
+
false
|
62
|
+
else
|
63
|
+
@aliases.has_value? autonym
|
64
|
+
end
|
65
|
+
|
66
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
67
|
+
def with_default?(key)
|
68
|
+
autonym = autonym_for_key key
|
69
|
+
rescue Exception
|
70
|
+
false
|
71
|
+
else
|
72
|
+
_attributes_for(autonym).with_default?
|
73
|
+
end
|
74
|
+
|
75
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
76
|
+
def with_condition?(key)
|
77
|
+
autonym = autonym_for_key key
|
78
|
+
rescue Exception
|
79
|
+
false
|
80
|
+
else
|
81
|
+
_attributes_for(autonym).with_condition?
|
82
|
+
end
|
83
|
+
|
84
|
+
alias_method :restrict?, :with_condition?
|
85
|
+
|
86
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
87
|
+
def with_inference?(key)
|
88
|
+
autonym = autonym_for_key key
|
89
|
+
rescue Exception
|
90
|
+
false
|
91
|
+
else
|
92
|
+
_attributes_for(autonym).with_inference?
|
93
|
+
end
|
94
|
+
|
95
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
96
|
+
def with_safety_getter?(key)
|
97
|
+
autonym = autonym_for_key key
|
98
|
+
rescue Exception
|
99
|
+
false
|
100
|
+
else
|
101
|
+
_attributes_for(autonym).with_safety_getter?
|
102
|
+
end
|
103
|
+
|
104
|
+
alias_method :with_safety_reader?, :with_safety_getter?
|
105
|
+
|
106
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
107
|
+
def with_safety_setter?(key)
|
108
|
+
autonym = autonym_for_key key
|
109
|
+
rescue Exception
|
110
|
+
false
|
111
|
+
else
|
112
|
+
_attributes_for(autonym).with_safety_setter?
|
113
|
+
end
|
114
|
+
|
115
|
+
alias_method :with_safety_writer?, :with_safety_setter?
|
116
|
+
|
117
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
118
|
+
def with_adjuster?(key)
|
119
|
+
autonym = autonym_for_key key
|
120
|
+
rescue Exception
|
121
|
+
false
|
122
|
+
else
|
123
|
+
_attributes_for(autonym).with_adjuster?
|
124
|
+
end
|
125
|
+
|
126
|
+
# @endgroup
|
127
|
+
|
128
|
+
end; end
|
@@ -1,14 +1,17 @@
|
|
1
|
+
require 'optionalargument'
|
2
|
+
|
3
|
+
require_relative 'attributes'
|
1
4
|
require_relative 'inner'
|
2
|
-
require_relative '
|
5
|
+
require_relative 'names'
|
6
|
+
require_relative 'predicate'
|
3
7
|
require_relative 'copy'
|
4
8
|
require_relative 'fix'
|
5
9
|
require_relative 'length'
|
6
10
|
require_relative 'to_struct'
|
7
11
|
require_relative 'constructor'
|
8
12
|
require_relative 'enum'
|
9
|
-
require_relative 'hashy'
|
10
13
|
require_relative 'default'
|
11
14
|
require_relative 'adjustment'
|
12
15
|
require_relative 'macro'
|
13
|
-
require_relative '
|
16
|
+
require_relative 'conflict_management'
|
14
17
|
require_relative 'validation'
|
@@ -2,51 +2,13 @@ class Striuct; module ClassMethods
|
|
2
2
|
|
3
3
|
# @group Validation
|
4
4
|
|
5
|
-
# @param [Symbol, String] name
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
_attributes_for(autonym).inference?
|
11
|
-
end
|
12
|
-
|
13
|
-
# @param [Symbol, String] name
|
14
|
-
def has_condition?(name)
|
15
|
-
autonym = autonym_for_name name
|
16
|
-
|
17
|
-
_attributes_for(autonym).has_condition?
|
18
|
-
end
|
19
|
-
|
20
|
-
alias_method :restrict?, :has_condition?
|
21
|
-
alias_method :has_validator?, :has_condition? # obsolute
|
22
|
-
|
23
|
-
# @param [Symbol, String] name
|
24
|
-
def condition_for(name)
|
25
|
-
return nil unless has_condition? name
|
26
|
-
autonym = autonym_for_name name
|
27
|
-
|
5
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
6
|
+
def condition_for(key)
|
7
|
+
autonym = autonym_for_key key
|
8
|
+
raise KeyError unless with_condition? autonym
|
9
|
+
|
28
10
|
_attributes_for(autonym).condition
|
29
11
|
end
|
30
|
-
|
31
|
-
alias_method :validator_for, :condition_for # obsolute
|
32
|
-
|
33
|
-
# @param [Symbol, String] name
|
34
|
-
def safety_getter?(name)
|
35
|
-
autonym = autonym_for_name name
|
36
|
-
|
37
|
-
_attributes_for(autonym).validate_with_getter?
|
38
|
-
end
|
39
|
-
|
40
|
-
alias_method :safety_reader?, :safety_getter?
|
41
|
-
|
42
|
-
# @param [Symbol, String] name
|
43
|
-
def safety_setter?(name)
|
44
|
-
autonym = autonym_for_name name
|
45
|
-
|
46
|
-
_attributes_for(autonym).validate_with_setter?
|
47
|
-
end
|
48
|
-
|
49
|
-
alias_method :safety_writer?, :safety_setter?
|
50
12
|
|
51
13
|
# @endgroup
|
52
14
|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Note
|
2
|
+
=====
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
This dir's tree is diveded under roles/features.
|
5
|
+
Not under CONSTANT names.
|
@@ -1,32 +1,30 @@
|
|
1
|
-
require_relative 'subscript'
|
2
|
-
|
3
1
|
class Striuct; module InstanceMethods
|
4
2
|
|
5
|
-
# @group Assign
|
6
|
-
|
7
|
-
alias_method :assign, :[]=
|
3
|
+
# @group Assign / Unassign
|
8
4
|
|
9
|
-
# @param [Symbol, String] name
|
10
|
-
def assign?(
|
11
|
-
autonym =
|
5
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
6
|
+
def assign?(key)
|
7
|
+
autonym = autonym_for_key key
|
12
8
|
|
13
9
|
@db.has_key? autonym
|
14
10
|
end
|
15
11
|
|
16
|
-
# @param [Symbol, String,
|
12
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
13
|
+
# @return value / nil - value assigned under the key
|
17
14
|
def unassign(key)
|
18
15
|
raise "can't modify frozen #{self.class}" if frozen?
|
16
|
+
|
19
17
|
autonym = autonym_for_key key
|
18
|
+
raise "can't modify locked member #{autonym}" if locked? autonym
|
20
19
|
|
21
20
|
@db.delete autonym
|
22
21
|
end
|
23
22
|
|
24
|
-
alias_method :
|
25
|
-
alias_method :reset_at, :unassign
|
23
|
+
alias_method :delete_at, :unassign
|
26
24
|
|
27
|
-
# all members
|
25
|
+
# true if all members are not yet assigned
|
28
26
|
def empty?
|
29
|
-
_autonyms.none?{|autonym
|
27
|
+
_autonyms.none?{|autonym|@db.has_key? autonym}
|
30
28
|
end
|
31
29
|
|
32
30
|
# @endgroup
|
@@ -12,15 +12,12 @@ class Striuct; module InstanceMethods
|
|
12
12
|
self.class.to_struct_class.new(*values)
|
13
13
|
end
|
14
14
|
|
15
|
+
# @param [Boolean] include_no_assign
|
15
16
|
# @return [Hash]
|
16
|
-
def to_h(
|
17
|
-
return @db.dup
|
17
|
+
def to_h(include_no_assign=true)
|
18
|
+
return @db.dup unless include_no_assign
|
18
19
|
|
19
|
-
|
20
|
-
each_pair do |autonym, val|
|
21
|
-
h[autonym] = val
|
22
|
-
end
|
23
|
-
}
|
20
|
+
Hash[each_pair.to_a]
|
24
21
|
end
|
25
22
|
|
26
23
|
# @return [Array]
|
@@ -32,4 +29,4 @@ class Striuct; module InstanceMethods
|
|
32
29
|
|
33
30
|
# @endgroup
|
34
31
|
|
35
|
-
end; end
|
32
|
+
end; end
|
@@ -4,13 +4,14 @@ class Striuct; module InstanceMethods
|
|
4
4
|
|
5
5
|
# @return [Boolean]
|
6
6
|
def ==(other)
|
7
|
-
|
7
|
+
other.instance_of?(self.class) &&
|
8
|
+
each_pair.all?{|autonym, val|other._get(autonym) == val}
|
8
9
|
end
|
9
10
|
|
10
11
|
alias_method :===, :==
|
11
12
|
|
12
13
|
def eql?(other)
|
13
|
-
|
14
|
+
other.instance_of?(self.class) && other._db.eql?(@db)
|
14
15
|
end
|
15
16
|
|
16
17
|
# @return [Integer]
|
@@ -18,11 +19,10 @@ class Striuct; module InstanceMethods
|
|
18
19
|
@db.hash
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
+
protected
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
other.instance_of?(self.class) && each_pair.all?{|k, v|v.__send__ method, other[k]}
|
24
|
+
def _db
|
25
|
+
@db
|
26
26
|
end
|
27
27
|
|
28
28
|
# @endgroup
|
@@ -1,14 +1,36 @@
|
|
1
1
|
class Striuct; module InstanceMethods
|
2
2
|
|
3
3
|
# @group Default Value
|
4
|
-
|
5
|
-
# @param [Symbol, String] name
|
6
|
-
def default?(
|
7
|
-
autonym =
|
4
|
+
|
5
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
6
|
+
def default?(key)
|
7
|
+
autonym = autonym_for_key key
|
8
8
|
|
9
|
-
|
9
|
+
default_value_for(autonym) == fetch_by_autonym(autonym)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# @param [Symbol] target_autonyms - MUST already converted to native autonym
|
15
|
+
# @return [self]
|
16
|
+
def _set_defaults(*target_autonyms)
|
17
|
+
target_autonyms.each do |autonym|
|
18
|
+
if with_default? autonym
|
19
|
+
default = default_value_for autonym
|
20
|
+
_set autonym, (
|
21
|
+
if default_type_for(autonym) == :lazy
|
22
|
+
args = [self, autonym][0, default.arity]
|
23
|
+
default.call(*args)
|
24
|
+
else
|
25
|
+
default
|
26
|
+
end
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
self
|
10
32
|
end
|
11
33
|
|
12
34
|
# @endgroup
|
13
35
|
|
14
|
-
end; end
|
36
|
+
end; end
|
@@ -1,33 +1,33 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
1
|
class Striuct; module InstanceMethods
|
4
|
-
|
5
|
-
extend Forwardable
|
6
|
-
|
7
|
-
# Forwardable has public/protected class_macro
|
8
|
-
private_class_method(*Forwardable.instance_methods)
|
9
2
|
|
10
3
|
# @group Delegate Class Methods
|
11
4
|
|
12
5
|
def_delegators :'self.class',
|
13
|
-
:_autonyms,
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:has_member?, :member?, :has_key?, :key?,
|
6
|
+
:_autonyms,
|
7
|
+
:autonym_for_alias,
|
8
|
+
:autonym_for_member,
|
9
|
+
:autonym_for_index,
|
10
|
+
:autonym_for_key,
|
11
|
+
:autonyms, :members, :all_members, :aliases,
|
20
12
|
:has_autonym?, :autonym?,
|
21
13
|
:has_alias?, :alias?, :aliased?,
|
22
|
-
:
|
14
|
+
:has_member?, :member?,
|
15
|
+
:has_index?, :index?,
|
16
|
+
:has_key?, :key?,
|
17
|
+
:with_aliases?,
|
18
|
+
:aliases_for_autonym,
|
23
19
|
:length, :size,
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
20
|
+
:with_condition?, :restrict?,
|
21
|
+
:condition_for,
|
22
|
+
:with_safety_getter?, :with_safety_reader?,
|
23
|
+
:with_safety_setter?, :with_safety_writer?,
|
24
|
+
:with_inference?,
|
25
|
+
:with_default?,
|
26
|
+
:default_value_for, :default_type_for,
|
27
|
+
:with_adjuster?,
|
28
|
+
:adjuster_for
|
29
29
|
|
30
|
-
private :_autonyms
|
30
|
+
private :_autonyms
|
31
31
|
|
32
32
|
# @endgroup
|
33
33
|
|
@@ -13,9 +13,7 @@ class Striuct; module InstanceMethods
|
|
13
13
|
self
|
14
14
|
end
|
15
15
|
|
16
|
-
alias_method :each_name, :each_autonym
|
17
16
|
alias_method :each_member, :each_autonym
|
18
|
-
alias_method :each_key, :each_autonym
|
19
17
|
|
20
18
|
# @yield [value]
|
21
19
|
# @yieldparam [Object] value - sequential under defined
|
@@ -25,7 +23,7 @@ class Striuct; module InstanceMethods
|
|
25
23
|
def each_value
|
26
24
|
return to_enum(__callee__) unless block_given?
|
27
25
|
|
28
|
-
each_autonym{|autonym|yield
|
26
|
+
each_autonym{|autonym|yield _get(autonym)}
|
29
27
|
end
|
30
28
|
|
31
29
|
alias_method :each, :each_value
|
@@ -40,7 +38,7 @@ class Striuct; module InstanceMethods
|
|
40
38
|
def each_pair
|
41
39
|
return to_enum(__callee__) unless block_given?
|
42
40
|
|
43
|
-
each_autonym{|autonym|yield autonym,
|
41
|
+
each_autonym{|autonym|yield autonym, _get(autonym)}
|
44
42
|
end
|
45
43
|
|
46
44
|
# @yield [index]
|
@@ -66,9 +64,7 @@ class Striuct; module InstanceMethods
|
|
66
64
|
self
|
67
65
|
end
|
68
66
|
|
69
|
-
alias_method :each_name_with_index, :each_autonym_with_index
|
70
67
|
alias_method :each_member_with_index, :each_autonym_with_index
|
71
|
-
alias_method :each_key_with_index, :each_autonym_with_index
|
72
68
|
|
73
69
|
# @yield [value, index]
|
74
70
|
# @yieldparam [Integer] index
|
@@ -78,7 +74,6 @@ class Striuct; module InstanceMethods
|
|
78
74
|
return to_enum(__callee__) unless block_given?
|
79
75
|
|
80
76
|
each_value.with_index{|value, index|yield value, index}
|
81
|
-
self
|
82
77
|
end
|
83
78
|
|
84
79
|
alias_method :each_with_index, :each_value_with_index
|
@@ -96,9 +91,8 @@ class Striuct; module InstanceMethods
|
|
96
91
|
yield autonym, value, index
|
97
92
|
index += 1
|
98
93
|
end
|
99
|
-
self
|
100
94
|
end
|
101
95
|
|
102
96
|
# @endgroup
|
103
97
|
|
104
|
-
end; end
|
98
|
+
end; end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
# @group Getter
|
4
|
+
|
5
|
+
# @param [Symbol, String, #to_sym] autonym
|
6
|
+
def fetch_by_autonym(autonym)
|
7
|
+
autonym = autonym.to_sym
|
8
|
+
raise NameError unless autonym? autonym
|
9
|
+
|
10
|
+
_get autonym
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param [Symbol, String, #to_sym] member
|
14
|
+
def fetch_by_member(member)
|
15
|
+
_get autonym_for_member(member)
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param [Integer, #to_int] index
|
19
|
+
def fetch_by_index(index)
|
20
|
+
_get autonym_for_index(index)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
24
|
+
def fetch_by_key(key)
|
25
|
+
_get autonym_for_key(key)
|
26
|
+
end
|
27
|
+
|
28
|
+
alias_method :[], :fetch_by_key
|
29
|
+
alias_method :fetch, :fetch_by_key
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
# @param [Symbol] autonym - MUST already converted to native autonym
|
34
|
+
def _get(autonym)
|
35
|
+
value = @db[autonym]
|
36
|
+
|
37
|
+
if with_safety_getter?(autonym) and !accept?(autonym, value)
|
38
|
+
raise ::Validation::InvalidReadingError,
|
39
|
+
"#{value.inspect} is deficient for #{autonym} in #{self.class}"
|
40
|
+
end
|
41
|
+
|
42
|
+
value
|
43
|
+
end
|
44
|
+
|
45
|
+
# @endgroup
|
46
|
+
|
47
|
+
end; end
|
@@ -1,10 +1,6 @@
|
|
1
|
-
require_relative 'subscript'
|
2
|
-
|
3
1
|
class Striuct; module InstanceMethods
|
4
2
|
|
5
3
|
# @group Like Ruby's Hash
|
6
|
-
|
7
|
-
alias_method :fetch, :[]
|
8
4
|
|
9
5
|
def has_value?(value)
|
10
6
|
@db.has_value? value
|
@@ -81,7 +77,7 @@ class Striuct; module InstanceMethods
|
|
81
77
|
# @param [Symbol, String] name
|
82
78
|
# @return [Array] e.g [autonym, value]
|
83
79
|
def assoc(name)
|
84
|
-
autonym =
|
80
|
+
autonym = autonym_for_member name
|
85
81
|
|
86
82
|
[autonym, self[name]]
|
87
83
|
end
|
@@ -119,4 +115,4 @@ class Striuct; module InstanceMethods
|
|
119
115
|
|
120
116
|
# @endgroup
|
121
117
|
|
122
|
-
end; end
|
118
|
+
end; end
|
@@ -1,10 +1,5 @@
|
|
1
|
-
require 'keyvalidatable'
|
2
|
-
|
3
1
|
class Striuct; module InstanceMethods
|
4
2
|
|
5
|
-
extend Forwardable
|
6
|
-
include KeyValidatable
|
7
|
-
|
8
3
|
KeyValidatable.instance_methods.each do |feature|
|
9
4
|
if specific_feature = feature.to_s.sub!('members'){'autonyms'}
|
10
5
|
def_delegator :self, feature, specific_feature.to_sym
|
@@ -1,62 +1,54 @@
|
|
1
1
|
class Striuct; module InstanceMethods
|
2
2
|
|
3
|
-
# @group Lock
|
3
|
+
# @group Lock / Unlock
|
4
4
|
|
5
|
-
# @
|
6
|
-
# lock a setter for key
|
7
|
-
# @param [Symbol, String, Fixnum] key
|
8
|
-
# @overload lock(true)
|
9
|
-
# lock setters for all members
|
10
|
-
# @param [true] true
|
5
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
11
6
|
# @return [self]
|
12
|
-
def lock(key
|
7
|
+
def lock(key)
|
8
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
9
|
+
autonym = autonym_for_key key
|
10
|
+
|
11
|
+
@locks[autonym] = true
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [self]
|
16
|
+
def lock_all
|
13
17
|
raise "can't modify frozen #{self.class}" if frozen?
|
14
18
|
|
15
|
-
|
16
|
-
_autonyms.each do |autonym|
|
17
|
-
@locks[autonym] = true
|
18
|
-
end
|
19
|
-
else
|
20
|
-
autonym = autonym_for_key key
|
19
|
+
each_autonym do |autonym|
|
21
20
|
@locks[autonym] = true
|
22
21
|
end
|
23
|
-
|
24
|
-
self
|
25
22
|
end
|
26
23
|
|
27
|
-
# @
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# @param [true] true
|
33
|
-
def lock?(key=true)
|
34
|
-
if key.equal? true
|
35
|
-
_autonyms.all?{|autonym|@locks[autonym]}
|
36
|
-
else
|
37
|
-
autonym = autonym_for_key key
|
38
|
-
@locks[autonym] || false
|
39
|
-
end
|
24
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
25
|
+
def locked?(key)
|
26
|
+
autonym = autonym_for_key key
|
27
|
+
|
28
|
+
@locks.has_key? autonym
|
40
29
|
end
|
41
30
|
|
42
|
-
|
31
|
+
def all_locked?
|
32
|
+
_autonyms.all?{|autonym|@locks.has_key? autonym}
|
33
|
+
end
|
43
34
|
|
44
|
-
|
45
|
-
|
46
|
-
#
|
47
|
-
# @
|
48
|
-
|
49
|
-
# @param [true] true
|
50
|
-
def unlock(key=true)
|
35
|
+
private
|
36
|
+
|
37
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
38
|
+
# @return [self]
|
39
|
+
def unlock(key)
|
51
40
|
raise "can't modify frozen #{self.class}" if frozen?
|
41
|
+
autonym = autonym_for_key key
|
52
42
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
43
|
+
@locks.delete autonym
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [self]
|
48
|
+
def unlock_all
|
49
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
59
50
|
|
51
|
+
@locks.clear
|
60
52
|
self
|
61
53
|
end
|
62
54
|
|