iiif_manifest 1.0.1 → 1.1.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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +10 -22
  3. data/.github_changelog_generator +2 -0
  4. data/.rubocop.yml +14 -7
  5. data/.rubocop_todo.yml +38 -83
  6. data/CHANGELOG.md +118 -0
  7. data/README.md +40 -29
  8. data/iiif_manifest.gemspec +2 -4
  9. data/lib/iiif_manifest/manifest_builder.rb +6 -6
  10. data/lib/iiif_manifest/manifest_builder/canvas_builder.rb +12 -12
  11. data/lib/iiif_manifest/manifest_builder/canvas_builder_factory.rb +3 -3
  12. data/lib/iiif_manifest/manifest_builder/deep_canvas_builder_factory.rb +9 -9
  13. data/lib/iiif_manifest/manifest_builder/image_builder.rb +9 -9
  14. data/lib/iiif_manifest/manifest_builder/image_service_builder.rb +3 -3
  15. data/lib/iiif_manifest/manifest_builder/record_property_builder.rb +35 -35
  16. data/lib/iiif_manifest/manifest_builder/resource_builder.rb +9 -9
  17. data/lib/iiif_manifest/manifest_builder/sequence_builder.rb +19 -19
  18. data/lib/iiif_manifest/manifest_factory.rb +3 -3
  19. data/lib/iiif_manifest/manifest_service_locator.rb +2 -2
  20. data/lib/iiif_manifest/v3/manifest_builder.rb +7 -7
  21. data/lib/iiif_manifest/v3/manifest_builder/body_builder.rb +37 -37
  22. data/lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb +24 -24
  23. data/lib/iiif_manifest/v3/manifest_builder/choice_builder.rb +14 -14
  24. data/lib/iiif_manifest/v3/manifest_builder/content_builder.rb +9 -9
  25. data/lib/iiif_manifest/v3/manifest_builder/image_service_builder.rb +10 -10
  26. data/lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb +40 -40
  27. data/lib/iiif_manifest/v3/manifest_factory.rb +3 -3
  28. data/lib/iiif_manifest/version.rb +1 -1
  29. metadata +14 -40
@@ -19,12 +19,10 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency 'activesupport', '>= 4'
21
21
 
22
- spec.add_development_dependency 'bixby', '~> 1.0'
22
+ spec.add_development_dependency 'bixby', '~> 3.0'
23
23
  spec.add_development_dependency 'coveralls'
24
24
  spec.add_development_dependency 'pry-byebug'
25
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rake', '>= 12.3.3'
26
26
  spec.add_development_dependency 'rspec', '~> 3.0'
27
27
  spec.add_development_dependency 'rspec_junit_formatter'
28
- spec.add_development_dependency 'rubocop'
29
- spec.add_development_dependency 'rubocop-rspec'
30
28
  end
@@ -35,12 +35,12 @@ module IIIFManifest
35
35
 
36
36
  private
37
37
 
38
- def manifest
39
- @manifest ||= manifest_builder_class
40
- end
38
+ def manifest
39
+ @manifest ||= manifest_builder_class
40
+ end
41
41
 
42
- def top_record
43
- top_record_factory.new
44
- end
42
+ def top_record
43
+ top_record_factory.new
44
+ end
45
45
  end
46
46
  end
@@ -28,18 +28,18 @@ module IIIFManifest
28
28
 
29
29
  private
30
30
 
31
- def display_image
32
- record.display_image if record.respond_to?(:display_image)
33
- end
34
-
35
- def apply_record_properties
36
- canvas['@id'] = path
37
- canvas.label = record.to_s
38
- end
39
-
40
- def attach_image
41
- image_builder.new(display_image).apply(canvas)
42
- end
31
+ def display_image
32
+ record.display_image if record.respond_to?(:display_image)
33
+ end
34
+
35
+ def apply_record_properties
36
+ canvas['@id'] = path
37
+ canvas.label = record.to_s
38
+ end
39
+
40
+ def attach_image
41
+ image_builder.new(display_image).apply(canvas)
42
+ end
43
43
  end
44
44
  end
45
45
  end
@@ -17,9 +17,9 @@ module IIIFManifest
17
17
 
18
18
  private
19
19
 
20
- def file_set_presenters(work)
21
- work.file_set_presenters
22
- end
20
+ def file_set_presenters(work)
21
+ work.file_set_presenters
22
+ end
23
23
  end
