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,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