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,64 +1,64 @@
1
- require 'keyvalidatable'
2
-
3
- class Striuct; module ClassMethods
4
-
5
- # @group Constructor
6
-
7
- # @return [Striuct]
8
- def for_values(*values)
9
- new_instance(*values)
10
- end
11
-
12
- alias_method :load_values, :for_values
13
- alias_method :new, :for_values
14
-
15
- # @param [Hash, Struct] pairs
16
- # @return [Striuct]
17
- def for_pairs(pairs)
18
- raise TypeError, 'no pairs object' unless pairs.respond_to?(:each_pair)
19
-
20
- pairs.dup.extend(KeyValidatable).validate_keys let: all_members
21
-
22
- new.tap {|instance|
23
- pairs.each_pair do |name, value|
24
- instance[name] = value
25
- end
26
- }
27
- end
28
-
29
- alias_method :load_pairs, :for_pairs
30
- alias_method :[], :for_pairs
31
-
32
- # for build the fixed object
33
- # @param [Hash] options
34
- # @option options [Boolean] :lock
35
- # @option options [Boolean] :strict
36
- # @yieldparam [Striuct] instance
37
- # @yieldreturn [Striuct] instance
38
- # @return [void]
39
- def define(options={lock: true, strict: true})
40
- raise ArgumentError, 'must with block' unless block_given?
41
- options.dup.extend(KeyValidatable).validate_keys let: [:lock, :strict]
42
-
43
- lock, strict = options[:lock], options[:strict]
44
-
45
- new.tap {|instance|
46
- yield instance
47
-
48
- unless (yets = autonyms.select{|autonym|! instance.assign?(autonym)}).empty?
49
- raise "not assigned members are, yet '#{yets.inspect} in #{self}'"
50
- end
51
-
52
- if strict &&
53
- ! (invalids = autonyms.select{|autonym|! instance.valid?(autonym)}).empty?
54
-
55
- raise Validation::InvalidWritingError, "invalids members are, yet '#{invalids.inspect} in #{self}'"
56
- end
57
-
58
- instance.lock if lock
59
- }
60
- end
61
-
62
- # @endgroup
63
-
1
+ require 'keyvalidatable'
2
+
3
+ class Striuct; module ClassMethods
4
+
5
+ # @group Constructor
6
+
7
+ # @return [Striuct]
8
+ def for_values(*values)
9
+ new_instance(*values)
10
+ end
11
+
12
+ alias_method :load_values, :for_values
13
+ alias_method :new, :for_values
14
+
15
+ # @param [Hash, Struct] pairs
16
+ # @return [Striuct]
17
+ def for_pairs(pairs)
18
+ raise TypeError, 'no pairs object' unless pairs.respond_to?(:each_pair)
19
+
20
+ pairs.dup.extend(KeyValidatable).validate_keys let: all_members
21
+
22
+ new.tap {|instance|
23
+ pairs.each_pair do |name, value|
24
+ instance[name] = value
25
+ end
26
+ }
27
+ end
28
+
29
+ alias_method :load_pairs, :for_pairs
30
+ alias_method :[], :for_pairs
31
+
32
+ # for build the fixed object
33
+ # @param [Hash] options
34
+ # @option options [Boolean] :lock
35
+ # @option options [Boolean] :strict
36
+ # @yieldparam [Striuct] instance
37
+ # @yieldreturn [Striuct] instance
38
+ # @return [void]
39
+ def define(options={lock: true, strict: true})
40
+ raise ArgumentError, 'must with block' unless block_given?
41
+ options.dup.extend(KeyValidatable).validate_keys let: [:lock, :strict]
42
+
43
+ lock, strict = options[:lock], options[:strict]
44
+
45
+ new.tap {|instance|
46
+ yield instance
47
+
48
+ unless (yets = autonyms.select{|autonym|! instance.assign?(autonym)}).empty?
49
+ raise "not assigned members are, yet '#{yets.inspect} in #{self}'"
50
+ end
51
+
52
+ if strict &&
53
+ ! (invalids = autonyms.select{|autonym|! instance.valid?(autonym)}).empty?
54
+
55
+ raise Validation::InvalidWritingError, "invalids members are, yet '#{invalids.inspect} in #{self}'"
56
+ end
57
+
58
+ instance.lock if lock
59
+ }
60
+ end
61
+
62
+ # @endgroup
63
+
64
64
  end; end