24
24
  end
25
25
  end
@@ -3,9 +3,9 @@ module IIIFManifest
3
3
  class DeepCanvasBuilderFactory < CanvasBuilderFactory
4
4
  private
5
5
 
6
- def file_set_presenters(work)
7
- DeepFileSetEnumerator.new(work).to_a
8
- end
6
+ def file_set_presenters(work)
7
+ DeepFileSetEnumerator.new(work).to_a
8
+ end
9
9
  end
10
10
 
11
11
  class DeepFileSetEnumerator
@@ -26,13 +26,13 @@ module IIIFManifest
26
26
 
27
27
  private
28
28
 
29
- def file_set_presenters
30
- work.try(:file_set_presenters) || []
31
- end
29
+ def file_set_presenters
30
+ work.try(:file_set_presenters) || []
31
+ end
32
32
 
33
- def work_presenters
34
- work.try(:work_presenters) || []
35
- end
33
+ def work_presenters
34
+ work.try(:work_presenters) || []
35
+ end
36
36
  end
37
37
  end
38
38
  end
@@ -18,17 +18,17 @@ module IIIFManifest
18
18
 
19
19
  private
20
20
 
21
- def build_resource
22
- resource_builder.apply(annotation)
23
- end
21
+ def build_resource
22
+ resource_builder.apply(annotation)
23
+ end
24
24
 
25
- def resource_builder
26
- resource_builder_factory.new(display_image)
27
- end
25
+ def resource_builder
26
+ resource_builder_factory.new(display_image)
27
+ end
28
28
 
29
- def annotation
30
- @annotation ||= iiif_annotation_factory.new
31
- end
29
+ def annotation
30
+ @annotation ||= iiif_annotation_factory.new
31
+ end
32
32
  end
33
33
  end
34
34
  end
@@ -16,9 +16,9 @@ module IIIFManifest
16
16
 
17
17
  private
18
18
 
19
- def service
20
- @service ||= iiif_service_factory.new
21
- end
19
+ def service
20
+ @service ||= iiif_service_factory.new
21
+ end
22
22
  end
23
23
  end
24
24
  end
@@ -22,65 +22,65 @@ module IIIFManifest
22
22
 
23
23
  private
24
24
 
25
- def viewing_hint
26
- (record.respond_to?(:viewing_hint) && record.send(:viewing_hint))
27
- end
25
+ def viewing_hint
26
+ (record.respond_to?(:viewing_hint) && record.send(:viewing_hint))
27
+ end
28
28
 
29
- def viewing_direction
30
- (record.respond_to?(:viewing_direction) && record.send(:viewing_direction))
31
- end
29
+ def viewing_direction
30
+ (record.respond_to?(:viewing_direction) && record.send(:viewing_direction))
31
+ end
32
32
 
33
- def autocomplete_service
34
- (record.respond_to?(:autocomplete_service) && record.send(:autocomplete_service))
35
- end
33
+ def autocomplete_service
34
+ (record.respond_to?(:autocomplete_service) && record.send(:autocomplete_service))
35
+ end
36
36
 
37
- def search_service
38
- (record.respond_to?(:search_service) && record.send(:search_service))
39
- end
37
+ def search_service
38
+ (record.respond_to?(:search_service) && record.send(:search_service))
39
+ end
40
40
 
41
- def iiif_search_service
42
- @iiif_search_service ||= iiif_search_service_factory.new
43
- end
41
+ def iiif_search_service
42
+ @iiif_search_service ||= iiif_search_service_factory.new
43
+ end
44
44
 
45
- def iiif_autocomplete_service
46
- @iiif_autocomplete_service ||= iiif_autocomplete_service_factory.new
47
- end
45
+ def iiif_autocomplete_service
46
+ @iiif_autocomplete_service ||= iiif_autocomplete_service_factory.new
47
+ end
48
48
 
49
49
  # Build services. Currently supported:
50
50
  # search_service, with (optional) embedded autocomplete service
51
51
  #
52
52
  # @return [Array] array of services
