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