-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
703 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,4 +11,5 @@ module IIIFManifest | |
autoload :DisplayImage | ||
autoload :IIIFCollection | ||
autoload :IIIFEndpoint | ||
autoload :V3 | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,8 @@ | ||
class IIIFCollection < SimpleDelegator | ||
def viewing_hint | ||
return super if __getobj__.respond_to?(:viewing_hint) | ||
'multi-part' | ||
module IIIFManifest | ||
class IIIFCollection < SimpleDelegator | ||
def viewing_hint | ||
return super if __getobj__.respond_to?(:viewing_hint) | ||
'multi-part' | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
require 'active_support' | ||
require 'active_support/core_ext/module' | ||
require 'active_support/core_ext/object' | ||
|
||
module IIIFManifest::V3 | ||
extend ActiveSupport::Autoload | ||
autoload :ManifestBuilder | ||
autoload :ManifestFactory | ||
autoload :ManifestServiceLocator | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
require_relative 'manifest_builder/iiif_service' | ||
require_relative 'manifest_builder/canvas_builder' | ||
require_relative 'manifest_builder/record_property_builder' | ||
|
||
module IIIFManifest::V3 | ||
class ManifestBuilder | ||
attr_reader :work, | ||
:builders, | ||
:top_record_factory | ||
def initialize(work, builders:, top_record_factory:) | ||
@work = work | ||
@builders = builders | ||
@top_record_factory = top_record_factory | ||
end | ||
|
||
def apply(collection) | ||
collection['manifests'] ||= [] | ||
collection['manifests'] << to_h | ||
collection | ||
end | ||
|
||
def to_h | ||
@to_h ||= builders.new(work).apply(top_record) | ||
end | ||
|
||
private | ||
|
||
def top_record | ||
top_record_factory.new | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
module IIIFManifest::V3 | ||
class ManifestBuilder | ||
class CanvasBuilder < ::IIIFManifest::ManifestBuilder::CanvasBuilder | ||
def apply(items) | ||
return items if canvas.images.blank? | ||
items += [canvas] | ||
end | ||
|
||
private | ||
|
||
def apply_record_properties | ||
canvas['id'] = path | ||
canvas.label = record.to_s | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
module IIIFManifest::V3 | ||
class ManifestBuilder | ||
class IIIFService < IIIFManifest::ManifestBuilder::IIIFService | ||
end | ||
|
||
class IIIFManifest < IIIFService | ||
def label | ||
inner_hash['label'] | ||
end | ||
|
||
def label=(label) | ||
inner_hash['label'] = label | ||
end | ||
|
||
def summary=(summary) | ||
return unless summary.present? | ||
inner_hash['summary'] = summary | ||
end | ||
|
||
def viewing_direction=(viewing_direction) | ||
return unless viewing_direction.present? | ||
inner_hash['viewingDirection'] = viewing_direction | ||
end | ||
|
||
def viewingDirection | ||
inner_hash['viewingDirection'] | ||
end | ||
|
||
def items | ||
inner_hash['items'] || [] | ||
end | ||
|
||
def items=(items) | ||
inner_hash['items'] = items | ||
end | ||
|
||
def metadata=(metadata) | ||
inner_hash['metadata'] = metadata | ||
end | ||
|
||
def service | ||
inner_hash['service'] || [] | ||
end | ||
|
||
def service=(service) | ||
inner_hash['service'] = service | ||
end | ||
|
||
def see_also=(see_also) | ||
inner_hash['seeAlso'] = see_also | ||
end | ||
|
||
def rights=(rights) | ||
inner_hash['rights'] = rights | ||
end | ||
|
||
def initial_attributes | ||
{ | ||
'@context' => [ | ||
"http://www.w3.org/ns/anno.jsonld", | ||
"http://iiif.io/api/presentation/3/context.json" | ||
], | ||
'type' => 'Manifest' | ||
} | ||
end | ||
|
||
class Collection < IIIFManifest | ||
def initial_attributes | ||
{ | ||
'@context' => [ | ||
"http://www.w3.org/ns/anno.jsonld", | ||
"http://iiif.io/api/presentation/3/context.json" | ||
], | ||
'type' => 'Collection' | ||
} | ||
end | ||
|
||
def viewing_direction=(viewing_direction) | ||
raise NotImplementedError | ||
end | ||
|
||
def viewingDirection | ||
raise NotImplementedError | ||
end | ||
end | ||
|
||
class Canvas < IIIFService | ||
def label=(label) | ||
inner_hash['label'] = label | ||
end | ||
|
||
def items | ||
inner_hash['items'] || [] | ||
end | ||
|
||
def items=(items) | ||
inner_hash['items'] = items | ||
end | ||
|
||
def initial_attributes | ||
{ | ||
'type' => 'Canvas' | ||
} | ||
end | ||
end | ||
|
||
class Range < IIIFService | ||
def initial_attributes | ||
{ | ||
'type' => 'Range' | ||
} | ||
end | ||
end | ||
|
||
class Annotation < IIIFService | ||
def body=(body) | ||
inner_hash['body'] = body | ||
end | ||
|
||
def body | ||
inner_hash['body'] | ||
end | ||
|
||
def initial_attributes | ||
{ | ||
'type' => 'Annotation', | ||
'motivation' => 'painting' | ||
} | ||
end | ||
end | ||
|
||
class SearchService < IIIFService | ||
def service=(service) | ||
inner_hash['service'] = service | ||
end | ||
|
||
def search_service=(search_service) | ||
inner_hash['id'] = search_service | ||
end | ||
|
||
def initial_attributes | ||
{ | ||
'@context' => 'http://iiif.io/api/search/1/context.json', | ||
'profile' => 'http://iiif.io/api/search/1/search', | ||
'label' => 'Search within this manifest' | ||
} | ||
end | ||
end | ||
|
||
class AutocompleteService < IIIFService | ||
def autocomplete_service | ||
inner_hash['id'] | ||
end | ||
|
||
def autocomplete_service=(autocomplete_service) | ||
inner_hash['id'] = autocomplete_service | ||
end | ||
|
||
def initial_attributes | ||
{ | ||
'profile' => 'http://iiif.io/api/search/1/autocomplete', | ||
'label' => 'Get suggested words in this manifest' | ||
} | ||
end | ||
end | ||
end | ||
end | ||
end |
18 changes: 18 additions & 0 deletions
18
lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
module IIIFManifest::V3 | ||
class ManifestBuilder | ||
class RecordPropertyBuilder < ::IIIFManifest::ManifestBuilder::RecordPropertyBuilder | ||
# rubocop:disable Metrics/AbcSize | ||
def apply(manifest) | ||
manifest['id'] = record.manifest_url.to_s | ||
manifest.label = record.to_s | ||
manifest.summary = record.description | ||
manifest.viewing_hint = viewing_hint if viewing_hint.present? | ||
manifest.viewing_direction = viewing_direction if viewing_direction.present? | ||
manifest.metadata = record.manifest_metadata if valid_metadata? | ||
manifest.service = services if search_service.present? | ||
manifest | ||
end | ||
# rubocop:enable Metrics/AbcSize | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
module IIIFManifest::V3 | ||
class ManifestFactory | ||
class << self | ||
def new(work, manifest_service_locator: ManifestServiceLocator) | ||
super(manifest_service_locator).new(work) | ||
end | ||
end | ||
|
||
delegate :collection_manifest_builder, :manifest_builder, :sammelband_manifest_builder, | ||
to: :manifest_service_locator | ||
attr_reader :manifest_service_locator | ||
|
||
def initialize(manifest_service_locator) | ||
@manifest_service_locator = manifest_service_locator | ||
end | ||
|
||
def new(work) | ||
if !work.work_presenters.empty? | ||
if sammelband?(work) || !work.file_set_presenters.empty? | ||
sammelband_manifest_builder.new(work) | ||
elsif work.file_set_presenters.empty? | ||
work = IIIFManifest::IIIFCollection.new(work) | ||
collection_manifest_builder.new(work) | ||
end | ||
else | ||
manifest_builder.new(work) | ||
end | ||
end | ||
|
||
private | ||
|
||
def sammelband?(work) | ||
work.respond_to?(:sammelband?) && work.sammelband? | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
module IIIFManifest::V3 | ||
class ManifestServiceLocator < IIIFManifest::ManifestServiceLocator | ||
class << self | ||
# Builders which receive a work as an argument to .new and return objects | ||
# that respond to #apply. | ||
def manifest_builders | ||
composite_builder_factory.new( | ||
record_property_builder, | ||
structure_builder, | ||
composite_builder: composite_builder | ||
) | ||
end | ||
|
||
def sammelband_manifest_builders | ||
composite_builder_factory.new( | ||
record_property_builder, | ||
composite_builder: composite_builder | ||
) | ||
end | ||
|
||
def collection_manifest_builders | ||
composite_builder_factory.new( | ||
record_property_builder, | ||
child_manifest_builder_factory, | ||
composite_builder: composite_builder | ||
) | ||
end | ||
|
||
def iiif_collection_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Collection | ||
end | ||
|
||
def record_property_builder | ||
IIIFManifest::ManifestServiceLocator::InjectedFactory.new( | ||
ManifestBuilder::RecordPropertyBuilder, | ||
iiif_search_service_factory: iiif_search_service_factory, | ||
iiif_autocomplete_service_factory: iiif_autocomplete_service_factory | ||
) | ||
end | ||
|
||
def sequence_builder | ||
raise NotImplementedError | ||
end | ||
|
||
def sammelband_sequence_builder | ||
raise NotImplementedError | ||
end | ||
|
||
def sequence_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Sequence | ||
end | ||
|
||
def iiif_service_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFService | ||
end | ||
|
||
def iiif_annotation_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Annotation | ||
end | ||
|
||
def iiif_manifest_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest | ||
end | ||
|
||
def iiif_canvas_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Canvas | ||
end | ||
|
||
def iiif_range_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Range | ||
end | ||
|
||
def iiif_search_service_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::SearchService | ||
end | ||
|
||
def iiif_autocomplete_service_factory | ||
IIIFManifest::V3::ManifestBuilder::IIIFManifest::AutocompleteService | ||
end | ||
end | ||
end | ||
end |
Oops, something went wrong.