@@ -1,28 +1,28 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group With default value
4
-
5
- # @param [Symbol, String] name
6
- def has_default?(name)
7
- autonym = autonym_for name
8
-
9
- @defaults.has_key? autonym
10
- end
11
-
12
- # @param [Symbol, String] name
13
- def default_for(name)
14
- autonym = autonym_for name
15
- raise "#{name} has no default value" unless has_default? autonym
16
-
17
- _default_for autonym
18
- end
19
-
20
- private
21
-
22
- def _default_for(autonym)
23
- @defaults[autonym]
24
- end
25
-
26
- # @endgroup
27
-
1
+ class Striuct; module ClassMethods
2
+
3
+ # @group With default value
4
+
5
+ # @param [Symbol, String] name
6
+ def has_default?(name)
7
+ autonym = autonym_for name
8
+
9
+ @defaults.has_key? autonym
10
+ end
11
+
12
+ # @param [Symbol, String] name
13
+ def default_for(name)
14
+ autonym = autonym_for name
15
+ raise "#{name} has no default value" unless has_default? autonym
16
+
17
+ _default_for autonym
18
+ end
19
+
20
+ private
21
+
22
+ def _default_for(autonym)
23
+ @defaults[autonym]
24
+ end
25
+
26
+ # @endgroup
27
+
28
28
  end; end
@@ -1,49 +1,49 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group Enumerative
4
-
5
- # @yield [autonym]
6
- # @yieldparam [Symbol] autonym - sequential under defined
7
- # @yieldreturn [self]
8
- # @return [Enumerator]
9
- def each_autonym
10
- return to_enum(__callee__) unless block_given?
11
-
12
- @autonyms.each{|autonym|yield autonym}
13
- self
14
- end
15
-
16
- alias_method :each_name, :each_autonym
17
- alias_method :each_member, :each_autonym
18
- alias_method :each_key, :each_autonym
19
-
20
- # @yield [index]
21
- # @yieldparam [Integer] Index
22
- # @yieldreturn [self]
23
- # @return [Enumerator]
24
- def each_index
25
- return to_enum(__callee__) unless block_given?
26
-
27
- @autonyms.each_index{|index|yield index}
28
- self
29
- end
30
-
31
- # @yield [autonym, index]
32
- # @yieldparam [Symbol] autonym
33
- # @yieldparam [Integer] index
34
- # @yieldreturn [self]
35
- # @return [Enumerator]
36
- def each_autonym_with_index
37
- return to_enum(__callee__) unless block_given?
38
-
39
- @autonyms.each_with_index{|autonym, index|yield autonym, index}
40
- self
41
- end
42
-
43
- alias_method :each_name_with_index, :each_autonym_with_index
44
- alias_method :each_member_with_index, :each_autonym_with_index
45
- alias_method :each_key_with_index, :each_autonym_with_index
46
-
47
- # @endgroup
48
-
1
+ class Striuct; module ClassMethods
2
+
3
+ # @group Enumerative
4
+
5
+ # @yield [autonym]
6
+ # @yieldparam [Symbol] autonym - sequential under defined
7
+ # @yieldreturn [self]
8
+ # @return [Enumerator]
9
+ def each_autonym
10
+ return to_enum(__callee__) unless block_given?
11
+
12
+ @autonyms.each{|autonym|yield autonym}
13
+ self
14
+ end
15
+
16
+ alias_method :each_name, :each_autonym
17
+ alias_method :each_member, :each_autonym
18
+ alias_method :each_key, :each_autonym
19
+
20
+ # @yield [index]
21
+ # @yieldparam [Integer] Index
22
+ # @yieldreturn [self]
23
+ # @return [Enumerator]
24
+ def each_index
25
+ return to_enum(__callee__) unless block_given?
26
+
27
+ @autonyms.each_index{|index|yield index}
28
+ self
29
+ end
30
+
31
+ # @yield [autonym, index]
32
+ # @yieldparam [Symbol] autonym
33
+ # @yieldparam [Integer] index
34
+ # @yieldreturn [self]
35
+ # @return [Enumerator]
36
+ def each_autonym_with_index
37
+ return to_enum(__callee__) unless block_given?
38
+
39
+ @autonyms.each_with_index{|autonym, index|yield autonym, index}
40
+ self
41
+ end
42
+
43
+ alias_method :each_name_with_index, :each_autonym_with_index
44
+ alias_method :each_member_with_index, :each_autonym_with_index
45
+ alias_method :each_key_with_index, :each_autonym_with_index
46
+
47
+ # @endgroup
48
+
49
49
  end; end
