@@ -17,13 +17,15 @@ def array_only_keys; %w{ }; end
17
17
def abstract_resource_only_keys ; %w{ } ; end
18
18
def hash_only_keys ; %w{ } ; end
19
19
def int_only_keys ; %w{ } ; end
20
+ def numeric_only_keys ; %w{ } ; end
20
21
21
22
def initialize ( hsh = { } )
22
23
@data = IIIF ::OrderedHash [ hsh ]
23
24
self . define_methods_for_any_type_keys
24
25
self . define_methods_for_array_only_keys
25
26
self . define_methods_for_string_only_keys
26
27
self . define_methods_for_int_only_keys
28
+ self . define_methods_for_numeric_only_keys
27
29
self . define_methods_for_abstract_resource_only_keys
28
30
self . snakeize_keys
29
31
end
@@ -255,56 +257,22 @@ def data
255
257
end
256
258
257
259
def define_methods_for_any_type_keys
260
+ define_accessor_methods ( *any_type_keys )
261
+
262
+ # override the getter defined by define_accessor_methods to avoid returning
263
+ # an array for empty values.
258
264
any_type_keys . each do |key |
259
- # Setters
260
- define_singleton_method ( "#{ key } =" ) do |arg |
261
- self . send ( '[]=' , key , arg )
262
- end
263
- if key . camelize ( :lower ) != key
264
- define_singleton_method ( "#{ key . camelize ( :lower ) } =" ) do |arg |
265
- self . send ( '[]=' , key , arg )
266
- end
267
- end
268
- # Getters
269
265
define_singleton_method ( key ) do
270
266
self . send ( '[]' , key )
271
267
end
272
- if key . camelize ( :lower ) != key
273
- define_singleton_method ( key . camelize ( :lower ) ) do
274
- self . send ( '[]' , key )
275
- end
276
- end
277
268
end
278
269
end
279
270
280
271
def define_methods_for_array_only_keys
281
- array_only_keys . each do |key |
282
- # Setters
283
- define_singleton_method ( "#{ key } =" ) do |arg |
284
- unless arg . kind_of? ( Array )
285
- m = "#{ key } must be an Array."
286
- raise IIIF ::Presentation ::IllegalValueError , m
287
- end
288
- self . send ( '[]=' , key , arg )
289
- end
290
- if key . camelize ( :lower ) != key
291
- define_singleton_method ( "#{ key . camelize ( :lower ) } =" ) do |arg |
292
- unless arg . kind_of? ( Array )
293
- m = "#{ key } must be an Array."
294
- raise IIIF ::Presentation ::IllegalValueError , m
295
- end
296
- self . send ( '[]=' , key , arg )
297
- end
298
- end
299
- # Getters
300
- define_singleton_method ( key ) do
301
- self [ key ] ||= [ ]
302
- self [ key ]
303
- end
304
- if key . camelize ( :lower ) != key
305
- define_singleton_method ( key . camelize ( :lower ) ) do
306
- self . send ( '[]' , key )
307
- end
272
+ define_accessor_methods ( *array_only_keys ) do |key , arg |
273
+ unless arg . kind_of? ( Array )
274
+ m = "#{ key } must be an Array."
275
+ raise IIIF ::Presentation ::IllegalValueError , m
308
276
end
309
277
end
310
278
end
@@ -314,85 +282,53 @@ def define_methods_for_abstract_resource_only_keys
314
282
abstract_resource_only_keys . each do |hsh |
315
283
key = hsh [ :key ]
316
284
type = hsh [ :type ]
317
- # Setters
318
- define_singleton_method ( " #{ key } =" ) do |arg |
285
+
286
+ define_accessor_methods ( key ) do |key , arg |
319
287
unless arg . kind_of? ( type )
320
288
m = "#{ key } must be an #{ type } ."
321
289
raise IIIF ::Presentation ::IllegalValueError , m
322
290
end
323
- self . send ( '[]=' , key , arg )
324
- end
325
- if key . camelize ( :lower ) != key
326
- define_singleton_method ( "#{ key . camelize ( :lower ) } =" ) do |arg |
327
- unless arg . kind_of? ( type )
328
- m = "#{ key } must be an #{ type } ."
329
- raise IIIF ::Presentation ::IllegalValueError , m
330
- end
331
- self . send ( '[]=' , key , arg )
332
- end
333
- end
334
- # Getters
335
- define_singleton_method ( key ) do
336
- self [ key ] ||= [ ]
337
- self [ key ]
338
- end
339
- if key . camelize ( :lower ) != key
340
- define_singleton_method ( key . camelize ( :lower ) ) do
341
- self . send ( '[]' , key )
342
- end
343
291
end
344
292
end
345
293
end
346
294
347
-
348
295
def define_methods_for_string_only_keys
349
- string_only_keys . each do |key |
350
- # Setter
351
- define_singleton_method ( "#{ key } =" ) do |arg |
352
- unless arg . kind_of? ( String )
353
- m = "#{ key } must be an String."
354
- raise IIIF ::Presentation ::IllegalValueError , m
355
- end
356
- self . send ( '[]=' , key , arg )
357
- end
358
- if key . camelize ( :lower ) != key
359
- define_singleton_method ( "#{ key . camelize ( :lower ) } =" ) do |arg |
360
- unless arg . kind_of? ( String )
361
- m = "#{ key } must be an String."
362
- raise IIIF ::Presentation ::IllegalValueError , m
363
- end
364
- self . send ( '[]=' , key , arg )
365
- end
296
+ define_accessor_methods ( *string_only_keys ) do |key , arg |
297
+ unless arg . kind_of? ( String )
298
+ m = "#{ key } must be an String."
299
+ raise IIIF ::Presentation ::IllegalValueError , m
366
300
end
367
- # Getter
368
- define_singleton_method ( key ) do
369
- self [ key ] ||= [ ]
370
- self [ key ]
301
+ end
302
+ end
303
+
304
+ def define_methods_for_int_only_keys
305
+ define_accessor_methods ( *int_only_keys ) do |key , arg |
306
+ unless arg . kind_of? ( Integer ) && arg > 0
307
+ m = "#{ key } must be a positive Integer."
308
+ raise IIIF ::Presentation ::IllegalValueError , m
371
309
end
372
- if key . camelize ( :lower ) != key
373
- define_singleton_method ( key . camelize ( :lower ) ) do
374
- self . send ( '[]' , key )
375
- end
310
+ end
311
+ end
312
+
313
+ def define_methods_for_numeric_only_keys
314
+ define_accessor_methods ( *numeric_only_keys ) do |key , arg |
315
+ unless arg . kind_of? ( Numeric ) && arg > 0
316
+ m = "#{ key } must be a positive Integer or Float."
317
+ raise IIIF ::Presentation ::IllegalValueError , m
376
318
end
377
319
end
378
320
end
379
321
380
- def define_methods_for_int_only_keys
381
- int_only_keys . each do |key |
322
+ def define_accessor_methods ( * keys , & validation )
323
+ keys . each do |key |
382
324
# Setter
383
325
define_singleton_method ( "#{ key } =" ) do |arg |
384
- unless arg . kind_of? ( Integer ) && arg > 0
385
- m = "#{ key } must be a positive Integer."
386
- raise IIIF ::Presentation ::IllegalValueError , m
387
- end
326
+ validation . call ( key , arg ) if block_given?
388
327
self . send ( '[]=' , key , arg )
389
328
end
390
329
if key . camelize ( :lower ) != key
391
330
define_singleton_method ( "#{ key . camelize ( :lower ) } =" ) do |arg |
392
- unless arg . kind_of? ( Integer ) && arg > 0
393
- m = "#{ key } must be a positive Integer."
394
- raise IIIF ::Presentation ::IllegalValueError , m
395
- end
331
+ validation . call ( key , arg ) if block_given?
396
332
self . send ( '[]=' , key , arg )
397
333
end
398
334
end
@@ -408,6 +344,5 @@ def define_methods_for_int_only_keys
408
344
end
409
345
end
410
346
end
411
-
412
347
end
413
348
end
0 commit comments