striuct 0.6.1 → 0.9.0

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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE.txt +21 -0
  3. data/README.md +44 -60
  4. data/lib/striuct/{requirements.rb → bootstrap.rb} +6 -2
  5. data/lib/striuct/classmethods/README.md +2 -2
  6. data/lib/striuct/classmethods/adjustment.rb +77 -13
  7. data/lib/striuct/classmethods/attributes.rb +94 -92
  8. data/lib/striuct/classmethods/conflict_management.rb +109 -106
  9. data/lib/striuct/classmethods/constructor.rb +55 -65
  10. data/lib/striuct/classmethods/copy.rb +45 -43
  11. data/lib/striuct/classmethods/default.rb +23 -21
  12. data/lib/striuct/classmethods/enum.rb +46 -44
  13. data/lib/striuct/classmethods/fix.rb +23 -21
  14. data/lib/striuct/classmethods/hashdeepdupulicatable.rb +15 -15
  15. data/lib/striuct/classmethods/inner.rb +57 -55
  16. data/lib/striuct/classmethods/length.rb +12 -10
  17. data/lib/striuct/classmethods/macro.rb +99 -106
  18. data/lib/striuct/classmethods/names.rb +69 -65
  19. data/lib/striuct/classmethods/predicate.rb +131 -129
  20. data/lib/striuct/classmethods/requirements.rb +2 -2
  21. data/lib/striuct/classmethods/to_struct.rb +21 -18
  22. data/lib/striuct/classmethods/validation.rb +15 -13
  23. data/lib/striuct/instancemethods/README.md +2 -2
  24. data/lib/striuct/instancemethods/assign.rb +29 -27
  25. data/lib/striuct/instancemethods/cast.rb +28 -26
  26. data/lib/striuct/instancemethods/compare.rb +26 -24
  27. data/lib/striuct/instancemethods/default.rb +31 -29
  28. data/lib/striuct/instancemethods/delegate_class_methods.rb +35 -33
  29. data/lib/striuct/instancemethods/enum.rb +86 -84
  30. data/lib/striuct/instancemethods/getter.rb +39 -37
  31. data/lib/striuct/instancemethods/hashy.rb +99 -97
  32. data/lib/striuct/instancemethods/lock.rb +46 -44
  33. data/lib/striuct/instancemethods/object.rb +50 -48
  34. data/lib/striuct/instancemethods/requirements.rb +9 -13
  35. data/lib/striuct/instancemethods/safety.rb +11 -9
  36. data/lib/striuct/instancemethods/setter.rb +46 -45
  37. data/lib/striuct/instancemethods/to_s.rb +39 -37
  38. data/lib/striuct/instancemethods/validation.rb +46 -29
  39. data/lib/striuct/instancemethods/values.rb +50 -48
  40. data/lib/striuct/singleton_class.rb +25 -18
  41. data/lib/striuct/structs.rb +3 -3
  42. data/lib/striuct.rb +7 -3
  43. metadata +18 -209
  44. data/.gitignore +0 -35
  45. data/.travis.yml +0 -17
  46. data/.yardopts +0 -1
  47. data/Gemfile +0 -11
  48. data/MIT-LICENSE +0 -22
  49. data/Rakefile +0 -11
  50. data/benchmark/basics.rb +0 -56
  51. data/example/README.rb +0 -50
  52. data/example/example1.rb +0 -195
  53. data/example/example2.rb +0 -20
  54. data/example/see_trace.rb +0 -32
  55. data/lib/striuct/instancemethods/keyvalidatable.rb +0 -9
  56. data/striuct.gemspec +0 -45
  57. data/test/helper.rb +0 -3
  58. data/test/test_sglc-constructor.rb +0 -36
  59. data/test/test_subc-c-add_members.rb +0 -13
  60. data/test/test_subc-c-close_member.rb +0 -36
  61. data/test/test_subc-c-constructor.rb +0 -92
  62. data/test/test_subc-c-copy.rb +0 -71
  63. data/test/test_subc-c-freeze.rb +0 -36
  64. data/test/test_subc-c-inheritable.rb +0 -58
  65. data/test/test_subc-c-safety_naming.rb +0 -73
  66. data/test/test_subc-f-alias_member.rb +0 -54
  67. data/test/test_subc-f-enum.rb +0 -159
  68. data/test/test_subc-f-predicate.rb +0 -647
  69. data/test/test_subc-f-to_struct.rb +0 -61
  70. data/test/test_subc-f-validation_util.rb +0 -59
  71. data/test/test_subc-f_debug.rb +0 -39
  72. data/test/test_subc-f_name.rb +0 -525
  73. data/test/test_subc-i-accessor.rb +0 -138
  74. data/test/test_subc-i-adjuster.rb +0 -95
  75. data/test/test_subc-i-assign.rb +0 -53
  76. data/test/test_subc-i-basic.rb +0 -43
  77. data/test/test_subc-i-cast.rb +0 -27
  78. data/test/test_subc-i-compare.rb +0 -52
  79. data/test/test_subc-i-copy.rb +0 -23
  80. data/test/test_subc-i-default_value.rb +0 -129
  81. data/test/test_subc-i-freeze.rb +0 -19
  82. data/test/test_subc-i-hashlike.rb +0 -144
  83. data/test/test_subc-i-keyvalidatable.rb +0 -25
  84. data/test/test_subc-i-lock.rb +0 -40
  85. data/test/test_subc-i-must.rb +0 -30
  86. data/test/test_subc-i-to_s_family.rb +0 -26
  87. data/test/test_subc-i-validation_specific_conditions.rb +0 -297
  88. data/test/test_subc-i-validation_with_getter.rb +0 -33
  89. data/test/test_version.rb +0 -13
