Skip to content

Commit 156747e

Browse files
authored
Merge pull request #85 from iiif-prezi/development2
Add v3 models
2 parents 9c64a8b + 0548b16 commit 156747e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+4849
-105
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
coverage/
22
pkg/
33
Gemfile.lock
4+
.pry_history
45

lib/iiif/presentation/canvas.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ def int_only_keys
2525
super + %w{ width height }
2626
end
2727

28+
def numeric_only_keys
29+
super + %w{ duration }
30+
end
31+
2832
def legal_viewing_hint_values
2933
super + %w{ non-paged }
3034
end

lib/iiif/service.rb

Lines changed: 36 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ def array_only_keys; %w{ }; end
1717
def abstract_resource_only_keys; %w{ }; end
1818
def hash_only_keys; %w{ }; end
1919
def int_only_keys; %w{ }; end
20+
def numeric_only_keys; %w{ }; end
2021

2122
def initialize(hsh={})
2223
@data = IIIF::OrderedHash[hsh]
2324
self.define_methods_for_any_type_keys
2425
self.define_methods_for_array_only_keys
2526
self.define_methods_for_string_only_keys
2627
self.define_methods_for_int_only_keys
28+
self.define_methods_for_numeric_only_keys
2729
self.define_methods_for_abstract_resource_only_keys
2830
self.snakeize_keys
2931
end
@@ -255,56 +257,22 @@ def data
255257
end
256258

257259
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.
258264
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
269265
define_singleton_method(key) do
270266
self.send('[]', key)
271267
end
272-
if key.camelize(:lower) != key
273-
define_singleton_method(key.camelize(:lower)) do
274-
self.send('[]', key)
275-
end
276-
end
277268
end
278269
end
279270

280271
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
308276
end
309277
end
310278
end
@@ -314,85 +282,53 @@ def define_methods_for_abstract_resource_only_keys
314282
abstract_resource_only_keys.each do |hsh|
315283
key = hsh[:key]
316284
type = hsh[:type]
317-
# Setters
318-
define_singleton_method("#{key}=") do |arg|
285+
286+
define_accessor_methods(key) do |key, arg|
319287
unless arg.kind_of?(type)
320288
m = "#{key} must be an #{type}."
321289
raise IIIF::Presentation::IllegalValueError, m
322290
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
343291
end
344292
end
345293
end
346294

347-
348295
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
366300
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
371309
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
376318
end
377319
end
378320
end
379321

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|
382324
# Setter
383325
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?
388327
self.send('[]=', key, arg)
389328
end
390329
if key.camelize(:lower) != key
391330
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?
396332
self.send('[]=', key, arg)
397333
end
398334
end
@@ -408,6 +344,5 @@ def define_methods_for_int_only_keys
408344
end
409345
end
410346
end
411-
412347
end
413348
end

0 commit comments

Comments
 (0)