53
- def services
54
- iiif_search_service.search_service = search_service
55
- iiif_autocomplete_service.autocomplete_service = autocomplete_service
56
- iiif_search_service.service = iiif_autocomplete_service if autocomplete_service.present?
57
- [iiif_search_service]
58
- end
53
+ def services
54
+ iiif_search_service.search_service = search_service
55
+ iiif_autocomplete_service.autocomplete_service = autocomplete_service
56
+ iiif_search_service.service = iiif_autocomplete_service if autocomplete_service.present?
57
+ [iiif_search_service]
58
+ end
59
59
 
60
60
  # Validate manifest_metadata against the IIIF spec format for metadata
61
61
  #
62
62
  # @return [Boolean]
63
- def valid_metadata?
64
- return false unless record.respond_to?(:manifest_metadata)
65
- metadata = record.manifest_metadata
66
- valid_metadata_structure?(metadata) && valid_metadata_content?(metadata)
67
- end
63
+ def valid_metadata?
64
+ return false unless record.respond_to?(:manifest_metadata)
65
+ metadata = record.manifest_metadata
66
+ valid_metadata_structure?(metadata) && valid_metadata_content?(metadata)
67
+ end
68
68
 
69
69
  # Manifest metadata must be an array containing hashes
70
70
  #
71
71
  # @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
72
72
  # @return [Boolean]
73
- def valid_metadata_structure?(metadata)
74
- metadata.is_a?(Array) && metadata.all? { |v| v.is_a?(Hash) }
75
- end
73
+ def valid_metadata_structure?(metadata)
74
+ metadata.is_a?(Array) && metadata.all? { |v| v.is_a?(Hash) }
75
+ end
76
76
 
77
77
  # Manifest Metadata Hashes must contain 'label' and 'value' keys
78
78
  #
79
79
  # @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
80
80
  # @return [Boolean]
81
- def valid_metadata_content?(metadata)
82
- metadata.all? { |v| v['label'].present? && v['value'].present? }
83
- end
81
+ def valid_metadata_content?(metadata)
82
+ metadata.all? { |v| v['label'].present? && v['value'].present? }
83
+ end
84
84
  end
85
85
  end
86
86
  end
@@ -20,17 +20,17 @@ module IIIFManifest
20
20
 
21
21
  private
22
22
 
23
- def resource
24
- @resource ||= iiif_resource_factory.new
25
- end
23
+ def resource
24
+ @resource ||= iiif_resource_factory.new
25
+ end
26
26
 
27
- def iiif_endpoint
28
- display_image.try(:iiif_endpoint)
29
- end
27
+ def iiif_endpoint
28
+ display_image.try(:iiif_endpoint)
29
+ end
30
30
 
31
- def image_service_builder
32
- image_service_builder_factory.new(iiif_endpoint)
33
- end
31
+ def image_service_builder
32
+ image_service_builder_factory.new(iiif_endpoint)
33
+ end
34
34
  end
35
35
  end
36
36
  end
@@ -20,28 +20,28 @@ module IIIFManifest
20
20
 
21
21
  private
22
22
 
23
- def canvas_builder
24
- canvas_builder_factory.from(work)
25
- end
26
-
27
- def sequence
28
- @sequence ||=
29
- begin
30
- sequence = sequence_factory.new
31
- sequence['@id'] ||= work.manifest_url + '/sequence/normal'
32
- sequence['rendering'] ||= populate_sequence_rendering
33
- canvas_builder.apply(sequence)
34
- sequence
35
- end
36
- end
23
+ def canvas_builder
24
+ canvas_builder_factory.from(work)
25
+ end
37
26
 
38
- def populate_sequence_rendering
39
- if work.respond_to?(:sequence_rendering)
40
- work.sequence_rendering.each(&:to_h)
41
- else
42
- []
27
+ def sequence
28
+ @sequence ||=
29
+ begin
30
+ sequence = sequence_factory.new
31
+ sequence['@id'] ||= work.manifest_url + '/sequence/normal'
32
+ sequence['rendering'] ||= populate_sequence_rendering
33
+ canvas_builder.apply(sequence)
34
+ sequence
43
35
  end
36
+ end
37
+
38
+ def populate_sequence_rendering
39
+ if work.respond_to?(:sequence_rendering)
40
+ work.sequence_rendering.each(&:to_h)
41
+ else
42
+ []
44
43
  end
44
+ end
45
45
  end
46
46
  end
47
47
  end
@@ -29,8 +29,8 @@ module IIIFManifest
29
29
 
30
30
  private
