striuct 0.3.5.1 → 0.4.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 (92) hide show
  1. data/.travis.yml +3 -0
  2. data/.yardopts +1 -1
  3. data/LICENSE +1 -1
  4. data/README.md +7 -3
  5. data/example/example1.rb +5 -4
  6. data/lib/striuct/classmethods/README.md +9 -4
  7. data/lib/striuct/classmethods/adjustment.rb +4 -15
  8. data/lib/striuct/{attributes.rb → classmethods/attributes.rb} +15 -17
  9. data/lib/striuct/classmethods/{prevent_conflicts.rb → conflict_management.rb} +37 -14
  10. data/lib/striuct/classmethods/constructor.rb +2 -4
  11. data/lib/striuct/classmethods/copy.rb +2 -2
  12. data/lib/striuct/classmethods/default.rb +9 -18
  13. data/lib/striuct/classmethods/enum.rb +3 -5
  14. data/lib/striuct/classmethods/inner.rb +6 -10
  15. data/lib/striuct/classmethods/macro.rb +33 -48
  16. data/lib/striuct/classmethods/names.rb +75 -0
  17. data/lib/striuct/classmethods/predicate.rb +128 -0
  18. data/lib/striuct/classmethods/{requiremnets.rb → requirements.rb} +6 -3
  19. data/lib/striuct/classmethods/validation.rb +5 -43
  20. data/lib/striuct/instancemethods/README.md +4 -4
  21. data/lib/striuct/instancemethods/assign.rb +11 -13
  22. data/lib/striuct/instancemethods/cast.rb +5 -8
  23. data/lib/striuct/instancemethods/compare.rb +6 -6
  24. data/lib/striuct/instancemethods/default.rb +28 -6
  25. data/lib/striuct/instancemethods/delegate_class_methods.rb +21 -21
  26. data/lib/striuct/instancemethods/enum.rb +3 -9
  27. data/lib/striuct/instancemethods/getter.rb +47 -0
  28. data/lib/striuct/instancemethods/hashy.rb +2 -6
  29. data/lib/striuct/instancemethods/keyvalidatable.rb +0 -5
  30. data/lib/striuct/instancemethods/lock.rb +35 -43
  31. data/lib/striuct/instancemethods/object.rb +3 -26
  32. data/lib/striuct/instancemethods/requirements.rb +16 -2
  33. data/lib/striuct/instancemethods/safety.rb +1 -1
  34. data/lib/striuct/instancemethods/setter.rb +58 -0
  35. data/lib/striuct/instancemethods/to_s.rb +2 -2
  36. data/lib/striuct/instancemethods/validation.rb +13 -7
  37. data/lib/striuct/instancemethods/values.rb +8 -7
  38. data/lib/striuct/requirements.rb +2 -5
  39. data/lib/striuct/{hashdeepdupulicatable.rb → singleton_class/hashdeepdupulicatable.rb} +2 -2
  40. data/lib/striuct/singleton_class.rb +3 -4
  41. data/striuct.gemspec +7 -4
  42. data/test/test_sglc-constructor.rb +36 -0
  43. data/test/test_subc-c-constructor.rb +88 -0
  44. data/test/{test_striuct-subclass-class-safety_naming.rb → test_subc-c-safety_naming.rb} +6 -5
  45. data/test/test_subc-f-enum.rb +139 -0
  46. data/test/test_subc-f-predicate.rb +647 -0
  47. data/test/{test_striuct-subclass-feature-validation_util.rb → test_subc-f-validation_util.rb} +10 -8
  48. data/test/test_subc-f_name.rb +525 -0
  49. data/test/{test_striuct-subclass-instance-accessor.rb → test_subc-i-accessor.rb} +3 -2
  50. data/test/test_subc-i-assign.rb +49 -0
  51. data/test/test_subc-i-cast.rb +27 -0
  52. data/test/{test_striuct-subclass-instance-default_value.rb → test_subc-i-default_value.rb} +2 -2
  53. data/test/{test_striuct-subclass-instance-hashlike.rb → test_subc-i-hashlike.rb} +0 -9
  54. data/test/{test_striuct-subclass-instance-lock.rb → test_subc-i-lock.rb} +8 -8
  55. data/test/{test_striuct-subclass-instance-to_s_family.rb → test_subc-i-to_s_family.rb} +1 -1
  56. data/test/{test_striuct-subclass-instance-validation_specific_conditions.rb → test_subc-i-validation_specific_conditions.rb} +50 -0
  57. data/test/test_version.rb +14 -0
  58. metadata +124 -80
  59. data/Manifest.txt +0 -97
  60. data/README.ja.old.rdoc +0 -298
  61. data/example/example.old.rdoc +0 -188
  62. data/lib/striuct/classmethods/hashy.rb +0 -22
  63. data/lib/striuct/classmethods/named.rb +0 -126
  64. data/lib/striuct/classmethods.rb +0 -1
  65. data/lib/striuct/instancemethods/inner_accessor.rb +0 -53
  66. data/lib/striuct/instancemethods/subscript.rb +0 -27
  67. data/lib/striuct/instancemethods.rb +0 -1
  68. data/lib/striuct/version.rb +0 -5
  69. data/test/test_striuct-singleton_class-define.rb +0 -19
  70. data/test/test_striuct-subclass-class-constructor.rb +0 -82
  71. data/test/test_striuct-subclass-class-validation.rb +0 -26
  72. data/test/test_striuct-subclass-instance-assign.rb +0 -30
  73. data/test/test_striuct-subclass-instance-enum.rb +0 -93
  74. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +0 -51
  75. data/test/test_striuct-subclass-instance_names.rb +0 -18
  76. data/test/test_striuct-version.rb +0 -11
  77. /data/{History.rdoc → History.old(~0.3.n).rdoc} +0 -0
  78. /data/test/{test_striuct-subclass-class-macro.rb → test_subc-c-add_members.rb} +0 -0
  79. /data/test/{test_striuct-subclass-class-close.rb → test_subc-c-close_member.rb} +0 -0
  80. /data/test/{test_striuct-subclass-class-copy.rb → test_subc-c-copy.rb} +0 -0
  81. /data/test/{test_striuct-subclass-class-freeze.rb → test_subc-c-freeze.rb} +0 -0
  82. /data/test/{test_striuct-subclass-class-inheritable.rb → test_subc-c-inheritable.rb} +0 -0
  83. /data/test/{test_striuct-subclass-feature-alias_member.rb → test_subc-f-alias_member.rb} +0 -0
  84. /data/test/{test_striuct-subclass-feature-to_struct.rb → test_subc-f-to_struct.rb} +0 -0
  85. /data/test/{test_striuct-subclass-instance-adjuster.rb → test_subc-i-adjuster.rb} +0 -0
  86. /data/test/{test_striuct-subclass-instance-basic.rb → test_subc-i-basic.rb} +0 -0
  87. /data/test/{test_striuct-subclass-instance-compare.rb → test_subc-i-compare.rb} +0 -0
  88. /data/test/{test_striuct-subclass-instance-copy.rb → test_subc-i-copy.rb} +0 -0
  89. /data/test/{test_striuct-subclass-instance-freeze.rb → test_subc-i-freeze.rb} +0 -0
  90. /data/test/{test_striuct-subclass-instance-keyvalidatable.rb → test_subc-i-keyvalidatable.rb} +0 -0
  91. /data/test/{test_striuct-subclass-instance-validation_inference.rb → test_subc-i-validation_inference.rb} +0 -0
  92. /data/test/{test_striuct-subclass-instance-validation_with_getter.rb → test_subc-i-validation_with_getter.rb} +0 -0
