iiif_manifest 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -0
  3. data/.rspec +0 -0
  4. data/.rubocop.yml +3 -0
  5. data/.rubocop_todo.yml +36 -0
  6. data/.travis.yml +0 -0
  7. data/CODE_OF_CONDUCT.md +0 -0
  8. data/Gemfile +0 -0
  9. data/LICENSE +0 -0
  10. data/README.md +27 -10
  11. data/Rakefile +0 -0
  12. data/iiif_manifest.gemspec +2 -1
  13. data/lib/iiif_manifest.rb +1 -0
  14. data/lib/iiif_manifest/display_image.rb +0 -0
  15. data/lib/iiif_manifest/iiif_collection.rb +6 -4
  16. data/lib/iiif_manifest/iiif_endpoint.rb +0 -0
  17. data/lib/iiif_manifest/manifest_builder.rb +6 -6
  18. data/lib/iiif_manifest/manifest_builder/canvas_builder.rb +12 -12
  19. data/lib/iiif_manifest/manifest_builder/canvas_builder_factory.rb +3 -3
  20. data/lib/iiif_manifest/manifest_builder/child_manifest_builder_factory.rb +0 -0
  21. data/lib/iiif_manifest/manifest_builder/composite_builder.rb +0 -0
  22. data/lib/iiif_manifest/manifest_builder/composite_builder_factory.rb +0 -0
  23. data/lib/iiif_manifest/manifest_builder/deep_canvas_builder_factory.rb +6 -6
  24. data/lib/iiif_manifest/manifest_builder/iiif_service.rb +0 -0
  25. data/lib/iiif_manifest/manifest_builder/image_builder.rb +9 -9
  26. data/lib/iiif_manifest/manifest_builder/image_service_builder.rb +3 -3
  27. data/lib/iiif_manifest/manifest_builder/record_property_builder.rb +50 -51
  28. data/lib/iiif_manifest/manifest_builder/resource_builder.rb +9 -9
  29. data/lib/iiif_manifest/manifest_builder/sequence_builder.rb +19 -19
  30. data/lib/iiif_manifest/manifest_builder/structure_builder.rb +0 -0
  31. data/lib/iiif_manifest/manifest_factory.rb +3 -3
  32. data/lib/iiif_manifest/manifest_service_locator.rb +0 -0
  33. data/lib/iiif_manifest/v3.rb +13 -0
  34. data/lib/iiif_manifest/v3/display_content.rb +17 -0
  35. data/lib/iiif_manifest/v3/manifest_builder.rb +61 -0
  36. data/lib/iiif_manifest/v3/manifest_builder/body_builder.rb +48 -0
  37. data/lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb +77 -0
  38. data/lib/iiif_manifest/v3/manifest_builder/choice_builder.rb +47 -0
  39. data/lib/iiif_manifest/v3/manifest_builder/content_builder.rb +38 -0
  40. data/lib/iiif_manifest/v3/manifest_builder/iiif_service.rb +235 -0
  41. data/lib/iiif_manifest/v3/manifest_builder/image_service_builder.rb +35 -0
  42. data/lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb +97 -0
  43. data/lib/iiif_manifest/v3/manifest_builder/structure_builder.rb +87 -0
  44. data/lib/iiif_manifest/v3/manifest_factory.rb +38 -0
  45. data/lib/iiif_manifest/v3/manifest_service_locator.rb +148 -0
  46. data/lib/iiif_manifest/version.rb +1 -1
  47. metadata +29 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9bfc627db90ac1d23556a85e962f89447195fb7
4
- data.tar.gz: b59e46225bae67ddfc5e2460b3672d4be113e4b6
3
+ metadata.gz: 3cba606c659d4ff84c0709b6332ba67cdf938015
4
+ data.tar.gz: a140e32c9319b5747210da28634becb8213f35d3
5
5
  SHA512:
