striuct 0.3.5.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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