Skip to content

Commit

Permalink
WIP Tests running
Browse files Browse the repository at this point in the history
  • Loading branch information
cjcolvar committed Mar 23, 2018
1 parent 2aaaade commit b43a8db
Show file tree
Hide file tree
Showing 10 changed files with 703 additions and 4 deletions.
1 change: 1 addition & 0 deletions lib/iiif_manifest.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ module IIIFManifest
autoload :DisplayImage
autoload :IIIFCollection
autoload :IIIFEndpoint
autoload :V3
end
10 changes: 6 additions & 4 deletions lib/iiif_manifest/iiif_collection.rb
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
10 changes: 10 additions & 0 deletions lib/iiif_manifest/v3.rb
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
32 changes: 32 additions & 0 deletions lib/iiif_manifest/v3/manifest_builder.rb
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
17 changes: 17 additions & 0 deletions lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb
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
168 changes: 168 additions & 0 deletions lib/iiif_manifest/v3/manifest_builder/iiif_service.rb
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 lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb
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
36 changes: 36 additions & 0 deletions lib/iiif_manifest/v3/manifest_factory.rb
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
82 changes: 82 additions & 0 deletions lib/iiif_manifest/v3/manifest_service_locator.rb
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
Loading

0 comments on commit b43a8db

Please sign in to comment.