striuct 0.3.5.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|