6
- metadata.gz: 64f3b567ca52687d5fd6fe889bc085ed8850b69a343220819a5296c5ecce3d7d1a1aa7de386ca5f2ef82a3aedbac0a3b078c19c280c1e22ba7fc42effbf1234c
7
- data.tar.gz: f550acc4ad049b10514d2c68333db4256ee0ac6e79bc4d995a9024681824bda83ac060d7fbbb9697f01e33e5eae5900c0e429212ed178133d0d9fb2f659e35d4
6
+ metadata.gz: 0fbbff5fca777d6e14bda44fe3d46df558234b872a87e62d4136f011c4a1909a4659966dc1ddd6b2e2769de6cdb10898a10c13b832b39efe926c6d4f1ee9739b
7
+ data.tar.gz: 48db3a55ee7899108d8c89a5a126046f0b92bc1b91fa983a3f47e0bd6a0db2dc32af8a56b7b0143c003481b69dcb348aaa336ef63936699fdfd9730a2d594d48
data/.gitignore CHANGED
File without changes
data/.rspec CHANGED
File without changes
@@ -1,5 +1,7 @@
1
1
  require: rubocop-rspec
2
2
  inherit_from: .rubocop_todo.yml
3
+ inherit_gem:
4
+ bixby: bixby_default.yml
3
5
 
4
6
  AllCops:
5
7
  DisplayCopNames: true
@@ -14,6 +16,7 @@ Metrics/BlockLength:
14
16
  Naming/MethodName:
15
17
  Exclude:
16
18
  - 'lib/iiif_manifest/manifest_builder/iiif_service.rb'
19
+ - 'lib/iiif_manifest/v3/manifest_builder/iiif_service.rb'
17
20
 
18
21
  RSpec/MultipleExpectations:
19
22
  Enabled: false
@@ -11,6 +11,10 @@ Metrics/AbcSize:
11
11
  Exclude:
12
12
  - 'lib/iiif_manifest/manifest_builder/resource_builder.rb'
13
13
  - 'lib/iiif_manifest/manifest_factory.rb'
14
+ - 'lib/iiif_manifest/v3/manifest_builder/body_builder.rb'
15
+ - 'lib/iiif_manifest/v3/manifest_factory.rb'
16
+ - 'lib/iiif_manifest/v3/manifest_builder/content_builder.rb'
17
+ - 'lib/iiif_manifest/v3/manifest_builder/choice_builder.rb'
14
18
 
15
19
  # Offense count: 1
16
20
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
@@ -31,16 +35,23 @@ RSpec/NamedSubject:
31
35
  - 'spec/lib/iiif_manifest/display_image_spec.rb'
32
36
  - 'spec/lib/iiif_manifest/iiif_endpoint_spec.rb'
33
37
  - 'spec/lib/iiif_manifest/manifest_builder/resource_builder_spec.rb'
38
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/body_builder_spec.rb'
39
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/structure_builder_spec.rb'
34
40
 
35
41
  # Offense count: 1
36
42
  # Configuration parameters: IgnoreSymbolicNames.
37
43
  RSpec/VerifiedDoubles:
38
44
  Exclude:
39
45
  - 'spec/lib/iiif_manifest/display_image_spec.rb'
46
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/canvas_builder_spec.rb'
47
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/structure_builder_spec.rb'
40
48
 
41
49
  RSpec/ExampleLength:
42
50
  Exclude:
43
51
  - 'spec/lib/iiif_manifest/manifest_factory_spec.rb'
52
+ - 'spec/lib/iiif_manifest/v3/manifest_factory_spec.rb'
53
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/body_builder_spec.rb'
54
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/structure_builder_spec.rb'
44
55
 
45
56
  # Offense count: 20
46
57
  Style/Documentation:
@@ -66,7 +77,21 @@ Style/Documentation:
66
77
  - 'lib/iiif_manifest/manifest_service_locator.rb'
67
78
  - 'lib/iiif_manifest.rb'
68
79
  - 'lib/iiif_manifest/manifest_builder/iiif_service.rb'
80
+ - 'lib/iiif_manifest/v3.rb'
81
+ - 'lib/iiif_manifest/v3/display_content.rb'
82
+ - 'lib/iiif_manifest/v3/manifest_factory.rb'
83
+ - 'lib/iiif_manifest/v3/manifest_builder/structure_builder.rb'
84
+ - 'lib/iiif_manifest/v3/manifest_builder/iiif_service.rb'
85
+ - 'lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb'
86
+ - 'lib/iiif_manifest/v3/manifest_builder/choice_builder.rb'
87
+ - 'lib/iiif_manifest/v3/manifest_builder/content_builder.rb'
88
+ - 'lib/iiif_manifest/v3/manifest_builder/body_builder.rb'
89
+ - 'lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb'
90
+ - 'lib/iiif_manifest/v3/manifest_builder/image_service_builder.rb'
91
+ - 'lib/iiif_manifest/v3/manifest_builder.rb'
92
+ - 'lib/iiif_manifest/v3/manifest_service_locator.rb'
69
93
  - 'spec/lib/iiif_manifest/manifest_factory_spec.rb'