31
31
 
32
- def sammelband?(work)
33
- work.respond_to?(:sammelband?) && work.sammelband?
34
- end
32
+ def sammelband?(work)
33
+ work.respond_to?(:sammelband?) && work.sammelband?
34
+ end
35
35
  end
36
36
  end
@@ -195,13 +195,13 @@ module IIIFManifest
195
195
 
196
196
  class InjectedFactory
197
197
  attr_reader :factory, :hash_args
198
- def initialize(factory, hash_args)
198
+ def initialize(factory, **hash_args)
199
199
  @hash_args = hash_args
200
200
  @factory = factory
201
201
  end
202
202
 
203
203
  def new(*args)
204
- factory.new(*args, hash_args)
204
+ factory.new(*args, **hash_args)
205
205
  end
206
206
  end
207
207
  end
@@ -26,10 +26,10 @@ module IIIFManifest
26
26
 
27
27
  private
28
28
 
29
- def obj_to_language_map(obj)
30
- return nil unless obj.is_a?(String) || (obj.is_a?(Array) && obj.all? { |o| o.is_a?(String) })
31
- { '@none' => Array(obj) }
32
- end
29
+ def obj_to_language_map(obj)
30
+ return nil unless obj.is_a?(String) || (obj.is_a?(Array) && obj.all? { |o| o.is_a?(String) })
31
+ { '@none' => Array(obj) }
32
+ end
33
33
  end
34
34
 
35
35
  attr_reader :work,
@@ -53,9 +53,9 @@ module IIIFManifest
53
53
 
54
54
  private
55
55
 
56
- def top_record
57
- top_record_factory.new
58
- end
56
+ def top_record
57
+ top_record_factory.new
58
+ end
59
59
  end
60
60
  end
61
61
  end
@@ -18,43 +18,43 @@ module IIIFManifest
18
18
 
19
19
  private
20
20
 
21
- def build_body
22
- body['id'] = display_content.url
23
- body['type'] = body_type
24
- body['height'] = display_content.height if display_content.try(:height).present?
25
- body['width'] = display_content.width if display_content.try(:width).present?
26
- body['duration'] = display_content.duration if display_content.try(:duration).present?
27
- body['format'] = display_content.format if display_content.try(:format).present?
28
- body['label'] = ManifestBuilder.language_map(display_content.label) if display_content.try(:label).present?
29
- end
30
-
31
- def body
32
- @body ||= iiif_body_factory.new
33
- end
34
-
35
- def body_type
36
- display_content.try(:type) || 'Image'
37
- end
38
-
39
- def iiif_endpoint
40
- display_content.try(:iiif_endpoint)
41
- end
42
-
43
- def image_service_builder
44
- image_service_builder_factory.new(iiif_endpoint)
45
- end
46
-
47
- def auth_service
48
- display_content.try(:auth_service)
49
- end
50
-
51
- def apply_auth_service
52
- body.service = if body['service'].blank?
53
- [auth_service]
54
- else
55
- body['service'] + [auth_service]
56
- end
57
- end
21
+ def build_body
22
+ body['id'] = display_content.url
23
+ body['type'] = body_type
24
+ body['height'] = display_content.height if display_content.try(:height).present?
25
+ body['width'] = display_content.width if display_content.try(:width).present?
26
+ body['duration'] = display_content.duration if display_content.try(:duration).present?
27
+ body['format'] = display_content.format if display_content.try(:format).present?
28
+ body['label'] = ManifestBuilder.language_map(display_content.label) if display_content.try(:label).present?
29
+ end
30
+
31
+ def body
32
+ @body ||= iiif_body_factory.new
33
+ end
34
+
35
+ def body_type
36
+ display_content.try(:type) || 'Image'
37
+ end
38
+
39
+ def iiif_endpoint
40
+ display_content.try(:iiif_endpoint)
41
+ end
42
+
43
+ def image_service_builder
44
+ image_service_builder_factory.new(iiif_endpoint)
45
+ end
46
+
47
+ def auth_service
48
+ display_content.try(:auth_service)
49
+ end
50
+
51
+ def apply_auth_service
52
+ body.service = if body['service'].blank?
53
+ [auth_service]
54
+ else
55
+ body['service'] + [auth_service]
56
+ end
57
+ end
58
58
  end
59
59
  end
60
60
  end