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.
Files changed (88) hide show
  1. data/.gitignore +35 -34
  2. data/.travis.yml +6 -6
  3. data/Gemfile +12 -12
  4. data/History.rdoc +279 -273
  5. data/LICENSE +21 -21
  6. data/Manifest.txt +91 -90
  7. data/README.ja.old.rdoc +297 -297
  8. data/README.md +128 -128
  9. data/Rakefile +11 -11
  10. data/benchmark/basics.rb +56 -56
  11. data/example/README.rb +44 -44
  12. data/example/example.old.rdoc +187 -187
  13. data/example/example1.rb +233 -233
  14. data/example/example2.rb +22 -22
  15. data/example/see_trace.rb +32 -32
  16. data/lib/striuct/classmethods/README.md +5 -5
  17. data/lib/striuct/classmethods/adjustment.rb +32 -32
  18. data/lib/striuct/classmethods/constructor.rb +63 -63
  19. data/lib/striuct/classmethods/default.rb +27 -27
  20. data/lib/striuct/classmethods/enum.rb +48 -48
  21. data/lib/striuct/classmethods/inner.rb +91 -91
  22. data/lib/striuct/classmethods/length.rb +14 -14
  23. data/lib/striuct/classmethods/macro.rb +144 -144
  24. data/lib/striuct/classmethods/named.rb +113 -113
  25. data/lib/striuct/classmethods/object.rb +54 -54
  26. data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
  27. data/lib/striuct/classmethods/requiremnets.rb +11 -11
  28. data/lib/striuct/classmethods/to_struct.rb +23 -25
  29. data/lib/striuct/classmethods/validation.rb +55 -55
  30. data/lib/striuct/classmethods.rb +1 -1
  31. data/lib/striuct/instancemethods/README.md +5 -5
  32. data/lib/striuct/instancemethods/assign.rb +30 -30
  33. data/lib/striuct/instancemethods/cast.rb +34 -34
  34. data/lib/striuct/instancemethods/compare.rb +30 -30
  35. data/lib/striuct/instancemethods/default.rb +13 -13
  36. data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
  37. data/lib/striuct/instancemethods/enum.rb +103 -103
  38. data/lib/striuct/instancemethods/hashy.rb +121 -121
  39. data/lib/striuct/instancemethods/inner.rb +60 -60
  40. data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
  41. data/lib/striuct/instancemethods/lock.rb +61 -61
  42. data/lib/striuct/instancemethods/object.rb +52 -52
  43. data/lib/striuct/instancemethods/requirements.rb +14 -14
  44. data/lib/striuct/instancemethods/safety.rb +11 -11
  45. data/lib/striuct/instancemethods/subscript.rb +55 -55
  46. data/lib/striuct/instancemethods/validation.rb +29 -25
  47. data/lib/striuct/instancemethods/values.rb +57 -57
  48. data/lib/striuct/instancemethods.rb +1 -1
  49. data/lib/striuct/requirements.rb +5 -5
  50. data/lib/striuct/singleton_class.rb +66 -66
  51. data/lib/striuct/specificcontainer.rb +19 -19
  52. data/lib/striuct/structs.rb +7 -7
  53. data/lib/striuct/version.rb +5 -5
  54. data/lib/striuct.rb +13 -13
  55. data/striuct.gemspec +24 -24
  56. data/test/helper.rb +5 -5
  57. data/test/test_striuct-singleton_class-define.rb +19 -19
  58. data/test/test_striuct-subclass-class-cloning.rb +20 -20
  59. data/test/test_striuct-subclass-class-close.rb +36 -36
  60. data/test/test_striuct-subclass-class-constructor.rb +82 -82
  61. data/test/test_striuct-subclass-class-freeze.rb +36 -36
  62. data/test/test_striuct-subclass-class-inheritable.rb +57 -57
  63. data/test/test_striuct-subclass-class-macro.rb +13 -13
  64. data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
  65. data/test/test_striuct-subclass-class-validation.rb +26 -26
  66. data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
  67. data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
  68. data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
  69. data/test/test_striuct-subclass-instance-accessor.rb +137 -137
  70. data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
  71. data/test/test_striuct-subclass-instance-assign.rb +30 -30
  72. data/test/test_striuct-subclass-instance-basic.rb +32 -32
  73. data/test/test_striuct-subclass-instance-cloning.rb +22 -22
  74. data/test/test_striuct-subclass-instance-compare.rb +51 -51
  75. data/test/test_striuct-subclass-instance-default_value.rb +128 -128
  76. data/test/test_striuct-subclass-instance-enum.rb +92 -92
  77. data/test/test_striuct-subclass-instance-freeze.rb +19 -19
  78. data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
  79. data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
  80. data/test/test_striuct-subclass-instance-lock.rb +39 -39
  81. data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
  82. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
  83. data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
  84. data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
  85. data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
  86. data/test/test_striuct-subclass-instance_names.rb +18 -18
  87. data/test/test_striuct-version.rb +10 -10
  88. metadata +4 -2