94
+ - 'spec/lib/iiif_manifest/v3/manifest_factory_spec.rb'
70
95
 
71
96
  # Offense count: 1
72
97
  Style/MethodMissing:
@@ -76,6 +101,7 @@ Style/MethodMissing:
76
101
  Metrics/ClassLength:
77
102
  Exclude:
78
103
  - 'lib/iiif_manifest/manifest_service_locator.rb'
104
+ - 'lib/iiif_manifest/v3/manifest_service_locator.rb'
79
105
 
80
106
  # Offense count: 1
81
107
  # Cop supports --auto-correct.
@@ -83,3 +109,13 @@ Metrics/ClassLength:
83
109
  # SupportedStyles: percent, brackets
84
110
  Style/SymbolArray:
85
111
  EnforcedStyle: brackets
112
+
113
+ Metrics/ParameterLists:
114
+ Exclude:
115
+ - 'lib/iiif_manifest/v3/display_content.rb'
116
+ - 'lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb'
117
+
118
+ RSpec/NestedGroups:
119
+ Exclude:
120
+ - 'spec/lib/iiif_manifest/v3/manifest_factory_spec.rb'
121
+ - 'spec/lib/iiif_manifest/v3/manifest_builder/body_builder_spec.rb'
File without changes
File without changes
data/Gemfile CHANGED
File without changes
data/LICENSE CHANGED
File without changes
data/README.md CHANGED
@@ -1,19 +1,19 @@
1
1
  # IIIFManifest