@@ -0,0 +1,647 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_BasicPredicate < Test::Unit::TestCase
4
+
5
+ class Subclass < Striuct
6
+ member :foo
7
+ member :bar
8
+ alias_member :aliased, :bar
9
+ close_member
10
+ end.freeze
11
+
12
+ INSTANCE = Subclass.new.freeze
13
+
14
+ TYPE_PAIRS = {
15
+ class: Subclass,
16
+ instance: INSTANCE
17
+ }.freeze
18
+
19
+ [:autonym?, :has_autonym?].each do |predicate|
20
+ TYPE_PAIRS.each_pair do |type, reciever|
21
+ define_method :"test_#{type}_#{predicate}" do
22
+ assert_same true, reciever.public_send(predicate, :foo)
23
+ assert_same true, reciever.public_send(predicate, :bar)
24
+ assert_same false, reciever.public_send(predicate, :aliased)
25
+ assert_same false, reciever.public_send(predicate, :xyz)
26
+ assert_same false, reciever.public_send(predicate, 1)
27
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
28
+ assert_same true, reciever.public_send(predicate, 'foo')
29
+ assert_same true, reciever.public_send(predicate, 'bar')
30
+ assert_same false, reciever.public_send(predicate, 'aliased')
31
+ assert_same false, reciever.public_send(predicate, 'xyz')
32
+ end
33
+ end
34
+ end
35
+
36
+ [:alias?, :has_alias?].each do |predicate|
37
+ TYPE_PAIRS.each_pair do |type, reciever|
38
+ define_method :"test_#{type}_#{predicate}" do
39
+ assert_same false, reciever.public_send(predicate, :foo)
40
+ assert_same false, reciever.public_send(predicate, :bar)
41
+ assert_same true, reciever.public_send(predicate, :aliased)
42
+ assert_same false, reciever.public_send(predicate, :xyz)
43
+ assert_same false, reciever.public_send(predicate, 1)
44
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
45
+ assert_same false, reciever.public_send(predicate, 'foo')
46
+ assert_same false, reciever.public_send(predicate, 'bar')
47
+ assert_same true, reciever.public_send(predicate, 'aliased')
48
+ assert_same false, reciever.public_send(predicate, 'xyz')
49
+ end
50
+ end
51
+ end
52
+
53
+ [:member?, :has_member?].each do |predicate|
54
+ TYPE_PAIRS.each_pair do |type, reciever|
55
+ define_method :"test_#{type}_#{predicate}" do
56
+ assert_same true, reciever.public_send(predicate, :foo)
57
+ assert_same true, reciever.public_send(predicate, :bar)
58
+ assert_same true, reciever.public_send(predicate, :aliased)
59
+ assert_same false, reciever.public_send(predicate, :xyz)
60
+ assert_same false, reciever.public_send(predicate, 1)
61
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
62
+ assert_same true, reciever.public_send(predicate, 'foo')
63
+ assert_same true, reciever.public_send(predicate, 'bar')
64
+ assert_same true, reciever.public_send(predicate, 'aliased')
65
+ assert_same false, reciever.public_send(predicate, 'xyz')
66
+ end
67
+ end
68
+ end
69
+
70
+ [:index?, :has_index?].each do |predicate|
71
+ TYPE_PAIRS.each_pair do |type, reciever|
72
+ define_method :"test_#{type}_#{predicate}" do
73
+ assert_same true, reciever.public_send(predicate, 0)
74
+ assert_same true, reciever.public_send(predicate, 1)
75
+ assert_same false, reciever.public_send(predicate, 2)
76
+ assert_same false, reciever.public_send(predicate, 99 * 99)
77
+ assert_same true, reciever.public_send(predicate, -1)
78
+ assert_same true, reciever.public_send(predicate, -2)
79
+ assert_same false, reciever.public_send(predicate, -3)
80
+ assert_same false, reciever.public_send(predicate, -(99 * 99))
81
+ assert_same true, reciever.public_send(predicate, 0.1)
82
+ assert_same true, reciever.public_send(predicate, 1.9)
83
+ assert_same false, reciever.public_send(predicate, '1')
84
+ assert_same false, reciever.public_send(predicate, :foo)
85
+ assert_same false, reciever.public_send(predicate, :bar)
86
+ assert_same false, reciever.public_send(predicate, :aliased)
87
+ assert_same false, reciever.public_send(predicate, :xyz)
88
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
89
+ assert_same false, reciever.public_send(predicate, 'foo')
90
+ assert_same false, reciever.public_send(predicate, 'bar')
91
+ assert_same false, reciever.public_send(predicate, 'aliased')
92
+ assert_same false, reciever.public_send(predicate, 'xyz')
93
+ end
94
+ end
95
+ end
96
+
97
+ [:key?, :has_key?].each do |predicate|
98
+ TYPE_PAIRS.each_pair do |type, reciever|
99
+ define_method :"test_#{type}_#{predicate}" do
100
+ assert_same true, reciever.public_send(predicate, 0)
101
+ assert_same true, reciever.public_send(predicate, 1)
102
+ assert_same false, reciever.public_send(predicate, 2)
103
+ assert_same false, reciever.public_send(predicate, 99 * 99)
104
+ assert_same true, reciever.public_send(predicate, -1)
105
+ assert_same true, reciever.public_send(predicate, -2)
106
+ assert_same false, reciever.public_send(predicate, -3)
107
+ assert_same false, reciever.public_send(predicate, -(99 * 99))
108
+ assert_same true, reciever.public_send(predicate, 0.1)
109
+ assert_same true, reciever.public_send(predicate, 1.9)
110
+ assert_same false, reciever.public_send(predicate, '1')
111
+ assert_same true, reciever.public_send(predicate, :foo)
112
+ assert_same true, reciever.public_send(predicate, :bar)
113
+ assert_same true, reciever.public_send(predicate, :aliased)
114
+ assert_same false, reciever.public_send(predicate, :xyz)
115
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
116
+ assert_same true, reciever.public_send(predicate, 'foo')
117
+ assert_same true, reciever.public_send(predicate, 'bar')
118
+ assert_same true, reciever.public_send(predicate, 'aliased')
119
+ assert_same false, reciever.public_send(predicate, 'xyz')
120
+ end
121
+ end
122
+ end
123
+
124
+ [:with_aliases?].each do |predicate|
125
+ TYPE_PAIRS.each_pair do |type, reciever|
126
+ define_method :"test_#{type}_#{predicate}" do
127
+ assert_same false, reciever.public_send(predicate, :foo)
128
+ assert_same true, reciever.public_send(predicate, :bar)
129
+ assert_same false, reciever.public_send(predicate, :aliased)
130
+ assert_same false, reciever.public_send(predicate, :xyz)
131
+ assert_same false, reciever.public_send(predicate, 1)
132
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
133
+ assert_same false, reciever.public_send(predicate, 'foo')
134
+ assert_same true, reciever.public_send(predicate, 'bar')
135
+ assert_same false, reciever.public_send(predicate, 'aliased')
136
+ assert_same false, reciever.public_send(predicate, 'xyz')
137
+ end
138
+ end
139
+ end
140
+
141
+ end
142
+
143
+
144
+ class Test_Striuct_Subclass_Predicate_Default < Test::Unit::TestCase
145
+
146
+ class Subclass < Striuct
147
+ member :foo
148
+ member :val, ANYTHING?, default: 'DEFAULT'
149
+
150
+ conflict_management :struct do
151
+ member :lazy, ANYTHING?, default_proc: ->{}
152
+ end
153
+
154
+ alias_member :als_foo, :foo
155
+ alias_member :als_val, :val
156
+ alias_member :als_lazy, :lazy
157
+ close_member
158
+ end.freeze
159
+
160
+ INSTANCE = Subclass.new.freeze
161
+
162
+ TYPE_PAIRS = {
163
+ class: Subclass,
164
+ instance: INSTANCE
165
+ }.freeze
166
+
167
+ [:with_default?].each do |predicate|
168
+ TYPE_PAIRS.each_pair do |type, reciever|
169
+ define_method :"test_#{type}_#{predicate}" do
170
+ assert_same false, reciever.public_send(predicate, :foo)
171
+ assert_same false, reciever.public_send(predicate, :als_foo)
172
+ assert_same false, reciever.public_send(predicate, 'foo')
173
+ assert_same false, reciever.public_send(predicate, 'als_foo')
174
+ assert_same false, reciever.public_send(predicate, 0)
175
+ assert_same false, reciever.public_send(predicate, 0.9)
176
+
177
+ assert_same true, reciever.public_send(predicate, :val)
178
+ assert_same true, reciever.public_send(predicate, :als_val)
179
+ assert_same true, reciever.public_send(predicate, 'val')
180
+ assert_same true, reciever.public_send(predicate, 'als_val')
181
+ assert_same true, reciever.public_send(predicate, 1)
182
+ assert_same true, reciever.public_send(predicate, 1.9)
183
+
184
+ assert_same true, reciever.public_send(predicate, :lazy)
185
+ assert_same true, reciever.public_send(predicate, :als_lazy)
186
+ assert_same true, reciever.public_send(predicate, 'lazy')
187
+ assert_same true, reciever.public_send(predicate, 'als_lazy')
188
+ assert_same true, reciever.public_send(predicate, 2)
189
+ assert_same true, reciever.public_send(predicate, 2.9)
190
+
191
+ assert_same false, reciever.public_send(predicate, :none)
192
+ assert_same false, reciever.public_send(predicate, 'none')
193
+ assert_same false, reciever.public_send(predicate, 3)
194
+ assert_same false, reciever.public_send(predicate, 3.9)
195
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
196
+ end
197
+ end
198
+ end
199
+
200
+ end
201
+
202
+ class Test_Striuct_Subclass_Predicate_Adjuster < Test::Unit::TestCase
203
+
204
+ class Subclass < Striuct
205
+ member :no_with
206
+ alias_member :als_no_with, :no_with
207
+ member :with do |_|; end
208
+ alias_member :als_with, :with
209
+ member :cond_with, BasicObject do |_|; end
210
+ alias_member :als_cond_with, :cond_with
211
+
212
+ close_member
213
+ end.freeze
214
+
215
+ INSTANCE = Subclass.new.freeze
216
+
217
+ TYPE_PAIRS = {
218
+ class: Subclass,
219
+ instance: INSTANCE
220
+ }.freeze
221
+
222
+ [:with_adjuster?].each do |predicate|
223
+ TYPE_PAIRS.each_pair do |type, reciever|
224
+ define_method :"test_#{type}_#{predicate}" do
225
+ assert_same false, reciever.public_send(predicate, :no_with)
226
+ assert_same false, reciever.public_send(predicate, :als_no_with)
227
+ assert_same false, reciever.public_send(predicate, 'no_with')
228
+ assert_same false, reciever.public_send(predicate, 'als_no_with')
229
+ assert_same false, reciever.public_send(predicate, 0)
230
+ assert_same false, reciever.public_send(predicate, 0.9)
231
+
232
+ assert_same true, reciever.public_send(predicate, :with)
233
+ assert_same true, reciever.public_send(predicate, :als_with)
234
+ assert_same true, reciever.public_send(predicate, 'with')
235
+ assert_same true, reciever.public_send(predicate, 'als_with')
236
+ assert_same true, reciever.public_send(predicate, 1)
237
+ assert_same true, reciever.public_send(predicate, 1.9)
238
+
239
+ assert_same true, reciever.public_send(predicate, :cond_with)
240
+ assert_same true, reciever.public_send(predicate, :als_cond_with)
241
+ assert_same true, reciever.public_send(predicate, 'cond_with')
242
+ assert_same true, reciever.public_send(predicate, 'als_cond_with')
243
+ assert_same true, reciever.public_send(predicate, 2)
244
+ assert_same true, reciever.public_send(predicate, 2.9)
245
+
246
+ assert_same false, reciever.public_send(predicate, :none)
247
+ assert_same false, reciever.public_send(predicate, 'none')
248
+ assert_same false, reciever.public_send(predicate, 3)
249
+ assert_same false, reciever.public_send(predicate, 3.9)
250
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
251
+ end
252
+ end
253
+ end
254
+
255
+ end
256
+
257
+ class Test_Striuct_Subclass_Predicate_Condition < Test::Unit::TestCase
258
+
259
+ class Subclass < Striuct
260
+ member :no_with
261
+ alias_member :als_no_with, :no_with
262
+ member :with, nil
263
+ alias_member :als_with, :with
264
+ member :with_any, ANYTHING?
265
+ alias_member :als_with_any, :with_any
266
+ member :adj_with, nil do |_|; end
267
+ alias_member :als_adj_with, :adj_with
268
+
269
+ close_member
270
+ end.freeze
271
+
272
+ INSTANCE = Subclass.new.freeze
273
+
274
+ TYPE_PAIRS = {
275
+ class: Subclass,
276
+ instance: INSTANCE
277
+ }.freeze
278
+
279
+ [:with_condition?, :restrict?].each do |predicate|
280
+ TYPE_PAIRS.each_pair do |type, reciever|
281
+ define_method :"test_#{type}_#{predicate}" do
282
+ assert_same false, reciever.public_send(predicate, :no_with)
283
+ assert_same false, reciever.public_send(predicate, :als_no_with)
284
+ assert_same false, reciever.public_send(predicate, 'no_with')
285
+ assert_same false, reciever.public_send(predicate, 'als_no_with')
286
+ assert_same false, reciever.public_send(predicate, 0)
287
+ assert_same false, reciever.public_send(predicate, 0.9)
288
+
289
+ assert_same true, reciever.public_send(predicate, :with)
290
+ assert_same true, reciever.public_send(predicate, :als_with)
291
+ assert_same true, reciever.public_send(predicate, 'with')
292
+ assert_same true, reciever.public_send(predicate, 'als_with')
293
+ assert_same true, reciever.public_send(predicate, 1)
294
+ assert_same true, reciever.public_send(predicate, 1.9)
295
+
296
+ assert_same false, reciever.public_send(predicate, :with_any)
297
+ assert_same false, reciever.public_send(predicate, :als_with_any)
298
+ assert_same false, reciever.public_send(predicate, 'with_any')
299
+ assert_same false, reciever.public_send(predicate, 'als_with_any')
300
+ assert_same false, reciever.public_send(predicate, 2)
301
+ assert_same false, reciever.public_send(predicate, 2.9)
302
+
303
+ assert_same true, reciever.public_send(predicate, :adj_with)
304
+ assert_same true, reciever.public_send(predicate, :als_adj_with)
305
+ assert_same true, reciever.public_send(predicate, 'adj_with')
306
+ assert_same true, reciever.public_send(predicate, 'als_adj_with')
307
+ assert_same true, reciever.public_send(predicate, 3)
308
+ assert_same true, reciever.public_send(predicate, 3.9)
309
+
310
+ assert_same false, reciever.public_send(predicate, :none)
311
+ assert_same false, reciever.public_send(predicate, 'none')
312
+ assert_same false, reciever.public_send(predicate, 4)
313
+ assert_same false, reciever.public_send(predicate, 4.9)
314
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
315
+ end
316
+ end
317
+ end
318
+
319
+ end
320
+
321
+ class Test_Striuct_Subclass_Predicate_InferenceValidation < Test::Unit::TestCase
322
+
323
+ class Subclass < Striuct
324
+ member :no_with
325
+ alias_member :als_no_with, :no_with
326
+ member :with, nil, inference: true
327
+ alias_member :als_with, :with
328
+ member :with_any, ANYTHING?, inference: true
329
+ alias_member :als_with_any, :with_any
330
+ member :adj_with, nil, inference: true do |_|; end
331
+ alias_member :als_adj_with, :adj_with
332
+
333
+ close_member
334
+ end.freeze
335
+
336
+ INSTANCE = Subclass.new.freeze
337
+
338
+ TYPE_PAIRS = {
339
+ class: Subclass,
340
+ instance: INSTANCE
341
+ }.freeze
342
+
343
+ [:with_inference?].each do |predicate|
344
+ TYPE_PAIRS.each_pair do |type, reciever|
345
+ define_method :"test_#{type}_#{predicate}" do
346
+ assert_same false, reciever.public_send(predicate, :no_with)
347
+ assert_same false, reciever.public_send(predicate, :als_no_with)
348
+ assert_same false, reciever.public_send(predicate, 'no_with')
349
+ assert_same false, reciever.public_send(predicate, 'als_no_with')
350
+ assert_same false, reciever.public_send(predicate, 0)
351
+ assert_same false, reciever.public_send(predicate, 0.9)
352
+
353
+ assert_same true, reciever.public_send(predicate, :with)
354
+ assert_same true, reciever.public_send(predicate, :als_with)
355
+ assert_same true, reciever.public_send(predicate, 'with')
356
+ assert_same true, reciever.public_send(predicate, 'als_with')
357
+ assert_same true, reciever.public_send(predicate, 1)
358
+ assert_same true, reciever.public_send(predicate, 1.9)
359
+
360
+ assert_same true, reciever.public_send(predicate, :with_any)
361
+ assert_same true, reciever.public_send(predicate, :als_with_any)
362
+ assert_same true, reciever.public_send(predicate, 'with_any')
363
+ assert_same true, reciever.public_send(predicate, 'als_with_any')
364
+ assert_same true, reciever.public_send(predicate, 2)
365
+ assert_same true, reciever.public_send(predicate, 2.9)
366
+
367
+ assert_same true, reciever.public_send(predicate, :adj_with)
368
+ assert_same true, reciever.public_send(predicate, :als_adj_with)
369
+ assert_same true, reciever.public_send(predicate, 'adj_with')
370
+ assert_same true, reciever.public_send(predicate, 'als_adj_with')
371
+ assert_same true, reciever.public_send(predicate, 3)
372
+ assert_same true, reciever.public_send(predicate, 3.9)
373
+
374
+ assert_same false, reciever.public_send(predicate, :none)
375
+ assert_same false, reciever.public_send(predicate, 'none')
376
+ assert_same false, reciever.public_send(predicate, 4)
377
+ assert_same false, reciever.public_send(predicate, 4.9)
378
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
379
+ end
380
+ end
381
+ end
382
+
383
+ end
384
+
385
+
386
+ class Test_Striuct_Subclass_Predicate_HookTiming_Setter_Enable < Test::Unit::TestCase
387
+
388
+ class Subclass < Striuct
389
+ member :no_with
390
+ alias_member :als_no_with, :no_with
391
+ member :with, nil, setter_validation: true
392
+ alias_member :als_with, :with
393
+ member :with_any, ANYTHING?, writer_validation: true
394
+ alias_member :als_with_any, :with_any
395
+ member :adj_with, nil, writer_validation: true do |_|; end
396
+ alias_member :als_adj_with, :adj_with
397
+
398
+ close_member
399
+ end.freeze
400
+
401
+ INSTANCE = Subclass.new.freeze
402
+
403
+ TYPE_PAIRS = {
404
+ class: Subclass,
405
+ instance: INSTANCE
406
+ }.freeze
407
+
408
+ [:with_safety_setter?, :with_safety_writer?].each do |predicate|
409
+ TYPE_PAIRS.each_pair do |type, reciever|
410
+ define_method :"test_#{type}_#{predicate}" do
411
+ assert_same true, reciever.public_send(predicate, :no_with)
412
+ assert_same true, reciever.public_send(predicate, :als_no_with)
413
+ assert_same true, reciever.public_send(predicate, 'no_with')
414
+ assert_same true, reciever.public_send(predicate, 'als_no_with')
415
+ assert_same true, reciever.public_send(predicate, 0)
416
+ assert_same true, reciever.public_send(predicate, 0.9)
417
+
418
+ assert_same true, reciever.public_send(predicate, :with)
419
+ assert_same true, reciever.public_send(predicate, :als_with)
420
+ assert_same true, reciever.public_send(predicate, 'with')
421
+ assert_same true, reciever.public_send(predicate, 'als_with')
422
+ assert_same true, reciever.public_send(predicate, 1)
423
+ assert_same true, reciever.public_send(predicate, 1.9)
424
+
425
+ assert_same true, reciever.public_send(predicate, :with_any)
426
+ assert_same true, reciever.public_send(predicate, :als_with_any)
427
+ assert_same true, reciever.public_send(predicate, 'with_any')
428
+ assert_same true, reciever.public_send(predicate, 'als_with_any')
429
+ assert_same true, reciever.public_send(predicate, 2)
430
+ assert_same true, reciever.public_send(predicate, 2.9)
431
+
432
+ assert_same true, reciever.public_send(predicate, :adj_with)
433
+ assert_same true, reciever.public_send(predicate, :als_adj_with)
434
+ assert_same true, reciever.public_send(predicate, 'adj_with')
435
+ assert_same true, reciever.public_send(predicate, 'als_adj_with')
436
+ assert_same true, reciever.public_send(predicate, 3)
437
+ assert_same true, reciever.public_send(predicate, 3.9)
438
+
439
+ assert_same false, reciever.public_send(predicate, :none)
440
+ assert_same false, reciever.public_send(predicate, 'none')
441
+ assert_same false, reciever.public_send(predicate, 4)
442
+ assert_same false, reciever.public_send(predicate, 4.9)
443
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
444
+ end
445
+ end
446
+ end
447
+
448
+ end
449
+
450
+ class Test_Striuct_Subclass_Predicate_HookTiming_Setter_Disable < Test::Unit::TestCase
451
+
452
+ class Subclass < Striuct
453
+ member :no_with
454
+ alias_member :als_no_with, :no_with
455
+
456
+ member :with, nil, setter_validation: false
457
+ alias_member :als_with, :with
458
+
459
+ member :with_any, ANYTHING?, writer_validation: false
460
+ alias_member :als_with_any, :with_any
461
+
462
+ member :adj_with, nil, writer_validation: false do |_|; end
463
+ alias_member :als_adj_with, :adj_with
464
+
465
+ close_member
466
+ end.freeze
467
+
468
+ INSTANCE = Subclass.new.freeze
469
+
470
+ TYPE_PAIRS = {
471
+ class: Subclass,
472
+ instance: INSTANCE
473
+ }.freeze
474
+
475
+ [:with_safety_setter?, :with_safety_writer?].each do |predicate|
476
+ TYPE_PAIRS.each_pair do |type, reciever|
477
+ define_method :"test_#{type}_#{predicate}" do
478
+ assert_same true, reciever.public_send(predicate, :no_with)
479
+ assert_same true, reciever.public_send(predicate, :als_no_with)
480
+ assert_same true, reciever.public_send(predicate, 'no_with')
481
+ assert_same true, reciever.public_send(predicate, 'als_no_with')
482
+ assert_same true, reciever.public_send(predicate, 0)
483
+ assert_same true, reciever.public_send(predicate, 0.9)
484
+
485
+ assert_same false, reciever.public_send(predicate, :with)
486
+ assert_same false, reciever.public_send(predicate, :als_with)
487
+ assert_same false, reciever.public_send(predicate, 'with')
488
+ assert_same false, reciever.public_send(predicate, 'als_with')
489
+ assert_same false, reciever.public_send(predicate, 1)
490
+ assert_same false, reciever.public_send(predicate, 1.9)
491
+
492
+ assert_same false, reciever.public_send(predicate, :with_any)
493
+ assert_same false, reciever.public_send(predicate, :als_with_any)
494
+ assert_same false, reciever.public_send(predicate, 'with_any')
495
+ assert_same false, reciever.public_send(predicate, 'als_with_any')
496
+ assert_same false, reciever.public_send(predicate, 2)
497
+ assert_same false, reciever.public_send(predicate, 2.9)
498
+
499
+ assert_same false, reciever.public_send(predicate, :adj_with)
500
+ assert_same false, reciever.public_send(predicate, :als_adj_with)
501
+ assert_same false, reciever.public_send(predicate, 'adj_with')
502
+ assert_same false, reciever.public_send(predicate, 'als_adj_with')
503
+ assert_same false, reciever.public_send(predicate, 3)
504
+ assert_same false, reciever.public_send(predicate, 3.9)
505
+
506
+ assert_same false, reciever.public_send(predicate, :none)
507
+ assert_same false, reciever.public_send(predicate, 'none')
508
+ assert_same false, reciever.public_send(predicate, 4)
509
+ assert_same false, reciever.public_send(predicate, 4.9)
510
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
511
+ end
512
+ end
513
+ end
514
+
515
+ end
516
+
517
+
518
+ class Test_Striuct_Subclass_Predicate_HookTiming_Getter_Enable < Test::Unit::TestCase
519
+
520
+ class Subclass < Striuct
521
+ member :no_with
522
+ alias_member :als_no_with, :no_with
523
+ member :with, nil, getter_validation: true
524
+ alias_member :als_with, :with
525
+ member :with_any, ANYTHING?, reader_validation: true
526
+ alias_member :als_with_any, :with_any
527
+ member :adj_with, nil, reader_validation: true do |_|; end
528
+ alias_member :als_adj_with, :adj_with
529
+
530
+ close_member
531
+ end.freeze
532
+
533
+ INSTANCE = Subclass.new.freeze
534
+
535
+ TYPE_PAIRS = {
536
+ class: Subclass,
537
+ instance: INSTANCE
538
+ }.freeze
539
+
540
+ [:with_safety_getter?, :with_safety_reader?].each do |predicate|
541
+ TYPE_PAIRS.each_pair do |type, reciever|
542
+ define_method :"test_#{type}_#{predicate}" do
543
+ assert_same false, reciever.public_send(predicate, :no_with)
544
+ assert_same false, reciever.public_send(predicate, :als_no_with)
545
+ assert_same false, reciever.public_send(predicate, 'no_with')
546
+ assert_same false, reciever.public_send(predicate, 'als_no_with')
547
+ assert_same false, reciever.public_send(predicate, 0)
548
+ assert_same false, reciever.public_send(predicate, 0.9)
549
+
550
+ assert_same true, reciever.public_send(predicate, :with)
551
+ assert_same true, reciever.public_send(predicate, :als_with)
552
+ assert_same true, reciever.public_send(predicate, 'with')
553
+ assert_same true, reciever.public_send(predicate, 'als_with')
554
+ assert_same true, reciever.public_send(predicate, 1)
555
+ assert_same true, reciever.public_send(predicate, 1.9)
556
+
557
+ assert_same true, reciever.public_send(predicate, :with_any)
558
+ assert_same true, reciever.public_send(predicate, :als_with_any)
559
+ assert_same true, reciever.public_send(predicate, 'with_any')
560
+ assert_same true, reciever.public_send(predicate, 'als_with_any')
561
+ assert_same true, reciever.public_send(predicate, 2)
562
+ assert_same true, reciever.public_send(predicate, 2.9)
563
+
564
+ assert_same true, reciever.public_send(predicate, :adj_with)
565
+ assert_same true, reciever.public_send(predicate, :als_adj_with)
566
+ assert_same true, reciever.public_send(predicate, 'adj_with')
567
+ assert_same true, reciever.public_send(predicate, 'als_adj_with')
568
+ assert_same true, reciever.public_send(predicate, 3)
569
+ assert_same true, reciever.public_send(predicate, 3.9)
570
+
571
+ assert_same false, reciever.public_send(predicate, :none)
572
+ assert_same false, reciever.public_send(predicate, 'none')
573
+ assert_same false, reciever.public_send(predicate, 4)
574
+ assert_same false, reciever.public_send(predicate, 4.9)
575
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
576
+ end
577
+ end
578
+ end
579
+
580
+ end
581
+
582
+ class Test_Striuct_Subclass_Predicate_HookTiming_Getter_Disable < Test::Unit::TestCase
583
+
584
+ class Subclass < Striuct
585
+ member :no_with
586
+ alias_member :als_no_with, :no_with
587
+
588
+ member :with, nil, getter_validation: false
589
+ alias_member :als_with, :with
590
+
591
+ member :with_any, ANYTHING?, reader_validation: false
592
+ alias_member :als_with_any, :with_any
593
+
594
+ member :adj_with, nil, reader_validation: false do |_|; end
595
+ alias_member :als_adj_with, :adj_with
596
+
597
+ close_member
598
+ end.freeze
599
+
600
+ INSTANCE = Subclass.new.freeze
601
+
602
+ TYPE_PAIRS = {
603
+ class: Subclass,
604
+ instance: INSTANCE
605
+ }.freeze
606
+
607
+ [:with_safety_getter?, :with_safety_reader?].each do |predicate|
608
+ TYPE_PAIRS.each_pair do |type, reciever|
609
+ define_method :"test_#{type}_#{predicate}" do
610
+ assert_same false, reciever.public_send(predicate, :no_with)
611
+ assert_same false, reciever.public_send(predicate, :als_no_with)
612
+ assert_same false, reciever.public_send(predicate, 'no_with')
613
+ assert_same false, reciever.public_send(predicate, 'als_no_with')
614
+ assert_same false, reciever.public_send(predicate, 0)
615
+ assert_same false, reciever.public_send(predicate, 0.9)
616
+
617
+ assert_same false, reciever.public_send(predicate, :with)
618
+ assert_same false, reciever.public_send(predicate, :als_with)
619
+ assert_same false, reciever.public_send(predicate, 'with')
620
+ assert_same false, reciever.public_send(predicate, 'als_with')
621
+ assert_same false, reciever.public_send(predicate, 1)
622
+ assert_same false, reciever.public_send(predicate, 1.9)
623
+
624
+ assert_same false, reciever.public_send(predicate, :with_any)
625
+ assert_same false, reciever.public_send(predicate, :als_with_any)
626
+ assert_same false, reciever.public_send(predicate, 'with_any')
627
+ assert_same false, reciever.public_send(predicate, 'als_with_any')
628
+ assert_same false, reciever.public_send(predicate, 2)
629
+ assert_same false, reciever.public_send(predicate, 2.9)
630
+
631
+ assert_same false, reciever.public_send(predicate, :adj_with)
632
+ assert_same false, reciever.public_send(predicate, :als_adj_with)
633
+ assert_same false, reciever.public_send(predicate, 'adj_with')
634
+ assert_same false, reciever.public_send(predicate, 'als_adj_with')
635
+ assert_same false, reciever.public_send(predicate, 3)
636
+ assert_same false, reciever.public_send(predicate, 3.9)
637
+
638
+ assert_same false, reciever.public_send(predicate, :none)
639
+ assert_same false, reciever.public_send(predicate, 'none')
640
+ assert_same false, reciever.public_send(predicate, 4)
641
+ assert_same false, reciever.public_send(predicate, 4.9)
642
+ assert_same false, reciever.public_send(predicate, BasicObject.new)
643
+ end
644
+ end
645
+ end
646
+
647
+ end
@@ -24,13 +24,13 @@ class Test_Striuct_Subclass_Validation_Util < Test::Unit::TestCase
24
24
  assert_same false, Foo.new.restrict?(:hoge)
