striuct 0.4.4.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE.txt +21 -0
  3. data/README.md +45 -62
  4. data/lib/striuct.rb +7 -3
  5. data/lib/striuct/{requirements.rb → bootstrap.rb} +6 -2
  6. data/lib/striuct/classmethods/README.md +2 -2
  7. data/lib/striuct/classmethods/adjustment.rb +77 -13
  8. data/lib/striuct/classmethods/attributes.rb +94 -90
  9. data/lib/striuct/classmethods/conflict_management.rb +109 -106
  10. data/lib/striuct/classmethods/constructor.rb +55 -65
  11. data/lib/striuct/classmethods/copy.rb +45 -43
  12. data/lib/striuct/classmethods/default.rb +23 -21
  13. data/lib/striuct/classmethods/enum.rb +46 -44
  14. data/lib/striuct/classmethods/fix.rb +23 -21
  15. data/lib/striuct/classmethods/hashdeepdupulicatable.rb +15 -15
  16. data/lib/striuct/classmethods/inner.rb +57 -64
  17. data/lib/striuct/classmethods/length.rb +12 -10
  18. data/lib/striuct/classmethods/macro.rb +98 -111
  19. data/lib/striuct/classmethods/names.rb +69 -65
  20. data/lib/striuct/classmethods/predicate.rb +131 -138
  21. data/lib/striuct/classmethods/requirements.rb +2 -2
  22. data/lib/striuct/classmethods/to_struct.rb +21 -18
  23. data/lib/striuct/classmethods/validation.rb +15 -13
  24. data/lib/striuct/instancemethods/README.md +2 -2
  25. data/lib/striuct/instancemethods/assign.rb +29 -27
  26. data/lib/striuct/instancemethods/cast.rb +28 -26
  27. data/lib/striuct/instancemethods/compare.rb +26 -24
  28. data/lib/striuct/instancemethods/default.rb +31 -29
  29. data/lib/striuct/instancemethods/delegate_class_methods.rb +36 -32
  30. data/lib/striuct/instancemethods/enum.rb +86 -84
  31. data/lib/striuct/instancemethods/getter.rb +39 -37
  32. data/lib/striuct/instancemethods/hashy.rb +99 -97
  33. data/lib/striuct/instancemethods/lock.rb +46 -44
  34. data/lib/striuct/instancemethods/object.rb +50 -48
  35. data/lib/striuct/instancemethods/requirements.rb +9 -13
  36. data/lib/striuct/instancemethods/safety.rb +11 -9
  37. data/lib/striuct/instancemethods/setter.rb +46 -49
  38. data/lib/striuct/instancemethods/to_s.rb +39 -37
  39. data/lib/striuct/instancemethods/validation.rb +46 -29
  40. data/lib/striuct/instancemethods/values.rb +52 -33
  41. data/lib/striuct/singleton_class.rb +25 -18
  42. data/lib/striuct/structs.rb +3 -3
  43. metadata +23 -213
  44. data/.gitignore +0 -35
  45. data/.travis.yml +0 -20
  46. data/.yardopts +0 -1
  47. data/Gemfile +0 -11
  48. data/History.old(~0.3.n).rdoc +0 -289
  49. data/MIT-LICENSE +0 -22
  50. data/Rakefile +0 -10
  51. data/benchmark/basics.rb +0 -56
  52. data/example/README.rb +0 -53
  53. data/example/example1.rb +0 -235
  54. data/example/example2.rb +0 -22
  55. data/example/see_trace.rb +0 -32
  56. data/lib/striuct/instancemethods/keyvalidatable.rb +0 -9
  57. data/striuct.gemspec +0 -45
  58. data/test/helper.rb +0 -5
  59. data/test/test_sglc-constructor.rb +0 -36
  60. data/test/test_subc-c-add_members.rb +0 -13
  61. data/test/test_subc-c-close_member.rb +0 -36
  62. data/test/test_subc-c-constructor.rb +0 -92
  63. data/test/test_subc-c-copy.rb +0 -71
  64. data/test/test_subc-c-freeze.rb +0 -36
  65. data/test/test_subc-c-inheritable.rb +0 -58
  66. data/test/test_subc-c-safety_naming.rb +0 -73
  67. data/test/test_subc-f-alias_member.rb +0 -54
  68. data/test/test_subc-f-enum.rb +0 -139
  69. data/test/test_subc-f-predicate.rb +0 -711
  70. data/test/test_subc-f-to_struct.rb +0 -61
  71. data/test/test_subc-f-validation_util.rb +0 -59
  72. data/test/test_subc-f_debug.rb +0 -39
  73. data/test/test_subc-f_name.rb +0 -525
  74. data/test/test_subc-i-accessor.rb +0 -138
  75. data/test/test_subc-i-adjuster.rb +0 -95
  76. data/test/test_subc-i-assign.rb +0 -53
  77. data/test/test_subc-i-basic.rb +0 -32
  78. data/test/test_subc-i-cast.rb +0 -27
  79. data/test/test_subc-i-compare.rb +0 -52
  80. data/test/test_subc-i-copy.rb +0 -23
  81. data/test/test_subc-i-default_value.rb +0 -129
  82. data/test/test_subc-i-freeze.rb +0 -19
  83. data/test/test_subc-i-hashlike.rb +0 -144
  84. data/test/test_subc-i-keyvalidatable.rb +0 -25
  85. data/test/test_subc-i-lock.rb +0 -40
  86. data/test/test_subc-i-must.rb +0 -30
  87. data/test/test_subc-i-to_s_family.rb +0 -26
  88. data/test/test_subc-i-validation_inference.rb +0 -51
  89. data/test/test_subc-i-validation_specific_conditions.rb +0 -297
  90. data/test/test_subc-i-validation_with_getter.rb +0 -33
  91. data/test/test_version.rb +0 -13