@@ -1,62 +1,62 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Lock
4
-
5
- # @overload lock(key)
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
11
- # @return [self]
12
- def lock(key=true)
13
- raise "can't modify frozen #{self.class}" if frozen?
14
-
15
- if key.equal? true
16
- _autonyms.each do |autonym|
17
- @locks[autonym] = true
18
- end
19
- else
20
- __subscript__(key){|autonym|@locks[autonym] = true}
21
- end
22
-
23
- self
24
- end
25
-
26
- # @overload lock?(key)
27
- # predicate locking a setter for key
28
- # @param [Symbol, String, Fixnum] key
29
- # @overload lock?(true)
30
- # predicate locking for all members
31
- # @param [true] true
32
- def lock?(key=true)
33
- if key.equal? true
34
- _autonyms.all?{|autonym|@locks[autonym]}
35
- else
36
- __subscript__(key){|autonym|@locks[autonym]} || false
37
- end
38
- end
39
-
40
- private
41
-
42
- # @overload unlock(key)
43
- # unlock a setter for key
44
- # @param [Symbol, String, Fixnum] key
45
- # @overload unlock(true)
46
- # unlock setters for all members
47
- # @param [true] true
48
- def unlock(key=true)
49
- raise "can't modify frozen #{self.class}" if frozen?
50
-
51
- if key.equal? true
52
- @locks.clear
53
- else
54
- __subscript__(key){|autonym|@locks.delete autonym}
55
- end
56
-
57
- self
58
- end
59
-
60
- # @endgroup
61
-
1
+ class Striuct; module InstanceMethods
2
+
3
+ # @group Lock
4
+
5
+ # @overload lock(key)
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
11
+ # @return [self]
12
+ def lock(key=true)
13
+ raise "can't modify frozen #{self.class}" if frozen?
14
+
15
+ if key.equal? true
16
+ _autonyms.each do |autonym|
17
+ @locks[autonym] = true
18
+ end
19
+ else
20
+ __subscript__(key){|autonym|@locks[autonym] = true}
21
+ end
22
+
23
+ self
24
+ end
25
+
26
+ # @overload lock?(key)
27
+ # predicate locking a setter for key
28
+ # @param [Symbol, String, Fixnum] key
29
+ # @overload lock?(true)
30
+ # predicate locking for all members
31
+ # @param [true] true
32
+ def lock?(key=true)
33
+ if key.equal? true
34
+ _autonyms.all?{|autonym|@locks[autonym]}
35
+ else
36
+ __subscript__(key){|autonym|@locks[autonym]} || false
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ # @overload unlock(key)
43
+ # unlock a setter for key
44
+ # @param [Symbol, String, Fixnum] key
45
+ # @overload unlock(true)
46
+ # unlock setters for all members
47
+ # @param [true] true
48
+ def unlock(key=true)
49
+ raise "can't modify frozen #{self.class}" if frozen?
50
+
51
+ if key.equal? true
52
+ @locks.clear
53
+ else
54
+ __subscript__(key){|autonym|@locks.delete autonym}
55
+ end
56
+
57
+ self
58
+ end
59
+
60
+ # @endgroup
61
+
62
62
  end; end
@@ -1,52 +1,52 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Basic Methods for Ruby's Object
4
-
5
- def initialize(*values)
6
- @db, @locks = {}, {}
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
- }
36
- end
37
-
38
- # @return [self]
39
- def freeze
40
- [@db, @locks].each(&:freeze)
41
- super
42
- end
43
-
44
- private
45
-
46
- def initialize_copy(original)
47
- @db, @locks = @db.dup, {}
48
- end
49
-
50
- # @endgroup
51
-
52
- end; end
1
+ class Striuct; module InstanceMethods
2
+
3
+ # @group Basic Methods for Ruby's Object
4
+
5
+ def initialize(*values)
6
+ @db, @locks = {}, {}
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
+ }
36
+ end
37
+
38
+ # @return [self]
39
+ def freeze
40
+ [@db, @locks].each(&:freeze)
41
+ super
42
+ end
43
+
44
+ private
45
+
46
+ def initialize_copy(original)
47
+ @db, @locks = @db.dup, {}
48
+ end
49
+
50
+ # @endgroup
51
+
52
+ end; end
@@ -1,15 +1,15 @@
1
- require_relative 'delegate_class_methods'
2
- require_relative 'keyvalidatable'
3
- require_relative 'inner'
4
- require_relative 'object'
5
- require_relative 'compare'
6
- require_relative 'values'
7
- require_relative 'cast'
8
- require_relative 'default'
9
- require_relative 'enum'
10
- require_relative 'hashy'
11
- require_relative 'subscript'
12
- require_relative 'assign'
13
- require_relative 'lock'
14
- require_relative 'validation'
1
+ require_relative 'delegate_class_methods'
2
+ require_relative 'keyvalidatable'
3
+ require_relative 'inner'
4
+ require_relative 'object'
5
+ require_relative 'compare'
6
+ require_relative 'values'
7
+ require_relative 'cast'
8
+ require_relative 'default'
9
+ require_relative 'enum'
10
+ require_relative 'hashy'
11
+ require_relative 'subscript'
12
+ require_relative 'assign'
13
+ require_relative 'lock'
14
+ require_relative 'validation'
15
15
  require_relative 'safety'
