iiif_manifest 1.0.1 → 1.1.0

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