2
- [![Build Status](https://travis-ci.org/projecthydra-labs/iiif_manifest.svg?branch=master)](https://travis-ci.org/projecthydra-labs/iiif_manifest)
2
+ [![Build Status](https://travis-ci.org/samvera-labs/iiif_manifest.svg?branch=master)](https://travis-ci.org/projecthydra-labs/iiif_manifest)
3
3
 
4
4
  IIIF http://iiif.io/ defines an API for presenting related images in a viewer. This transforms Hydra::Works objects into that format usable by players such as http://universalviewer.io/
5
5
 
6
6
  ## Usage
7
7
 
8
- Your application ***must*** have an object that implements `#file_set_presenters` and `#work_presenters`. The former method should return as set of leaf nodes and the later any interstitial nodes. If none are found an empty array should be returned.
8
+ Your application ***must*** have an object that implements `#file_set_presenters` and `#work_presenters`. The former method should return as set of leaf nodes and the later any interstitial nodes. If none are found an empty array should be returned.
9
9
 
10
10
  Additionally, it ***must*** have a `#description` method that returns a string.
11
11
 
12
- Additionally it ***should*** implement `#manifest_url` that shows where the manifest can be found.
12
+ Additionally it ***should*** implement `#manifest_url` that shows where the manifest can be found.
13
13
 
14
- Additionally it ***should*** implement `#manifest_metadata` to provide an array containing hashes of metadata Label/Value pairs.
14
+ Additionally it ***should*** implement `#manifest_metadata` to provide an array containing hashes of metadata Label/Value pairs.
15
15
 
16
- Additionally it ***may*** implement `#search_service` to contain the url for an IIIF search api compliant search endpoint and `#autocomplete_service` to contain the url for an IIIF search api compliant autocomplete endpoint. Please note, the autocomplete service is embedded within the search service description so if an autocomplete_service is supplied without a search_service it will be ignored. The IIIF `profile` added to the service descriptions is version 0 as this is the version supported by the current version of Universal Viewer. Only include a search_service within the manifest if your application has impelmented an IIIF search service at the endpoint specified in the manifest.
16
+ Additionally it ***may*** implement `#search_service` to contain the url for an IIIF search api compliant search endpoint and `#autocomplete_service` to contain the url for an IIIF search api compliant autocomplete endpoint. Please note, the autocomplete service is embedded within the search service description so if an autocomplete_service is supplied without a search_service it will be ignored. The IIIF `profile` added to the service descriptions is version 0 as this is the version supported by the current version of Universal Viewer. Only include a search_service within the manifest if your application has impelmented an IIIF search service at the endpoint specified in the manifest.
17
17
 
18
18
  Additionally it ***may*** implement `#sequence_rendering` to contain an array of hashes for file downloads to be offered at sequences level. Each hash must contain "@id", "format" (mime type) and "label" (eg. `{ "@id" => "download url", "format" => "application/pdf", "label" => "user friendly label" }`).
19
19
 
@@ -45,18 +45,18 @@ For example:
45
45
  def description
46
46
  'a brief description'
47
47
  end
48
-
48
+
49
49
  def manifest_metadata
50
50
  [
51
51
  { "label" => "Title", "value" => "Title of the Item" },
52
52
  { "label" => "Creator", "value" => "Morrissey, Stephen Patrick" }
53
53
  ]
54
54
  end
55
-
55
+
56
56
  def search_service
57
57
  "http://test.host/books/#{@id}/search"
58
58
  end
59
-
59
+
60
60
  def autocomplete_service
61
61
  "http://test.host/books/#{@id}/autocomplete"
62
62
  end
@@ -127,6 +127,24 @@ Then you can produce the manifest on the book object like this:
127
127
  IIIFManifest::ManifestFactory.new(book).to_h.to_json
128
128
  ```
129
129
 
130
+ ## Presentation 3.0 (Alpha)
131
+
132
+ Provisional support for the [3.0 alpha version of the IIIF presentation api spec](https://iiif.io/api/presentation/3.0/) has been added with a focus on audiovisual content. The [change log](https://iiif.io/api/presentation/3.0/change-log/) lists the changes to the specification.
133
+
134
+ The presentation 3.0 support has been contained to the `V3` namespace. Version 2.0 manifests are still be built using `IIIFManifest::ManifestFactory` while version 3.0 manifets can now be built using `IIIFManifest::V3::ManifestFactory`.
135
+
136
+ ```ruby
137
+ book = Book.new('book-77',[Page.new('page-99')])
138
+ IIIFManifest::V3::ManifestFactory.new(book).to_h.to_json
139
+ ```
140
+
141
+ ### Notable changes for Presentation 3.0
142
+ - Presenters must still define `#description` but it is now serialized as `summary`. (https://iiif.io/api/presentation/3.0/change-log/#126-rename-description-to-summary)
143
+ - All textual strings, including metadata labels and values, are now serialized as language maps and may be provided as a hash with language code keys with string values. Values not provided in this format are automatically converted so no change to `#description`, `#manifest_metadata`, range labels, or other fields are required. (https://iiif.io/api/presentation/3.0/change-log/#133-use-language-map-pattern-for-label-value-summary)
144
+ - File set presenters may target a fragment of its content by providing `#media_fragment` which will be appended to its `id`.
145
+ - Range objects may now implement `#items` instead of `#ranges` and `#file_set_presenters` to allow for interleaving these objects. `#items` is not required and existing range objects should continue to work.
146
+ - File set presenters may provide `#display_content` which should return an instance of `IIIFManifest::V3::DisplayContent` (or an array of instances in the case of a user `Choice`). `#display_image` is no longer required but will still work if provided.
147
+
130
148
  ## Development
131
149
 
132
150
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -135,5 +153,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
135
153
 
136
154
  ## Contributing
137
155
 
138
- Bug reports and pull requests are welcome on GitHub at https://github.com/projecthydra-labs/iiif_manifest. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
139
-
156
+ Bug reports and pull requests are welcome on GitHub at https://github.com/samvera-labs/iiif_manifest. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
data/Rakefile CHANGED
File without changes
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'iiif_manifest/version'
4
4
 
@@ -19,6 +19,7 @@ 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
23
  spec.add_development_dependency 'bundler', '~> 1.11'
23
24
  spec.add_development_dependency 'pry-byebug'
24
25
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -11,4 +11,5 @@ module IIIFManifest
11
11
  autoload :DisplayImage
12
12
  autoload :IIIFCollection
13
13
  autoload :IIIFEndpoint
14
+ autoload :V3
14
15
  end
File without changes
@@ -1,6 +1,8 @@
1
- class IIIFCollection < SimpleDelegator
2
- def viewing_hint
3
- return super if __getobj__.respond_to?(:viewing_hint)
4
- 'multi-part'
1
+ module IIIFManifest
2
+ class IIIFCollection < SimpleDelegator
3
+ def viewing_hint
4
+ return super if __getobj__.respond_to?(:viewing_hint)
5
+ 'multi-part'
6
+ end
5
7
  end
6
8
  end
File without changes
@@ -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
@@ -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
@@ -8,7 +8,6 @@ module IIIFManifest
8
8
  @iiif_autocomplete_service_factory = iiif_autocomplete_service_factory
9
9
  end
10
10
 
11
- # rubocop:disable Metrics/AbcSize
12
11
  def apply(manifest)
13
12
  manifest['@id'] = record.manifest_url.to_s
14
13
  manifest.label = record.to_s
@@ -23,65 +22,65 @@ module IIIFManifest
23
22
 
24
23
  private
25
24
 
26
- def viewing_hint
27
- (record.respond_to?(:viewing_hint) && record.send(:viewing_hint))
28
- end
25
+ def viewing_hint
26
+ (record.respond_to?(:viewing_hint) && record.send(:viewing_hint))
27
+ end
29
28
 
30
- def viewing_direction
31
- (record.respond_to?(:viewing_direction) && record.send(:viewing_direction))
32
- end
29
+ def viewing_direction
30
+ (record.respond_to?(:viewing_direction) && record.send(:viewing_direction))
31
+ end
33
32
 
34
- def autocomplete_service
35
- (record.respond_to?(:autocomplete_service) && record.send(:autocomplete_service))
36
- end
33
+ def autocomplete_service
34
+ (record.respond_to?(:autocomplete_service) && record.send(:autocomplete_service))
35
+ end
37
36
 
38
- def search_service
39
- (record.respond_to?(:search_service) && record.send(:search_service))
40
- end
37
+ def search_service
38
+ (record.respond_to?(:search_service) && record.send(:search_service))
39
+ end
41
40
 
42
- def iiif_search_service
43
- @iiif_search_service ||= iiif_search_service_factory.new
44
- end
41
+ def iiif_search_service
42
+ @iiif_search_service ||= iiif_search_service_factory.new
43
+ end
45
44
 
46
- def iiif_autocomplete_service
47
- @iiif_autocomplete_service ||= iiif_autocomplete_service_factory.new
48
- end
45
+ def iiif_autocomplete_service
46
+ @iiif_autocomplete_service ||= iiif_autocomplete_service_factory.new
47
+ end
49
48
 
50
- # Build services. Currently supported:
51
- # search_service, with (optional) embedded autocomplete service
52
- #
53
- # @return [Array] array of services
54
- def services
55
- iiif_search_service.search_service = search_service
56
- iiif_autocomplete_service.autocomplete_service = autocomplete_service
57
- iiif_search_service.service = iiif_autocomplete_service if autocomplete_service.present?
58
- [iiif_search_service]
59
- end
49
+ # Build services. Currently supported:
50
+ # search_service, with (optional) embedded autocomplete service
51
+ #
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
60
59
 
61
- # Validate manifest_metadata against the IIIF spec format for metadata
62
- #
63
- # @return [Boolean]
64
- def valid_metadata?
65
- return false unless record.respond_to?(:manifest_metadata)
66
- metadata = record.manifest_metadata
67
- valid_metadata_structure?(metadata) && valid_metadata_content?(metadata)
68
- end
60
+ # Validate manifest_metadata against the IIIF spec format for metadata
61
+ #
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
69
68
 
70
- # Manifest metadata must be an array containing hashes
71
- #
72
- # @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
73
- # @return [Boolean]
74
- def valid_metadata_structure?(metadata)
75
- metadata.is_a?(Array) && metadata.all? { |v| v.is_a?(Hash) }
76
- end
69
+ # Manifest metadata must be an array containing hashes
70
+ #
71
+ # @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
72
+ # @return [Boolean]
73
+ def valid_metadata_structure?(metadata)
74
+ metadata.is_a?(Array) && metadata.all? { |v| v.is_a?(Hash) }
75
+ end
77
76
 
78
- # Manifest Metadata Hashes must contain 'label' and 'value' keys
79
- #
80
- # @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
81
- # @return [Boolean]
82
- def valid_metadata_content?(metadata)
83
- metadata.all? { |v| v['label'].present? && v['value'].present? }
84
- end
77
+ # Manifest Metadata Hashes must contain 'label' and 'value' keys
78
+ #
79
+ # @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
80
+ # @return [Boolean]
81
+ def valid_metadata_content?(metadata)
82
+ metadata.all? { |v| v['label'].present? && v['value'].present? }
83
+ end
85
84
  end
86
85
  end
87
86
  end