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.
- data/.gitignore +35 -34
- data/.travis.yml +6 -6
- data/Gemfile +12 -12
- data/History.rdoc +279 -273
- data/LICENSE +21 -21
- data/Manifest.txt +91 -90
- data/README.ja.old.rdoc +297 -297
- data/README.md +128 -128
- data/Rakefile +11 -11
- data/benchmark/basics.rb +56 -56
- data/example/README.rb +44 -44
- data/example/example.old.rdoc +187 -187
- data/example/example1.rb +233 -233
- data/example/example2.rb +22 -22
- data/example/see_trace.rb +32 -32
- data/lib/striuct/classmethods/README.md +5 -5
- data/lib/striuct/classmethods/adjustment.rb +32 -32
- data/lib/striuct/classmethods/constructor.rb +63 -63
- data/lib/striuct/classmethods/default.rb +27 -27
- data/lib/striuct/classmethods/enum.rb +48 -48
- data/lib/striuct/classmethods/inner.rb +91 -91
- data/lib/striuct/classmethods/length.rb +14 -14
- data/lib/striuct/classmethods/macro.rb +144 -144
- data/lib/striuct/classmethods/named.rb +113 -113
- data/lib/striuct/classmethods/object.rb +54 -54
- data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
- data/lib/striuct/classmethods/requiremnets.rb +11 -11
- data/lib/striuct/classmethods/to_struct.rb +23 -25
- data/lib/striuct/classmethods/validation.rb +55 -55
- data/lib/striuct/classmethods.rb +1 -1
- data/lib/striuct/instancemethods/README.md +5 -5
- data/lib/striuct/instancemethods/assign.rb +30 -30
- data/lib/striuct/instancemethods/cast.rb +34 -34
- data/lib/striuct/instancemethods/compare.rb +30 -30
- data/lib/striuct/instancemethods/default.rb +13 -13
- data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
- data/lib/striuct/instancemethods/enum.rb +103 -103
- data/lib/striuct/instancemethods/hashy.rb +121 -121
- data/lib/striuct/instancemethods/inner.rb +60 -60
- data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
- data/lib/striuct/instancemethods/lock.rb +61 -61
- data/lib/striuct/instancemethods/object.rb +52 -52
- data/lib/striuct/instancemethods/requirements.rb +14 -14
- data/lib/striuct/instancemethods/safety.rb +11 -11
- data/lib/striuct/instancemethods/subscript.rb +55 -55
- data/lib/striuct/instancemethods/validation.rb +29 -25
- data/lib/striuct/instancemethods/values.rb +57 -57
- data/lib/striuct/instancemethods.rb +1 -1
- data/lib/striuct/requirements.rb +5 -5
- data/lib/striuct/singleton_class.rb +66 -66
- data/lib/striuct/specificcontainer.rb +19 -19
- data/lib/striuct/structs.rb +7 -7
- data/lib/striuct/version.rb +5 -5
- data/lib/striuct.rb +13 -13
- data/striuct.gemspec +24 -24
- data/test/helper.rb +5 -5
- data/test/test_striuct-singleton_class-define.rb +19 -19
- data/test/test_striuct-subclass-class-cloning.rb +20 -20
- data/test/test_striuct-subclass-class-close.rb +36 -36
- data/test/test_striuct-subclass-class-constructor.rb +82 -82
- data/test/test_striuct-subclass-class-freeze.rb +36 -36
- data/test/test_striuct-subclass-class-inheritable.rb +57 -57
- data/test/test_striuct-subclass-class-macro.rb +13 -13
- data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
- data/test/test_striuct-subclass-class-validation.rb +26 -26
- data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
- data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
- data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
- data/test/test_striuct-subclass-instance-accessor.rb +137 -137
- data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
- data/test/test_striuct-subclass-instance-assign.rb +30 -30
- data/test/test_striuct-subclass-instance-basic.rb +32 -32
- data/test/test_striuct-subclass-instance-cloning.rb +22 -22
- data/test/test_striuct-subclass-instance-compare.rb +51 -51
- data/test/test_striuct-subclass-instance-default_value.rb +128 -128
- data/test/test_striuct-subclass-instance-enum.rb +92 -92
- data/test/test_striuct-subclass-instance-freeze.rb +19 -19
- data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
- data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
- data/test/test_striuct-subclass-instance-lock.rb +39 -39
- data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
- data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
- data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
- data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
- data/test/test_striuct-subclass-instance_names.rb +18 -18
- data/test/test_striuct-version.rb +10 -10
- metadata +4 -2
@@ -1,89 +1,89 @@
|
|
1
|
-
class Striuct; module ClassMethods
|
2
|
-
|
3
|
-
# @group Prevent Naming Conflicts
|
4
|
-
|
5
|
-
NAMING_RISKS = {
|
6
|
-
conflict: 10,
|
7
|
-
no_identifier: 9,
|
8
|
-
bad_manners: 5,
|
9
|
-
no_ascii: 3,
|
10
|
-
strict: 0
|
11
|
-
}.freeze
|
12
|
-
|
13
|
-
PROTECT_LEVELS = {
|
14
|
-
struct: {error: 99, warn: 99},
|
15
|
-
warning: {error: 99, warn: 5},
|
16
|
-
error: {error: 9, warn: 5},
|
17
|
-
prevent: {error: 5, warn: 1},
|
18
|
-
nervous: {error: 1, warn: 1}
|
19
|
-
}.each(&:freeze).freeze
|
20
|
-
|
21
|
-
# @param [Object] name
|
22
|
-
# accpeptable the name into own member, under protect level of runtime
|
23
|
-
def cname?(name)
|
24
|
-
_check_safety_naming(keyable_for name){|r|r}
|
25
|
-
rescue Exception
|
26
|
-
false
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
# @param [Symbol] level
|
32
|
-
# @return [nil]
|
33
|
-
# change protect level for risk of naming members
|
34
|
-
def protect_level(level)
|
35
|
-
raise NameError unless PROTECT_LEVELS.has_key? level
|
36
|
-
|
37
|
-
@protect_level = level
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
|
41
|
-
# @param [Symbol] name
|
42
|
-
# @return [void]
|
43
|
-
# @yieldreturn [Boolean]
|
44
|
-
def _check_safety_naming(name)
|
45
|
-
estimation = _estimate_naming name
|
46
|
-
risk = NAMING_RISKS[estimation]
|
47
|
-
plevels = PROTECT_LEVELS[@protect_level]
|
48
|
-
caution = "undesirable naming '#{name}', because #{estimation}"
|
49
|
-
|
50
|
-
r = (
|
51
|
-
case
|
52
|
-
when risk >= plevels[:error]
|
53
|
-
raise NameError, caution unless block_given?
|
54
|
-
false
|
55
|
-
when risk >= plevels[:warn]
|
56
|
-
warn caution unless block_given?
|
57
|
-
false
|
58
|
-
else
|
59
|
-
true
|
60
|
-
end
|
61
|
-
)
|
62
|
-
|
63
|
-
yield r if block_given?
|
64
|
-
end
|
65
|
-
|
66
|
-
# @param [Symbol] name
|
67
|
-
# @return [Symbol]
|
68
|
-
def _estimate_naming(name)
|
69
|
-
if (instance_methods + private_instance_methods).include? name
|
70
|
-
return :conflict
|
71
|
-
end
|
72
|
-
|
73
|
-
return :no_ascii unless name.encoding.equal? Encoding::ASCII
|
74
|
-
|
75
|
-
case name
|
76
|
-
when /[\W]/, /\A[^a-zA-Z_]/, :''
|
77
|
-
:no_identifier
|
78
|
-
when /\Aeach/, /\A__[^_]*__\z/, /\A_[^_]*\z/, /[!?]\z/, /\Ato_/
|
79
|
-
:bad_manners
|
80
|
-
when /\A[a-zA-Z_]\w*\z/
|
81
|
-
:strict
|
82
|
-
else
|
83
|
-
raise 'must not happen'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
# @endgroup
|
88
|
-
|
89
|
-
end; end
|
1
|
+
class Striuct; module ClassMethods
|
2
|
+
|
3
|
+
# @group Prevent Naming Conflicts
|
4
|
+
|
5
|
+
NAMING_RISKS = {
|
6
|
+
conflict: 10,
|
7
|
+
no_identifier: 9,
|
8
|
+
bad_manners: 5,
|
9
|
+
no_ascii: 3,
|
10
|
+
strict: 0
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
PROTECT_LEVELS = {
|
14
|
+
struct: {error: 99, warn: 99},
|
15
|
+
warning: {error: 99, warn: 5},
|
16
|
+
error: {error: 9, warn: 5},
|
17
|
+
prevent: {error: 5, warn: 1},
|
18
|
+
nervous: {error: 1, warn: 1}
|
19
|
+
}.each(&:freeze).freeze
|
20
|
+
|
21
|
+
# @param [Object] name
|
22
|
+
# accpeptable the name into own member, under protect level of runtime
|
23
|
+
def cname?(name)
|
24
|
+
_check_safety_naming(keyable_for name){|r|r}
|
25
|
+
rescue Exception
|
26
|
+
false
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# @param [Symbol] level
|
32
|
+
# @return [nil]
|
33
|
+
# change protect level for risk of naming members
|
34
|
+
def protect_level(level)
|
35
|
+
raise NameError unless PROTECT_LEVELS.has_key? level
|
36
|
+
|
37
|
+
@protect_level = level
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param [Symbol] name
|
42
|
+
# @return [void]
|
43
|
+
# @yieldreturn [Boolean]
|
44
|
+
def _check_safety_naming(name)
|
45
|
+
estimation = _estimate_naming name
|
46
|
+
risk = NAMING_RISKS[estimation]
|
47
|
+
plevels = PROTECT_LEVELS[@protect_level]
|
48
|
+
caution = "undesirable naming '#{name}', because #{estimation}"
|
49
|
+
|
50
|
+
r = (
|
51
|
+
case
|
52
|
+
when risk >= plevels[:error]
|
53
|
+
raise NameError, caution unless block_given?
|
54
|
+
false
|
55
|
+
when risk >= plevels[:warn]
|
56
|
+
warn caution unless block_given?
|
57
|
+
false
|
58
|
+
else
|
59
|
+
true
|
60
|
+
end
|
61
|
+
)
|
62
|
+
|
63
|
+
yield r if block_given?
|
64
|
+
end
|
65
|
+
|
66
|
+
# @param [Symbol] name
|
67
|
+
# @return [Symbol]
|
68
|
+
def _estimate_naming(name)
|
69
|
+
if (instance_methods + private_instance_methods).include? name
|
70
|
+
return :conflict
|
71
|
+
end
|
72
|
+
|
73
|
+
return :no_ascii unless name.encoding.equal? Encoding::ASCII
|
74
|
+
|
75
|
+
case name
|
76
|
+
when /[\W]/, /\A[^a-zA-Z_]/, :''
|
77
|
+
:no_identifier
|
78
|
+
when /\Aeach/, /\A__[^_]*__\z/, /\A_[^_]*\z/, /[!?]\z/, /\Ato_/
|
79
|
+
:bad_manners
|
80
|
+
when /\A[a-zA-Z_]\w*\z/
|
81
|
+
:strict
|
82
|
+
else
|
83
|
+
raise 'must not happen'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# @endgroup
|
88
|
+
|
89
|
+
end; end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require_relative 'inner'
|
2
|
-
require_relative 'named'
|
3
|
-
require_relative 'object'
|
4
|
-
require_relative 'length'
|
5
|
-
require_relative 'to_struct'
|
6
|
-
require_relative 'constructor'
|
7
|
-
require_relative 'enum'
|
8
|
-
require_relative 'default'
|
9
|
-
require_relative 'adjustment'
|
10
|
-
require_relative 'macro'
|
11
|
-
require_relative 'prevent_conflicts'
|
1
|
+
require_relative 'inner'
|
2
|
+
require_relative 'named'
|
3
|
+
require_relative 'object'
|
4
|
+
require_relative 'length'
|
5
|
+
require_relative 'to_struct'
|
6
|
+
require_relative 'constructor'
|
7
|
+
require_relative 'enum'
|
8
|
+
require_relative 'default'
|
9
|
+
require_relative 'adjustment'
|
10
|
+
require_relative 'macro'
|
11
|
+
require_relative 'prevent_conflicts'
|
12
12
|
require_relative 'validation'
|
@@ -1,26 +1,24 @@
|
|
1
|
-
class Striuct; module ClassMethods
|
2
|
-
|
3
|
-
# @group To Ruby's Struct Class
|
4
|
-
|
5
|
-
# @return [Class]
|
6
|
-
def to_struct_class
|
7
|
-
raise 'No defined members' if autonyms.empty?
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# @endgroup
|
25
|
-
|
1
|
+
class Striuct; module ClassMethods
|
2
|
+
|
3
|
+
# @group To Ruby's Struct Class
|
4
|
+
|
5
|
+
# @return [Class]
|
6
|
+
def to_struct_class
|
7
|
+
raise 'No defined members' if autonyms.empty?
|
8
|
+
|
9
|
+
struct_cls = ::Struct.new(*autonyms)
|
10
|
+
return struct_cls unless name
|
11
|
+
|
12
|
+
const_suffix = name.slice(/[^:]+\z/).to_sym
|
13
|
+
if ::Striuct::Structs.const_defined?(const_suffix, false) &&
|
14
|
+
(already_cls = ::Striuct::Structs.const_get(const_suffix, false)).members == autonyms
|
15
|
+
raise unless already_cls.superclass.equal? Struct
|
16
|
+
already_cls
|
17
|
+
else
|
18
|
+
::Striuct::Structs.const_set const_suffix, struct_cls
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @endgroup
|
23
|
+
|
26
24
|
end; end
|
@@ -1,56 +1,56 @@
|
|
1
|
-
class Striuct; module ClassMethods
|
2
|
-
|
3
|
-
# @group Validation
|
4
|
-
|
5
|
-
# @param [Symbol, String] name
|
6
|
-
# inference checker is waiting yet
|
7
|
-
def inference?(name)
|
8
|
-
autonym = autonym_for name
|
9
|
-
|
10
|
-
@inferences.has_key? autonym
|
11
|
-
end
|
12
|
-
|
13
|
-
# @param [Symbol, String] name
|
14
|
-
def has_validator?(name)
|
15
|
-
autonym = autonym_for name
|
16
|
-
|
17
|
-
@conditions.has_key? autonym
|
18
|
-
end
|
19
|
-
|
20
|
-
alias_method :has_condition?, :has_validator?
|
21
|
-
alias_method :restrict?, :has_validator?
|
22
|
-
|
23
|
-
# @param [Symbol, String] name
|
24
|
-
def validator_for(name)
|
25
|
-
_condition_for autonym_for(name)
|
26
|
-
end
|
27
|
-
|
28
|
-
alias_method :condition_for, :validator_for
|
29
|
-
|
30
|
-
# @param [Symbol, String] name
|
31
|
-
def safety_getter?(name)
|
32
|
-
autonym = autonym_for name
|
33
|
-
|
34
|
-
@getter_validations.has_key? autonym
|
35
|
-
end
|
36
|
-
|
37
|
-
alias_method :safety_reader?, :safety_getter?
|
38
|
-
|
39
|
-
# @param [Symbol, String] name
|
40
|
-
def safety_setter?(name)
|
41
|
-
autonym = autonym_for name
|
42
|
-
|
43
|
-
@setter_validations.has_key? autonym
|
44
|
-
end
|
45
|
-
|
46
|
-
alias_method :safety_writer?, :safety_setter?
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def _condition_for(name)
|
51
|
-
@conditions[name]
|
52
|
-
end
|
53
|
-
|
54
|
-
# @endgroup
|
55
|
-
|
1
|
+
class Striuct; module ClassMethods
|
2
|
+
|
3
|
+
# @group Validation
|
4
|
+
|
5
|
+
# @param [Symbol, String] name
|
6
|
+
# inference checker is waiting yet
|
7
|
+
def inference?(name)
|
8
|
+
autonym = autonym_for name
|
9
|
+
|
10
|
+
@inferences.has_key? autonym
|
11
|
+
end
|
12
|
+
|
13
|
+
# @param [Symbol, String] name
|
14
|
+
def has_validator?(name)
|
15
|
+
autonym = autonym_for name
|
16
|
+
|
17
|
+
@conditions.has_key? autonym
|
18
|
+
end
|
19
|
+
|
20
|
+
alias_method :has_condition?, :has_validator?
|
21
|
+
alias_method :restrict?, :has_validator?
|
22
|
+
|
23
|
+
# @param [Symbol, String] name
|
24
|
+
def validator_for(name)
|
25
|
+
_condition_for autonym_for(name)
|
26
|
+
end
|
27
|
+
|
28
|
+
alias_method :condition_for, :validator_for
|
29
|
+
|
30
|
+
# @param [Symbol, String] name
|
31
|
+
def safety_getter?(name)
|
32
|
+
autonym = autonym_for name
|
33
|
+
|
34
|
+
@getter_validations.has_key? autonym
|
35
|
+
end
|
36
|
+
|
37
|
+
alias_method :safety_reader?, :safety_getter?
|
38
|
+
|
39
|
+
# @param [Symbol, String] name
|
40
|
+
def safety_setter?(name)
|
41
|
+
autonym = autonym_for name
|
42
|
+
|
43
|
+
@setter_validations.has_key? autonym
|
44
|
+
end
|
45
|
+
|
46
|
+
alias_method :safety_writer?, :safety_setter?
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def _condition_for(name)
|
51
|
+
@conditions[name]
|
52
|
+
end
|
53
|
+
|
54
|
+
# @endgroup
|
55
|
+
|
56
56
|
end; end
|
data/lib/striuct/classmethods.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require_relative 'classmethods/requiremnets'
|
1
|
+
require_relative 'classmethods/requiremnets'
|
@@ -1,5 +1,5 @@
|
|
1
|
-
For developer
|
2
|
-
==============
|
3
|
-
|
4
|
-
* This dir's tree is diveded under roles/features.
|
5
|
-
Not under CONSTANT names.
|
1
|
+
For developer
|
2
|
+
==============
|
3
|
+
|
4
|
+
* This dir's tree is diveded under roles/features.
|
5
|
+
Not under CONSTANT names.
|
@@ -1,31 +1,31 @@
|
|
1
|
-
require_relative 'subscript'
|
2
|
-
|
3
|
-
class Striuct; module InstanceMethods
|
4
|
-
|
5
|
-
# @group Assign
|
6
|
-
|
7
|
-
alias_method :assign, :[]=
|
8
|
-
|
9
|
-
# @param [Symbol, String] name
|
10
|
-
def assign?(name)
|
11
|
-
autonym = autonym_for name
|
12
|
-
|
13
|
-
@db.has_key? autonym
|
14
|
-
end
|
15
|
-
|
16
|
-
# @param [Symbol, String, Fixnum] key
|
17
|
-
def clear_at(key)
|
18
|
-
__subscript__(key){|autonym|__clear__ autonym}
|
19
|
-
end
|
20
|
-
|
21
|
-
alias_method :unassign, :clear_at
|
22
|
-
alias_method :reset_at, :clear_at
|
23
|
-
|
24
|
-
# all members aren't assigned
|
25
|
-
def empty?
|
26
|
-
_autonyms.none?{|autonym|assign? autonym}
|
27
|
-
end
|
28
|
-
|
29
|
-
# @endgroup
|
30
|
-
|
1
|
+
require_relative 'subscript'
|
2
|
+
|
3
|
+
class Striuct; module InstanceMethods
|
4
|
+
|
5
|
+
# @group Assign
|
6
|
+
|
7
|
+
alias_method :assign, :[]=
|
8
|
+
|
9
|
+
# @param [Symbol, String] name
|
10
|
+
def assign?(name)
|
11
|
+
autonym = autonym_for name
|
12
|
+
|
13
|
+
@db.has_key? autonym
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param [Symbol, String, Fixnum] key
|
17
|
+
def clear_at(key)
|
18
|
+
__subscript__(key){|autonym|__clear__ autonym}
|
19
|
+
end
|
20
|
+
|
21
|
+
alias_method :unassign, :clear_at
|
22
|
+
alias_method :reset_at, :clear_at
|
23
|
+
|
24
|
+
# all members aren't assigned
|
25
|
+
def empty?
|
26
|
+
_autonyms.none?{|autonym|assign? autonym}
|
27
|
+
end
|
28
|
+
|
29
|
+
# @endgroup
|
30
|
+
|
31
31
|
end; end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
class Striuct; module InstanceMethods
|
2
|
-
|
3
|
-
# @group Cast
|
4
|
-
|
5
|
-
# @return [self]
|
6
|
-
def to_striuct
|
7
|
-
self
|
8
|
-
end
|
9
|
-
|
10
|
-
# @return [Struct]
|
11
|
-
def to_struct
|
12
|
-
self.class.to_struct_class.new(*values)
|
13
|
-
end
|
14
|
-
|
15
|
-
# @return [Hash]
|
16
|
-
def to_h(reject_no_assign=false)
|
17
|
-
return @db.dup if reject_no_assign
|
18
|
-
|
19
|
-
{}.tap {|h|
|
20
|
-
each_pair do |autonym, val|
|
21
|
-
h[autonym] = val
|
22
|
-
end
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
# @return [Array]
|
27
|
-
def values
|
28
|
-
each_value.to_a
|
29
|
-
end
|
30
|
-
|
31
|
-
alias_method :to_a, :values
|
32
|
-
|
33
|
-
# @endgroup
|
34
|
-
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
# @group Cast
|
4
|
+
|
5
|
+
# @return [self]
|
6
|
+
def to_striuct
|
7
|
+
self
|
8
|
+
end
|
9
|
+
|
10
|
+
# @return [Struct]
|
11
|
+
def to_struct
|
12
|
+
self.class.to_struct_class.new(*values)
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [Hash]
|
16
|
+
def to_h(reject_no_assign=false)
|
17
|
+
return @db.dup if reject_no_assign
|
18
|
+
|
19
|
+
{}.tap {|h|
|
20
|
+
each_pair do |autonym, val|
|
21
|
+
h[autonym] = val
|
22
|
+
end
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Array]
|
27
|
+
def values
|
28
|
+
each_value.to_a
|
29
|
+
end
|
30
|
+
|
31
|
+
alias_method :to_a, :values
|
32
|
+
|
33
|
+
# @endgroup
|
34
|
+
|
35
35
|
end; end
|
@@ -1,30 +1,30 @@
|
|
1
|
-
class Striuct; module InstanceMethods
|
2
|
-
|
3
|
-
# @group Compare with other
|
4
|
-
|
5
|
-
# @return [Boolean]
|
6
|
-
def ==(other)
|
7
|
-
__compare_all__? other, :==
|
8
|
-
end
|
9
|
-
|
10
|
-
alias_method :===, :==
|
11
|
-
|
12
|
-
def eql?(other)
|
13
|
-
__compare_all__? other, :eql?
|
14
|
-
end
|
15
|
-
|
16
|
-
# @return [Integer]
|
17
|
-
def hash
|
18
|
-
@db.hash
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
# @param [Symbol] method
|
24
|
-
def __compare_all__?(other, method)
|
25
|
-
other.instance_of?(self.class) && each_pair.all?{|k, v|v.__send__ method, other[k]}
|
26
|
-
end
|
27
|
-
|
28
|
-
# @endgroup
|
29
|
-
|
30
|
-
end; end
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
# @group Compare with other
|
4
|
+
|
5
|
+
# @return [Boolean]
|
6
|
+
def ==(other)
|
7
|
+
__compare_all__? other, :==
|
8
|
+
end
|
9
|
+
|
10
|
+
alias_method :===, :==
|
11
|
+
|
12
|
+
def eql?(other)
|
13
|
+
__compare_all__? other, :eql?
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Integer]
|
17
|
+
def hash
|
18
|
+
@db.hash
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# @param [Symbol] method
|
24
|
+
def __compare_all__?(other, method)
|
25
|
+
other.instance_of?(self.class) && each_pair.all?{|k, v|v.__send__ method, other[k]}
|
26
|
+
end
|
27
|
+
|
28
|
+
# @endgroup
|
29
|
+
|
30
|
+
end; end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
class Striuct; module InstanceMethods
|
2
|
-
|
3
|
-
# @group Default Value
|
4
|
-
|
5
|
-
# @param [Symbol, String] name
|
6
|
-
def default?(name)
|
7
|
-
autonym = autonym_for name
|
8
|
-
|
9
|
-
default_for(autonym) == self[autonym]
|
10
|
-
end
|
11
|
-
|
12
|
-
# @endgroup
|
13
|
-
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
# @group Default Value
|
4
|
+
|
5
|
+
# @param [Symbol, String] name
|
6
|
+
def default?(name)
|
7
|
+
autonym = autonym_for name
|
8
|
+
|
9
|
+
default_for(autonym) == self[autonym]
|
10
|
+
end
|
11
|
+
|
12
|
+
# @endgroup
|
13
|
+
|
14
14
|
end; end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
|
-
class Striuct; module InstanceMethods
|
4
|
-
|
5
|
-
extend Forwardable
|
6
|
-
|
7
|
-
# Forwardable has public/protected class_macro
|
8
|
-
private_class_method(*Forwardable.instance_methods)
|
9
|
-
|
10
|
-
# @group Delegate Class Methods
|
11
|
-
|
12
|
-
def_delegators :'self.class',
|
13
|
-
:_autonyms,
|
14
|
-
:keyable_for, :autonym_for, :aliases_for,
|
15
|
-
:validator_for, :condition_for,
|
16
|
-
:adjuster_for, :flavor_for,
|
17
|
-
:members, :keys, :names, :autonyms, :all_members, :aliases,
|
18
|
-
:has_member?, :member?, :has_key?, :key?,
|
19
|
-
:length, :size,
|
20
|
-
:restrict?, :has_validator?, :has_condition?,
|
21
|
-
:safety_getter?, :safety_reader?, :safety_setter?, :safty_writer?, :inference?,
|
22
|
-
:has_default?, :default_for, :has_adjuster?, :has_flavor?
|
23
|
-
|
24
|
-
private :_autonyms
|
25
|
-
|
26
|
-
# @endgroup
|
27
|
-
|
28
|
-
end; end
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
class Striuct; module InstanceMethods
|
4
|
+
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
# Forwardable has public/protected class_macro
|
8
|
+
private_class_method(*Forwardable.instance_methods)
|
9
|
+
|
10
|
+
# @group Delegate Class Methods
|
11
|
+
|
12
|
+
def_delegators :'self.class',
|
13
|
+
:_autonyms,
|
14
|
+
:keyable_for, :autonym_for, :aliases_for,
|
15
|
+
:validator_for, :condition_for,
|
16
|
+
:adjuster_for, :flavor_for,
|
17
|
+
:members, :keys, :names, :autonyms, :all_members, :aliases,
|
18
|
+
:has_member?, :member?, :has_key?, :key?,
|
19
|
+
:length, :size,
|
20
|
+
:restrict?, :has_validator?, :has_condition?,
|
21
|
+
:safety_getter?, :safety_reader?, :safety_setter?, :safty_writer?, :inference?,
|
22
|
+
:has_default?, :default_for, :has_adjuster?, :has_flavor?
|
23
|
+
|
24
|
+
private :_autonyms
|
25
|
+
|
26
|
+
# @endgroup
|
27
|
+
|
28
|
+
end; end
|