@@ -1,71 +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
1
+ # frozen_string_literal: true
17
2
 
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
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Inner Methods
24
6
 
25
- def _add_autonym(autonym)
26
- autonym = autonym.to_sym
27
- raise NameError, 'already defined' if member? autonym
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
- # @endgroup
55
+ def _def_setter(autonym, condition, &adjuster)
56
+ unless ANYTHING.equal?(condition)
57
+ _attributes_for(autonym).condition = condition
58
+ end
59
+
60
+ if adjuster
61
+ _attributes_for(autonym).adjuster = adjuster
62
+ end
70
63
 
71
- end; end
64
+ define_method(:"#{autonym}=") do |value|
65
+ _set(autonym, value)
66
+ end
67
+
68
+ nil
69
+ end
70
+
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,116 +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 :must, default: false
13
- opt :setter_validation, aliases: [:writer_validation], default: true
14
- opt :getter_validation, aliases: [:reader_validation], default: false
15
- }
16
-
17
- private
18
-
19
- # @param [Symbol, String, #to_sym] autonym
20
- # @param [#===, Proc, Method, ANYTHING] condition
21
- # @param [Hash] options
22
- # @option options [BasicObject] :default
23
- # @option options [Proc] :default_proc
24
- # @option options [Boolean] :must
25
- # @option options [Boolean] :reader_validation
26
- # @option options [Boolean] :getter_validation
27
- # @option options [Boolean] :writer_validation
28
- # @option options [Boolean] :setter_validation
29
- # @return [nil]
30
- def add_member(autonym, condition=ANYTHING, options={}, &adjuster)
31
- _check_frozen
32
- _check_closed
33
-
34
- options = ADD_MEMBER_OptArg.parse options
35
- autonym = autonym.to_sym # First difinition for an autonym
36
-
37
- raise ArgumentError, %Q!already exist name "#{autonym}"! if member? autonym
38
- _check_safety_naming autonym
39
- _add_autonym autonym
40
-
41
- _attributes_for(autonym).safety_setter = !!options.setter_validation
42
- _attributes_for(autonym).safety_getter = !!options.getter_validation
43
-
44
- if options.must
45
- _attributes_for(autonym).must = true
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
+
50
+ nil
46
51
  end
47
52
 
48
- _def_getter autonym
49
- _def_setter autonym, condition, &adjuster
50
-
51
- case
52
- when options.default_value?
53
- set_default_value autonym, options.default_value
54
- when options.default_proc?
55
- 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
56
64
  end
57
-
58
- nil
59
- end
60
65
 
61
- alias_method :member, :add_member
62
-
63
- # @param [Symbol, String, #to_sym] autonym
64
- # @param [Symbol, String, #to_sym] autonyms
65
- # @return [nil]
66
- def add_members(autonym, *autonyms)
67
- _check_frozen
68
- _check_closed
69
-
70
- [autonym, *autonyms].each {|_autonym|add_member _autonym}
71
- nil
72
- 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
73
83
 
74
- # @param [Symbol, String, #to_sym] aliased
75
- # @param [Symbol, String, #to_sym] autonym
76
- # @return [nil]
77
- def alias_member(aliased, autonym)
78
- _check_frozen
79
- _check_closed
80
- autonym = autonym_for_member autonym
81
- aliased = aliased.to_sym
82
- raise ArgumentError, %Q!already exist name "#{aliased}"! if member? aliased
83
- _check_safety_naming aliased
84
-
85
- alias_method aliased, autonym
86
- alias_method :"#{aliased}=", :"#{autonym}="
87
- @aliases[aliased] = autonym
88
- nil
89
- end
90
-
91
- # @param [Symbol, String, #to_sym] name
92
- # @return [nil]
93
- def set_default_value(name, value=nil, &block)
94
- _check_frozen
95
- _check_closed
96
- autonym = autonym_for_member name
97
- raise "already settled default value for #{name}" if with_default? autonym
98
-
99
- if block_given?
100
- unless value.nil?
101
- 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)
102
100
  end
103
101
 
104
- _attributes_for(autonym).set_default block, :lazy
105
- else
106
- _attributes_for(autonym).set_default value, :value
102
+ nil
107
103
  end