@@ -1,92 +1,92 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group Inner Methods
4
-
5
- private
6
-
7
- def __getter__!(name)
8
- define_method name do
9
- __get__ name
10
- end
11
-
12
- nil
13
- end
14
-
15
- def _remove_inference(autonym)
16
- @inferences.delete autonym
17
- end
18
-
19
- def _mark_setter_validation(autonym)
20
- @setter_validations[autonym] = true
21
- end
22
-
23
- def _mark_getter_validation(autonym)
24
- @getter_validations[autonym] = true
25
- end
26
-
27
- def _mark_inference(autonym)
28
- @inferences[autonym] = true
29
- end
30
-
31
- def _set_adjuster(autonym, adjuster)
32
- @adjusters[autonym] = adjuster
33
- end
34
-
35
- def _set_condition(autonym, condition)
36
- @conditions[autonym] = condition
37
- end
38
-
39
- def _set_default_value(autonym, value)
40
- @defaults[autonym] = value
41
- end
42
-
43
- def __setter__!(autonym, condition, &adjuster)
44
- __set_condition__! autonym, condition unless Validation::Condition::ANYTHING.equal? condition
45
- __set_adjuster__! autonym, &adjuster if block_given?
46
-
47
- define_method :"#{autonym}=" do |value|
48
- __set__ autonym, value
49
- end
50
-
51
- nil
52
-
53
- end
54
-
55
- def __set_condition__!(autonym, condition)
56
- if ::Validation.conditionable? condition
57
- _set_condition autonym, condition
58
- else
59
- raise TypeError, 'wrong object for condition'
60
- end
61
-
62
- nil
63
- end
64
-
65
- def __set_adjuster__!(autonym, &adjuster)
66
- if ::Validation.adjustable? adjuster
67
- _set_adjuster autonym, adjuster
68
- else
69
- raise ArgumentError, "wrong number of block argument #{arity} for 1"
70
- end
71
-
72
- nil
73
- end
74
-
75
- def __found_family__!(_caller, autonym, our)
76
- family = our.class
77
-
78
- raise 'must not happen' unless inference?(autonym) and
79
- autonym?(autonym) and
80
- _caller.instance_of?(self)
81
-
82
- raise ArgumentError unless Validation.conditionable? family
83
-
84
- _set_condition autonym, family
85
- _remove_inference autonym
86
-
87
- nil
88
- end
89
-
90
- # @endgroup
91
-
1
+ class Striuct; module ClassMethods
2
+
3
+ # @group Inner Methods
4
+
5
+ private
6
+
7
+ def __getter__!(name)
8
+ define_method name do
9
+ __get__ name
10
+ end
11
+
12
+ nil
13
+ end
14
+
15
+ def _remove_inference(autonym)
16
+ @inferences.delete autonym
17
+ end
18
+
19
+ def _mark_setter_validation(autonym)
20
+ @setter_validations[autonym] = true
21
+ end
22
+
23
+ def _mark_getter_validation(autonym)
24
+ @getter_validations[autonym] = true
25
+ end
26
+
27
+ def _mark_inference(autonym)
28
+ @inferences[autonym] = true
29
+ end
30
+
31
+ def _set_adjuster(autonym, adjuster)
32
+ @adjusters[autonym] = adjuster
33
+ end
34
+
35
+ def _set_condition(autonym, condition)
36
+ @conditions[autonym] = condition
37
+ end
38
+
39
+ def _set_default_value(autonym, value)
40
+ @defaults[autonym] = value
41
+ end
42
+
43
+ def __setter__!(autonym, condition, &adjuster)
44
+ __set_condition__! autonym, condition unless Validation::Condition::ANYTHING.equal? condition
45
+ __set_adjuster__! autonym, &adjuster if block_given?
46
+
47
+ define_method :"#{autonym}=" do |value|
48
+ __set__ autonym, value
49
+ end
50
+
51
+ nil
52
+
53
+ end
54
+
55
+ def __set_condition__!(autonym, condition)
56
+ if ::Validation.conditionable? condition
57
+ _set_condition autonym, condition
58
+ else
59
+ raise TypeError, 'wrong object for condition'
60
+ end
61
+
62
+ nil
63
+ end
64
+
65
+ def __set_adjuster__!(autonym, &adjuster)
66
+ if ::Validation.adjustable? adjuster
67
+ _set_adjuster autonym, adjuster
68
+ else
69
+ raise ArgumentError, "wrong number of block argument #{arity} for 1"
70
+ end
71
+
72
+ nil
73
+ end
74
+
75
+ def __found_family__!(_caller, autonym, our)
76
+ family = our.class
77
+
78
+ raise 'must not happen' unless inference?(autonym) and
79
+ autonym?(autonym) and
80
+ _caller.instance_of?(self)
81
+
82
+ raise ArgumentError unless Validation.conditionable? family
83
+
84
+ _set_condition autonym, family
85
+ _remove_inference autonym
86
+
87
+ nil
88
+ end
89
+
90
+ # @endgroup
91
+
92
92
  end; end
@@ -1,14 +1,14 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group Length/Size
4
-
5
- # @return [Integer]
6
- def length
7
- @autonyms.length
8
- end
9
-
10
- alias_method :size, :length
11
-
12
- # @endgroup
13
-
14
- end; end
1
+ class Striuct; module ClassMethods
2
+
3
+ # @group Length/Size
4
+
5
+ # @return [Integer]
6
+ def length
7
+ @autonyms.length
8
+ end
9
+
10
+ alias_method :size, :length
11
+
12
+ # @endgroup
13
+
14
+ end; end