@@ -1,45 +1,47 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group Enumerative
4
-
5
- # @yield [autonym]
6
- # @yieldparam [Symbol] autonym - sequential under defined
7
- # @yieldreturn [Class] 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
1
+ # frozen_string_literal: true
2
+
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Enumerative
6
+
7
+ # @yield [autonym]
8
+ # @yieldparam [Symbol] autonym - sequential under defined
9
+ # @yieldreturn [Class] self
10
+ # @return [Enumerator]
11
+ def each_autonym
12
+ return to_enum(__callee__) { size } unless block_given?
13
+
14
+ @autonyms.each { |autonym| yield autonym }
15
+ self
16
+ end
17
+
18
+ alias_method :each_member, :each_autonym
19
+
20
+ # @yield [index]
21
+ # @yieldparam [Integer] Index
22
+ # @yieldreturn [Class] self
23
+ # @return [Enumerator]
24
+ def each_index
25
+ return to_enum(__callee__) { size } 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 [Class] self
35
+ # @return [Enumerator]
36
+ def each_autonym_with_index
37
+ return to_enum(__callee__) { size } unless block_given?
38
+
39
+ @autonyms.each_with_index { |autonym, index| yield autonym, index }
40
+ self
41
+ end
42
+
43
+ alias_method :each_member_with_index, :each_autonym_with_index
44
+
45
+ # @endgroup
14
46
  end
15
-
16
- alias_method :each_member, :each_autonym
17
-
18
- # @yield [index]
19
- # @yieldparam [Integer] Index
20
- # @yieldreturn [Class] self
21
- # @return [Enumerator]
22
- def each_index
23
- return to_enum(__callee__) unless block_given?
24
-
25
- @autonyms.each_index{|index|yield index}
26
- self
27
- end
28
-
29
- # @yield [autonym, index]
30
- # @yieldparam [Symbol] autonym
31
- # @yieldparam [Integer] index
32
- # @yieldreturn [Class] self
33
- # @return [Enumerator]
34
- def each_autonym_with_index
35
- return to_enum(__callee__) unless block_given?
36
-
37
- @autonyms.each_with_index{|autonym, index|yield autonym, index}
38
- self
39
- end
40
-
41
- alias_method :each_member_with_index, :each_autonym_with_index
42
-
43
- # @endgroup
44
-
45
- end; end
47
+ end
@@ -1,28 +1,30 @@
1
- class Striuct; module ClassMethods
1
+ # frozen_string_literal: true
2
2
 
3
- # @group Fix inner data structures
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Fix inner data structures
4
6
 
5
- # @return [self]
6
- def freeze
7
- [@autonyms, @attributes, @aliases].each(&:freeze)
8
- super
9
- end
7
+ # @return [self]
8
+ def freeze
9
+ [@autonyms, @attributes, @aliases].each(&:freeze)
10
+ super
11
+ end
10
12
 
11
- def closed?
12
- [@autonyms, @attributes, @aliases].any?(&:frozen?)
13
- end
13
+ def closed?
14
+ [@autonyms, @attributes, @aliases].any?(&:frozen?)
15
+ end
14
16
 
15
- private
17
+ private
16
18
 
17
- # @return [self]
18
- def close_member
19
- [@autonyms, @attributes, @aliases].each(&:freeze)
20
- self
21
- end
22
-
23
- alias_method :fix_structural, :close_member
24
- alias_method :close, :close_member
19
+ # @return [self]
20
+ def close_member
21
+ [@autonyms, @attributes, @aliases].each(&:freeze)
22
+ self
23
+ end
25
24
 
