striuct 0.3.3 → 0.3.4

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