108
-
109
- nil
110
- end
111
-
112
- alias_method :default, :set_default_value
113
104
 
114
- # @endgroup
105
+ alias_method :default, :set_default_value
115
106
 
116
- end; end
107
+ # @endgroup
108
+ end
109
+ end
@@ -1,75 +1,79 @@
1
- class Striuct; module ClassMethods
1
+ # frozen_string_literal: true
2
2
 
3
- # @group Named
3
+ class Striuct
4
+ module ClassMethods
5
+ # @group Named
4
6
 
5
- # @return [Array<Symbol>]
6
- def autonyms
7
- @autonyms.dup
8
- end
7
+ # @return [Array<Symbol>]
8
+ def autonyms
9
+ @autonyms.dup
10
+ end
9
11
 
10
- alias_method :members, :autonyms
11
-
12
- # @return [Array<Symbol>]
13
- def all_members
14
- @autonyms + @aliases.keys
15
- end
16
-
17
- # @param [Symbol, String, #to_sym] als
18
- # @return [Symbol]
19
- def autonym_for_alias(als)
20
- @aliases.fetch als.to_sym
21
- rescue NoMethodError
22
- raise TypeError
23
- rescue KeyError
24
- raise NameError
25
- end
12
+ alias_method :members, :autonyms
26
13
 
27
- # @param [Symbol, String, #to_sym] name - autonym / aliased
28
- # @return [Symbol]
29
- def autonym_for_member(name)
30
- raise TypeError unless name.respond_to? :to_sym
31
- name = name.to_sym
32
-
33
- @autonyms.include?(name) ? name : autonym_for_alias(name)
34
- end
14
+ # @return [Array<Symbol>]
15
+ def all_members
16
+ @autonyms + @aliases.keys
17
+ end
35
18
 
36
- # @param [Index, #to_int] index
37
- # @return [Symbol] autonym
38
- def autonym_for_index(index)
39
- @autonyms.fetch index
40
- end
19
+ # @param [Symbol, String, #to_sym] als
20
+ # @return [Symbol]
21
+ def autonym_for_alias(als)
22
+ @aliases.fetch(als.to_sym)
23
+ rescue NoMethodError
24
+ raise TypeError
25
+ rescue KeyError
26
+ raise NameError
27
+ end
41
28
 
42
- # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
43
- # @return [Symbol] autonym
44
- def autonym_for_key(key)
45
- key.respond_to?(:to_sym) ? autonym_for_member(key) : autonym_for_index(key)
46
- rescue NameError, IndexError, TypeError
47
- raise KeyError
48
- end
29
+ # @param [Symbol, String, #to_sym] name - autonym / aliased
30
+ # @return [Symbol]
31
+ def autonym_for_member(name)
32
+ raise TypeError unless name.respond_to?(:to_sym)
49
33
 
50
- # @param [Symbol, String, #to_sym] autonym
51
- # @return [Array<Symbol>]
52
- def aliases_for_autonym(autonym)
53
- raise TypeError unless autonym.respond_to?(:to_sym)
54
- autonym = autonym.to_sym
55
- raise NameError unless with_aliases? autonym
34
+ name = name.to_sym
56
35
 
57
- @aliases.select{|als, aut|autonym == aut}.keys
58
- end
59
-
60
- # @return [Hash] alias => autonym
61
- def aliases
62
- @aliases.dup
63
- end
64
-
65
- private
36
+ @autonyms.include?(name) ? name : autonym_for_alias(name)
37
+ end
66
38
 
67
- # for direct access inner data from own instance
68
- # @return [Hash] alias => autonym
69
- def _autonyms
70
- @autonyms
71
- end
72
-
73
- # @endgroup
39
+ # @param [Index, #to_int] index
40
+ # @return [Symbol] autonym
41
+ def autonym_for_index(index)
42
+ @autonyms.fetch(index)
43
+ end
74
44
 
75
- end; end
45
+ # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
46
+ # @return [Symbol] autonym
47
+ def autonym_for_key(key)
48
+ key.respond_to?(:to_sym) ? autonym_for_member(key) : autonym_for_index(key)
49
+ rescue NameError, IndexError, TypeError
50
+ raise KeyError
51
+ end
52
+
53
+ # @param [Symbol, String, #to_sym] autonym
54
+ # @return [Array<Symbol>]
55
+ def aliases_for_autonym(autonym)
56
+ raise TypeError unless autonym.respond_to?(:to_sym)
57
+
58
+ autonym = autonym.to_sym
59
+ raise NameError unless with_aliases?(autonym)
60
+
61
+ @aliases.select { |_als, aut| autonym == aut }.keys
62
+ end
63
+
64
+ # @return [Hash] alias => autonym
65
+ def aliases
66
+ @aliases.dup
67
+ end
68
+
69
+ private
70
+
71
+ # for direct access inner data from own instance
72
+ # @return [Hash] alias => autonym
73
+ def _autonyms
74
+ @autonyms
75
+ end
76
+
77
+ # @endgroup
78
+ end
79
+ end