26
- # @endgroup
25
+ alias_method :fix_structural, :close_member
26
+ alias_method :close, :close_member
27
27
 
28
- end; end
28
+ # @endgroup
29
+ end
30
+ end
@@ -1,19 +1,19 @@
1
- class Striuct; module ClassMethods
1
+ # frozen_string_literal: true
2
2
 
3
- module HashDeepDupulicatable
4
-
5
- # @return [Hash]
6
- def deep_dup
7
- dup.tap {|h|
8
- each_pair do |key, value|
9
- h[key] = value.dup
10
- end
11
- h.extend HashDeepDupulicatable
12
- }
3
+ class Striuct
4
+ module ClassMethods
5
+ module HashDeepDupulicatable
6
+ # @return [Hash]
7
+ def deep_dup
8
+ dup.tap { |h|
9
+ each_pair do |key, value|
10
+ h[key] = value.dup
11
+ end
12
+ h.extend HashDeepDupulicatable
13
+ }
14
+ end
13
15
  end
14
16
 
17
+ private_constant :HashDeepDupulicatable
15
18
  end
16
-
17
- private_constant :HashDeepDupulicatable
18
-
19
- end; end
19
+ end
@@ -1,80 +1,73 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group Inner Methods
4
-
5
- # for debug
6
- # @return [Hash]
7
- def attributes
8
- {
9
- autonyms: @autonyms.dup,
10
- aliases: @aliases.dup,
11
- conflict_management_level: @conflict_management_level,
12
- attributes_each_autonym: @attributes.dup
13
- }
14
- end
15
-
16
- private
17
-
18
- def _init
19
- @autonyms = []
20
- @attributes = {}.extend HashDeepDupulicatable # autonym => Attributes
21
- @aliases = {} # aliased => autonym
22
- @conflict_management_level = DEFAULT_CONFLICT_MANAGEMENT_LEVEL
23
- end
24
-
25
- def _add_autonym(autonym)
26
- autonym = autonym.to_sym
27
- raise NameError, 'already defined' if member? autonym
1
+ # frozen_string_literal: true
2
+
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Inner Methods
6
+
7
+ # for debug
8
+ # @return [Hash]
9
+ def attributes
10
+ {
11
+ autonyms: @autonyms.dup,
12
+ aliases: @aliases.dup,
13
+ conflict_management_level: @conflict_management_level,
14
+ attributes_each_autonym: @attributes.dup
15
+ }
16
+ end
28
17
 
29
- @attributes[autonym] = Attributes.new
30
- @autonyms << autonym
31
- end
18
+ private
32
19
 
33
- def _attributes_for(autonym)
34
- @attributes.fetch autonym
35
- end
20
+ def _init
21
+ @autonyms = []
22
+ @attributes = {}.extend HashDeepDupulicatable # autonym => Attributes
23
+ @aliases = {} # aliased => autonym
24
+ @conflict_management_level = DEFAULT_CONFLICT_MANAGEMENT_LEVEL
25
+ end
36
26
 
37
- def _check_frozen
38
- raise "can't modify frozen Class" if frozen?
39
- end
27
+ def _add_autonym(autonym)
28
+ autonym = autonym.to_sym
29
+ raise NameError, 'already defined' if member?(autonym)
40
30
 
41
- def _check_closed
42
- raise "can't modify closed member attributes in #{self}" if closed?
43
- end
31
+ @attributes[autonym] = Attributes.new
32
+ @autonyms << autonym
33
+ end
44
34
 
45
- def _def_getter(autonym)
46
- define_method autonym do
47
- _get autonym
35
+ def _attributes_for(autonym)
36
+ @attributes.fetch(autonym)
48
37
  end
49
-
50
- nil
51
- end
52
38
 
53
- def _def_setter(autonym, condition, &adjuster)
54
- unless ANYTHING.equal? condition
55
- _attributes_for(autonym).condition = condition
39
+ def _check_frozen
40
+ raise "can't modify frozen Class" if frozen?
56
41
  end
57
42
 
58
- if block_given?
59
- _attributes_for(autonym).adjuster = adjuster
43
+ def _check_closed
44
+ raise "can't modify closed member attributes in #{self}" if closed?
60
45
  end
61
46
 
62
- define_method :"#{autonym}=" do |value|
63
- _set autonym, value
47
+ def _def_getter(autonym)
48
+ define_method(autonym) do
49
+ _get(autonym)
50
+ end
51
+
52
+ nil
64
53
  end