@@ -1,12 +1,12 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Safety
4
-
5
- # freezed, fixed familar members, all members passed any condition
6
- def secure?
7
- (frozen? || lock?) && self.class.closed? && strict?
8
- end
9
-
10
- # @endgroup
11
-
1
+ class Striuct; module InstanceMethods
2
+
3
+ # @group Safety
4
+
5
+ # freezed, fixed familar members, all members passed any condition
6
+ def secure?
7
+ (frozen? || lock?) && self.class.closed? && strict?
8
+ end
9
+
10
+ # @endgroup
11
+
12
12
  end; end
@@ -1,55 +1,55 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Subscript
4
-
5
- # @param [Symbol, String, Fixnum] key
6
- def [](key)
7
- __subscript__(key){|autonym|__get__ autonym}
8
- end
9
-
10
- # @param [Symbol, String, Fixnum] key
11
- # @param [Object] value
12
- # @return [value]
13
- def []=(key, value)
14
- true_name = nil
15
- __subscript__(key){|autonym|
16
- true_name = autonym
17
- __set__ autonym, value
18
- }
19
- rescue Validation::InvalidWritingError
20
- $!.set_backtrace([
21
- "#{$!.backtrace[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{true_name})]=': #{$!.message}",
22
- $!.backtrace[-1]
23
- ])
24
-
25
- raise
26
- end
27
-
28
- private
29
-
30
- # @param [Symbol, String, Fixnum] key
31
- # @yield [autonym]
32
- # @yieldparam [Symbol] autonym
33
- def __subscript__(key)
34
- case key
35
- when Symbol, String
36
- name = keyable_for key
37
- if member? name
38
- yield autonym_for(name)
39
- else
40
- raise NameError
41
- end
42
- when Fixnum
43
- if autonym = _autonyms[key]
44
- yield autonym
45
- else
46
- raise IndexError
47
- end
48
- else
49
- raise ArgumentError
50
- end
51
- end
52
-
53
- # @endgroup
54
-
55
- end; end
1
+ class Striuct; module InstanceMethods
2
+
3
+ # @group Subscript
4
+
5
+ # @param [Symbol, String, Fixnum] key
6
+ def [](key)
7
+ __subscript__(key){|autonym|__get__ autonym}
8
+ end
9
+
10
+ # @param [Symbol, String, Fixnum] key
11
+ # @param [Object] value
12
+ # @return [value]
13
+ def []=(key, value)
14
+ true_name = nil
15
+ __subscript__(key){|autonym|
16
+ true_name = autonym
17
+ __set__ autonym, value
18
+ }
19
+ rescue Validation::InvalidWritingError
20
+ $!.set_backtrace([
21
+ "#{$!.backtrace[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{true_name})]=': #{$!.message}",
22
+ $!.backtrace[-1]
23
+ ])
24
+
25
+ raise
26
+ end
27
+
28
+ private
29
+
30
+ # @param [Symbol, String, Fixnum] key
31
+ # @yield [autonym]
32
+ # @yieldparam [Symbol] autonym
33
+ def __subscript__(key)
34
+ case key
35
+ when Symbol, String
36
+ name = keyable_for key
37
+ if member? name
38
+ yield autonym_for(name)
39
+ else
40
+ raise NameError
41
+ end
42
+ when Fixnum
43
+ if autonym = _autonyms[key]
44
+ yield autonym
45
+ else
46
+ raise IndexError
47
+ end
48
+ else
49
+ raise ArgumentError
50
+ end
51
+ end
52
+
53
+ # @endgroup
54
+
55
+ end; end
@@ -1,25 +1,29 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Validation
4
-
5
- # @param [Symbol, String] name
6
- # @param [Object] value - no argument and use own
7
- # passed under any condition
8
- def sufficient?(name, value=self[name])
9
- autonym = autonym_for name
10
- return true unless restrict? autonym
11
-
12
- _valid? condition_for(autonym), value
13
- end
14
-
15
- alias_method :accept?, :sufficient?
16
- alias_method :valid?, :sufficient?
17
-
18
- # all members passed under any condition
19
- def strict?
20
- each_pair.all?{|autonym, value|sufficient? autonym, value}
21
- end
22
-
23
- # @endgroup
24
-
25
- end; end
1
+ class Striuct; module InstanceMethods
2
+
3
+ # @group Validation
4
+
5
+ # @param [Symbol, String] name
6
+ # @param [Object] value - no argument and use own
7
+ # passed under any condition
8
+ def sufficient?(name, value=self[name])
9
+ autonym = autonym_for name
10
+ return true unless restrict? autonym
11
+
12
+ begin
13
+ _valid? condition_for(autonym), value
14
+ rescue Exception
15
+ false
16
+ end
17
+ end
18
+
19
+ alias_method :accept?, :sufficient?
20
+ alias_method :valid?, :sufficient?
21
+
22
+ # all members passed under any condition
23
+ def strict?
24
+ each_pair.all?{|autonym, value|sufficient? autonym, value}
25
+ end
26
+
27
+ # @endgroup
28
+
29
+ end; end
@@ -1,57 +1,57 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Behavior under Values
4
-
5
- # @param [Fixnum, Range] _keys
6
- # @return [Array]
7
- def values_at(*_keys)
8
- [].tap {|r|
9
- _keys.each do |key|
10
- case key
11
- when Fixnum
12
- r << self[key]
13
- when Range
14
- key.each do |n|
15
- raise TypeError unless n.instance_of? Fixnum
16
- r << self[n]
17
- end
18
- else
19
- raise TypeError
20
- end
21
- end
22
- }
23
- end
24
-
25
- # @return [self]
26
- def replace_values(*values)
27
- unless values.size <= size
28
- raise ArgumentError, "struct size differs (max: #{size})"
29
- end
30
-
31
- values.each_with_index do |value, index|
32
- self[index] = value
33
- end
34
-
35
- excess = _autonyms.last(size - values.size)
36
-
37
- excess.each do |autonym|
38
- if has_default? autonym
39
- self[autonym] = (
40
- value = default_for autonym
41
- if value.kind_of? DefaultProcHolder
42
- block = value.value
43
- args = [self, autonym][0, block.arity]
44
- block.call(*args)
45
- else
46
- value
47
- end
48
- )
49
- end
50
- end
51
-
52
- self
53
- end
54
-
55
- # @endgroup
56
-
57
- end; end
1
+ class Striuct; module InstanceMethods
2
+
3
+ # @group Behavior under Values
4
+
5
+ # @param [Fixnum, Range] _keys
6
+ # @return [Array]
7
+ def values_at(*_keys)
8
+ [].tap {|r|
9
+ _keys.each do |key|
10
+ case key
11
+ when Fixnum
12
+ r << self[key]
13
+ when Range
14
+ key.each do |n|
15
+ raise TypeError unless n.instance_of? Fixnum
16
+ r << self[n]
17
+ end
18
+ else
19
+ raise TypeError
20
+ end
21
+ end
22
+ }
23
+ end
24
+
25
+ # @return [self]
26
+ def replace_values(*values)
27
+ unless values.size <= size
28
+ raise ArgumentError, "struct size differs (max: #{size})"
29
+ end
30
+
31
+ values.each_with_index do |value, index|
32
+ self[index] = value
33
+ end
34
+
35
+ excess = _autonyms.last(size - values.size)
36
+
37
+ excess.each do |autonym|
38
+ if has_default? autonym
39
+ self[autonym] = (
40
+ value = default_for autonym
41
+ if value.kind_of? DefaultProcHolder
42
+ block = value.value
43
+ args = [self, autonym][0, block.arity]
44
+ block.call(*args)
45
+ else
46
+ value
47
+ end
48
+ )
49
+ end
50
+ end
51
+
52
+ self
53
+ end
54
+
55
+ # @endgroup
56
+
57
+ end; end
@@ -1 +1 @@
1
- require_relative 'instancemethods/requirements'
1
+ require_relative 'instancemethods/requirements'
@@ -1,6 +1,6 @@
1
- require_relative 'version'
2
- require_relative 'structs'
3
- require_relative 'specificcontainer'
4
- require_relative 'classmethods'
5
- require_relative 'instancemethods'
1
+ require_relative 'version'
2
+ require_relative 'structs'
3
+ require_relative 'specificcontainer'
4
+ require_relative 'classmethods'
5
+ require_relative 'instancemethods'
6
6
  require_relative 'singleton_class'