25
25
  end
26
26
 
27
- def test_predicate_has_condition?
28
- assert_same true, Foo.has_condition?(:foo)
29
- assert_same true, Foo.has_condition?(:bar)
30
- assert_same false, Foo.has_condition?(:hoge)
31
- assert_same true, Foo.new.has_condition?(:foo)
32
- assert_same true, Foo.new.has_condition?(:bar)
33
- assert_same false, Foo.new.has_condition?(:hoge)
27
+ def test_predicate_with_condition?
28
+ assert_same true, Foo.with_condition?(:foo)
29
+ assert_same true, Foo.with_condition?(:bar)
30
+ assert_same false, Foo.with_condition?(:hoge)
31
+ assert_same true, Foo.new.with_condition?(:foo)
32
+ assert_same true, Foo.new.with_condition?(:bar)
33
+ assert_same false, Foo.new.with_condition?(:hoge)
34
34
  end
35
35
 
36
36
  def test_predicate_instance_sufficient?
@@ -49,7 +49,9 @@ class Test_Striuct_Subclass_Validation_Util < Test::Unit::TestCase
49
49
  foo = Foo.new
50
50
  assert_same nil, foo.condition_for(:foo)
51
51
  assert_same ALWAYS_OCCUR_ERROR, foo.condition_for(:bar)
52
- assert_same nil, foo.condition_for(:hoge)
52
+ assert_raises KeyError do
53
+ foo.condition_for(:hoge)
54
+ end
53
55
  assert_same SOME_STR, foo.condition_for(:some_str)
54
56
  end
55
57