65
-
66
- nil
67
- end
68
54
 
69
- def _found_family(autonym, other)
70
- family = other.class
55
+ def _def_setter(autonym, condition, &adjuster)
56
+ unless ANYTHING.equal?(condition)
57
+ _attributes_for(autonym).condition = condition
58
+ end
71
59
 
72
- _attributes_for(autonym).condition = family
73
- _attributes_for(autonym).inference = false
60
+ if adjuster
61
+ _attributes_for(autonym).adjuster = adjuster
62
+ end
74
63
 
75
- nil
76
- end
77
-
78
- # @endgroup
64
+ define_method(:"#{autonym}=") do |value|
65
+ _set(autonym, value)
66
+ end
67
+
68
+ nil
69
+ end
79
70
 
80
- end; end
71
+ # @endgroup
72
+ end
73
+ end
@@ -1,14 +1,16 @@
1
- class Striuct; module ClassMethods
1
+ # frozen_string_literal: true
2
2
 
3
- # @group Length/Size
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Length/Size
4
6
 
5
- # @return [Integer]
6
- def length
7
- @autonyms.length
8
- end
9
-
10
- alias_method :size, :length
7
+ # @return [Integer]
8
+ def length
9
+ @autonyms.length
10
+ end
11
11
 
12
- # @endgroup
12
+ alias_method :size, :length
13
13
 
14
- end; end
14
+ # @endgroup
15
+ end
16
+ end
@@ -1,122 +1,109 @@
1
- class Striuct; module ClassMethods
2
-
3
- # @group Macro for Member Definition
4
-
5
- ANYTHING = ::Validation::Condition::ANYTHING
6
-
7
- # @return [Class]
8
- ADD_MEMBER_OptArg = OptionalArgument.define {
9
- opt :default_value, aliases: [:default]
10
- opt :default_proc, aliases: [:lazy_default]
11
- conflict :default_value, :default_proc
12
- opt :inference, default: false
13
- opt :must, default: false
14
- opt :setter_validation, aliases: [:writer_validation], default: true
15
- opt :getter_validation, aliases: [:reader_validation], default: false
16
- }
17
-
18
- private
19
-
20
- # @param [Symbol, String, #to_sym] autonym
21
- # @param [#===, Proc, Method, ANYTHING] condition
22
- # @param [Hash] options
23
- # @option options [BasicObject] :default
24
- # @option options [Proc] :default_proc
25
- # @option options [Boolean] :inference
26
- # @option options [Boolean] :must
27
- # @option options [Boolean] :reader_validation
28
- # @option options [Boolean] :getter_validation
29
- # @option options [Boolean] :writer_validation
30
- # @option options [Boolean] :setter_validation
31
- # @return [nil]
32
- def add_member(autonym, condition=ANYTHING, options={}, &adjuster)
33
- _check_frozen
34
- _check_closed
35
-
36
- options = ADD_MEMBER_OptArg.parse options
37
- autonym = autonym.to_sym # First difinition for an autonym
38
-
39
- raise ArgumentError, %Q!already exist name "#{autonym}"! if member? autonym
40
- _check_safety_naming autonym
41
- _add_autonym autonym
42
-
43
- _attributes_for(autonym).safety_setter = !!options.setter_validation
44
- _attributes_for(autonym).safety_getter = !!options.getter_validation
45
-
46
- if options.inference
47
- _attributes_for(autonym).inference = true
48
- end
1
+ # frozen_string_literal: true
2
+
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Macro for Member Definition
6
+
7
+ ANYTHING = Eqq.ANYTHING()
8
+
9
+ # @return [Class]
10
+
11
+ private
12
+
13
+ # @param [Symbol, String, #to_sym] autonym
14
+ # @param [#===, Proc, Method] pattern
15
+ # @param [Proc] default_proc
16
+ # @param [Boolean] must
17
+ # @param [Boolean] writer_validation
18
+ # @param [Boolean] reader_validation
19
+ # @return [void]
20
+ def add_member(autonym, pattern=ANYTHING, default_value: nil, default_proc: nil, must: false, writer_validation: true, reader_validation: false, &adjuster)
21
+ _check_frozen
22
+ _check_closed
23
+
24
+ raise ArgumentError if !default_value.nil? && default_proc
25
+
26
+ autonym = autonym.to_sym # First definition for an autonym
27
+
28
+ raise ArgumentError, %Q!already exist name "#{autonym}"! if member?(autonym)
29
+
30
+ _check_safety_naming(autonym)
31
+ _add_autonym(autonym)
32
+
33
+ _attributes_for(autonym).safety_setter = writer_validation
34
+ _attributes_for(autonym).safety_getter = reader_validation
35
+
36
+ if must
37
+ _attributes_for(autonym).must = true
38
+ end
39
+
40
+ _def_getter(autonym)
41
+ _def_setter(autonym, pattern, &adjuster)
42
+
43
+ case
44
+ when !default_value.nil?
45
+ set_default_value(autonym, default_value)
46
+ when default_proc
47
+ set_default_value(autonym, &default_proc)
48
+ end
49
49
 
50
- if options.must
51
- _attributes_for(autonym).must = true
50
+ nil
52
51
  end
53
52
 
54
- _def_getter autonym
55
- _def_setter autonym, condition, &adjuster
56
-
57
- case
58
- when options.default_value?
59
- set_default_value autonym, options.default_value
60
- when options.default_proc?
61
- set_default_value autonym, &options.default_proc
53
+ alias_method :member, :add_member
54
+
55
+ # @param [Symbol, String, #to_sym] autonym
56
+ # @param [Symbol, String, #to_sym] autonyms
57
+ # @return [nil]
58
+ def add_members(autonym, *autonyms)
59
+ _check_frozen
60
+ _check_closed
61
+
62
+ [autonym, *autonyms].each { |name| add_member(name) }
63
+ nil
62
64
  end
63
-
64
- nil
65
- end
66
65
 
67
- alias_method :member, :add_member
68
-
69
- # @param [Symbol, String, #to_sym] autonym
70
- # @param [Symbol, String, #to_sym] autonyms
71
- # @return [nil]
72
- def add_members(autonym, *autonyms)
73
- _check_frozen
74
- _check_closed
75
-
76
- [autonym, *autonyms].each {|_autonym|add_member _autonym}
77
- nil
78
- end
66
+ # @param [Symbol, String, #to_sym] aliased
67
+ # @param [Symbol, String, #to_sym] autonym
68
+ # @return [nil]
69
+ def alias_member(aliased, autonym)
70
+ _check_frozen
71
+ _check_closed
72
+ autonym = autonym_for_member(autonym)
73
+ aliased = aliased.to_sym
74
+ raise ArgumentError, %Q!already exist name "#{aliased}"! if member?(aliased)
75
+
76
+ _check_safety_naming(aliased)
77
+
78
+ alias_method(aliased, autonym)
79
+ alias_method(:"#{aliased}=", :"#{autonym}=")
80
+ @aliases[aliased] = autonym
81
+ nil
82
+ end
79
83
 
80
- # @param [Symbol, String, #to_sym] aliased
81
- # @param [Symbol, String, #to_sym] autonym
82
- # @return [nil]
83
- def alias_member(aliased, autonym)
84
- _check_frozen
85
- _check_closed
86
- autonym = autonym_for_member autonym
87
- aliased = aliased.to_sym
88
- raise ArgumentError, %Q!already exist name "#{aliased}"! if member? aliased
89
- _check_safety_naming aliased
90
-
91
- alias_method aliased, autonym
92
- alias_method :"#{aliased}=", :"#{autonym}="
93
- @aliases[aliased] = autonym
94
- nil
95
- end
96
-
97
- # @param [Symbol, String, #to_sym] name
98
- # @return [nil]
99
- def set_default_value(name, value=nil, &block)
100
- _check_frozen
101
- _check_closed
102
- autonym = autonym_for_member name
103
- raise "already settled default value for #{name}" if with_default? autonym
104
-
105
- if block_given?
106
- unless value.nil?
107
- raise ArgumentError, 'can not use default-value with default-proc'
84
+ # @param [Symbol, String, #to_sym] name
85
+ # @return [nil]
86
+ def set_default_value(name, value=nil, &block)
87
+ _check_frozen
88
+ _check_closed
89
+ autonym = autonym_for_member(name)
90
+ raise "already settled default value for #{name}" if with_default?(autonym)
91
+
92
+ if block
93
+ unless value.nil?
94
+ raise ArgumentError, 'can not use default-value with default-proc'
95
+ end
96
+
97
+ _attributes_for(autonym).set_default(block, :lazy)
98
+ else
99
+ _attributes_for(autonym).set_default(value, :value)
108
100
  end
109
101
 
110
- _attributes_for(autonym).set_default block, :lazy
111
- else
112
- _attributes_for(autonym).set_default value, :value
102
+ nil
113
103
  end
114
-
115
- nil
116
- end
117
-
118
- alias_method :default, :set_default_value
119
104
 
120
- # @endgroup
105
+ alias_method :default, :set_default_value
121
106
 
122
- end; end
107
+ # @endgroup
108
+ end
109
+ end