Skip to content

Commit

Permalink
Update Valkyrie to RC1 (#878)
Browse files Browse the repository at this point in the history
* First Level Migration: Updates library, adds valkyrie-derivatives, utilizes
valkyrie-derivatives
* Fix Bagit Query Service: Implement find_many_by_ids
* Add an automated db migration.
  • Loading branch information
Trey Pendragon authored and escowles committed Mar 9, 2018
1 parent 3155d36 commit 3d1542c
Show file tree
Hide file tree
Showing 49 changed files with 198 additions and 124 deletions.
6 changes: 5 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,24 @@ gem 'bunny'
gem "devise-guests", git: "https://github.com/cbeer/devise-guests.git"
gem "flutie"
gem "honeybadger"
gem 'hydra-access-controls'
gem 'jbuilder'
gem "jquery-rails"
gem 'jquery-ui-rails', '~> 5.0'
gem 'mini_magick'
gem "pg", "~> 0.21"
gem "puma"
gem "rails", "5.1.1"
gem "recipient_interceptor"
gem 'redis-namespace'
gem "ruby_tika_app"
gem "sass-rails", "~> 5.0"
gem "simple_form"
gem "sprockets", ">= 3.0.0"
gem "title"
gem "uglifier"
gem "valkyrie", git: "https://github.com/samvera-labs/valkyrie.git"
gem "valkyrie", '1.0.0.rc1'
gem "valkyrie-derivatives", git: "https://github.com/samvera-labs/valkyrie-derivatives.git"
gem 'webpacker', '3.2.0'

group :development do
Expand Down
45 changes: 25 additions & 20 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -42,27 +42,12 @@ GIT
devise

GIT
remote: https://github.com/samvera-labs/valkyrie.git
revision: b824b3e33bede36e73921c94f9ffdcdf8f6809be
remote: https://github.com/samvera-labs/valkyrie-derivatives.git
revision: fe5fd1a58fff28346754d581fbcbfe7010f33321
specs:
valkyrie (0.1.0)
active-fedora
active-triples
activemodel
activerecord
activesupport
draper
dry-struct
dry-types
hydra-access-controls
valkyrie-derivatives (0.1.0)
hydra-derivatives
json
json-ld
pg (< 1.0)
rdf
reform
reform-rails
ruby_tika_app
valkyrie

PATH
remote: valhalla
Expand Down Expand Up @@ -755,6 +740,22 @@ GEM
unf_ext (0.0.7.4)
unicode-display_width (1.3.0)
uniform_notifier (1.10.0)
valkyrie (1.0.0.rc1)
active-fedora
active-triples
activemodel
activerecord
activesupport
draper
dry-struct
dry-types
json
json-ld
pg (< 1.0)
railties
rdf
reform
reform-rails
warden (1.2.7)
rack (>= 1.0)
web-console (3.5.1)
Expand Down Expand Up @@ -810,6 +811,7 @@ DEPENDENCIES
foreman
formulaic
honeybadger
hydra-access-controls
hydra-head
hydra-role-management
iiif_manifest!
Expand All @@ -821,6 +823,7 @@ DEPENDENCIES
json-schema
leaflet-rails (~> 0.7)
listen
mini_magick
modernizr-rails
normalize-rails
omniauth-cas
Expand All @@ -843,6 +846,7 @@ DEPENDENCIES
riiif
rsolr (>= 1.0)
rspec-rails (~> 3.5)
ruby_tika_app
sass-rails (~> 5.0)
selenium-webdriver
sidekiq
Expand All @@ -857,7 +861,8 @@ DEPENDENCIES
title
uglifier
valhalla!
valkyrie!
valkyrie (= 1.0.0.rc1)
valkyrie-derivatives!
web-console
webmock
webpacker (= 3.2.0)
Expand Down
8 changes: 8 additions & 0 deletions app/adapters/bagit/persister.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def save(resource:)
resource = generate_id(resource) if resource.id.blank?
resource.created_at ||= Time.current
resource.updated_at = Time.current
ensure_multiple_values!(resource)
bag_factory.new(resource: resource).create!
resource.new_record = false
resource
Expand All @@ -36,5 +37,12 @@ def wipe!
def generate_id(resource)
resource.new(id: SecureRandom.uuid)
end

def ensure_multiple_values!(resource)
bad_keys = resource.attributes.except(:internal_resource, :created_at, :updated_at, :new_record, :id).select do |_k, v|
!v.nil? && !v.is_a?(Array)
end
raise ::Valkyrie::Persistence::UnsupportedDatatype, "#{resource}: #{bad_keys.keys} have non-array values, which can not be persisted by Valkyrie. Cast to arrays." unless bad_keys.keys.empty?
end
end
end
15 changes: 13 additions & 2 deletions app/adapters/bagit/query_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,23 @@ def initialize(adapter:)
end

def find_by(id:)
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a?(Valkyrie::ID) || id.is_a?(String)
id = Valkyrie::ID.new(id.to_s)
loader = Bagit::BagLoader.new(adapter: adapter, id: id)
raise Valkyrie::Persistence::ObjectNotFoundError unless loader.exist?
loader.load!
end

def find_many_by_ids(ids:)
ids.map do |id|
begin
find_by(id: id)
rescue ::Valkyrie::Persistence::ObjectNotFoundError
nil
end
end.reject(&:nil?)
end

def find_all
adapter.bag_paths.lazy.map do |bag_path|
find_by(id: Valkyrie::ID.new(Pathname.new(bag_path).basename))
Expand Down Expand Up @@ -44,8 +55,8 @@ def find_all_of_model(model:)
end

def find_inverse_references_by(resource:, property:)
raise ArgumentError, 'resource is not saved' unless resource.persisted?
Valkyrie.logger.warn("Bagit Query Service has been asked to find inverse references. This will require iterating over the metadata of every bag - AVOID.")
return [] unless resource.id.present?
find_all.select do |potential_inverse_reference|
(potential_inverse_reference.try(property) || []).include?(resource.id)
end
Expand Down
2 changes: 1 addition & 1 deletion app/change_sets/ephemera_field_change_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
class EphemeraFieldChangeSet < Valkyrie::ChangeSet
validates :field_name, :member_of_vocabulary_id, presence: true
property :field_name, multiple: false, required: true
property :member_of_vocabulary_id, multiple: false, required: true, type: Valkyrie::Types::ID
property :member_of_vocabulary_id, multiple: false, required: true, type: Valkyrie::Types::ID.optional

def primary_terms
[:field_name, :member_of_vocabulary_id, :append_id]
Expand Down
4 changes: 2 additions & 2 deletions app/change_sets/ephemera_folder_change_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ def self.new(record, *args)
property :rights_statement, multiple: false, required: true, default: "http://rightsstatements.org/vocab/CNE/1.0/", type: ::Types::URI
property :rights_note, multiple: false, required: false
property :thumbnail_id, multiple: false, required: false, type: Valkyrie::Types::ID
property :member_of_collection_ids, multiple: true, required: false, default: [], type: Types::Strict::Array.member(Valkyrie::Types::ID)
property :member_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID)
property :member_of_collection_ids, multiple: true, required: false, default: [], type: Types::Strict::Array.member(Valkyrie::Types::ID.optional)
property :member_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID.optional)
property :read_groups, multiple: true, required: false
property :depositor, multiple: false, require: false
property :files, virtual: true, multiple: true, required: false
Expand Down
2 changes: 1 addition & 1 deletion app/change_sets/ephemera_term_change_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class EphemeraTermChangeSet < Valkyrie::ChangeSet
property :code, multiple: false, required: false
property :tgm_label, multiple: false, required: false
property :lcsh_label, multiple: false, required: false
property :member_of_vocabulary_id, multiple: false, required: true, type: Valkyrie::Types::ID
property :member_of_vocabulary_id, multiple: false, required: true, type: Valkyrie::Types::ID.optional

def primary_terms
[
Expand Down
2 changes: 1 addition & 1 deletion app/change_sets/ephemera_vocabulary_change_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class EphemeraVocabularyChangeSet < Valkyrie::ChangeSet
property :label, multiple: false, required: true
property :uri, multiple: false, required: false, type: ::Types::URI
property :definition, multiple: false, required: false
property :member_of_vocabulary_id, multiple: false, required: false, type: Valkyrie::Types::ID
property :member_of_vocabulary_id, multiple: false, required: false, type: Valkyrie::Types::ID.optional

def primary_terms
[:label, :uri, :definition, :member_of_vocabulary_id]
Expand Down
4 changes: 2 additions & 2 deletions app/change_sets/scanned_resource_change_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class ScannedResourceChangeSet < Valhalla::ChangeSet
property :nav_date, multiple: false, required: false
property :local_identifier, multiple: true, required: false, default: []
property :member_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID)
property :thumbnail_id, multiple: false, required: false, type: Valkyrie::Types::ID
property :start_canvas, multiple: false, type: Valkyrie::Types::ID
property :thumbnail_id, multiple: false, required: false, type: Valkyrie::Types::ID.optional
property :start_canvas, multiple: false, type: Valkyrie::Types::ID.optional
property :member_of_collection_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID)
property :logical_structure, multiple: true, required: false, type: Types::Strict::Array.member(Structure), default: [Structure.new(label: "Logical", nodes: [])]
property :read_groups, multiple: true, required: false
Expand Down
6 changes: 3 additions & 3 deletions app/change_sets/vector_work_change_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ class VectorWorkChangeSet < Valhalla::ChangeSet
property :rights_note, multiple: false, required: false
property :holding_location, multiple: false, required: false, type: ::Types::URI
property :local_identifier, multiple: true, required: false, default: []
property :member_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID)
property :thumbnail_id, multiple: false, required: false, type: Valkyrie::Types::ID
property :member_of_collection_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID)
property :member_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID.optional)
property :thumbnail_id, multiple: false, required: false, type: Valkyrie::Types::ID.optional
property :member_of_collection_ids, multiple: true, required: false, type: Types::Strict::Array.member(Valkyrie::Types::ID.optional)
property :read_groups, multiple: true, required: false
property :file_metadata, multiple: true, required: false, default: []
property :depositor, multiple: false, require: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ def initialize(file_node:, persister:)
# @param save [Boolean] should the persister save the file_node after Characterization
# @return [FileNode]
# @example characterize a file and persist the changes by default
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize
# @example characterize a file and do not persist the changes
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize(save: false)
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize(save: false)
def characterize(save: true)
original_file.mime_type = geo_mime_type
@persister.save(resource: @file_node) if save
Expand Down
4 changes: 2 additions & 2 deletions app/characterization_services/geo_characterization_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ def initialize(file_node:, persister:)
# @param save [Boolean] should the persister save the file_node after Characterization
# @return [FileNode]
# @example characterize a file and persist the changes by default
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize
# @example characterize a file and do not persist the changes
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize(save: false)
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize(save: false)
def characterize(save: true)
TikaFileCharacterizationService.new(file_node: file_node, persister: persister).characterize
external_metadata_service.characterize if external_metadata_service.valid?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ def initialize(file_node:, persister:)
# @param save [Boolean] should the persister save the file_node after Characterization
# @return [FileNode]
# @example characterize a file and persist the changes by default
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize
# @example characterize a file and do not persist the changes
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize(save: false)
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize(save: false)
def characterize(save: true)
@file_characterization_attributes = {
width: image.width.to_s,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ def initialize(file_node:, persister:)
# @param save [Boolean] should the persister save the file_node after Characterization
# @return [FileNode]
# @example characterize a file and persist the changes by default
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize
# @example characterize a file and do not persist the changes
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize(save: false)
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize(save: false)
def characterize(save: true)
ImagemagickCharacterizationService.new(file_node: file_node, persister: persister).characterize
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ def initialize(file_node:, persister:)
# @param save [Boolean] should the persister save the file_node after Characterization
# @return [FileNode]
# @example characterize a file and persist the changes by default
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize
# @example characterize a file and do not persist the changes
# Valkyrie::FileCharacterizationService.for(file_node, persister).characterize(save: false)
# Valkyrie::Derivatives::FileCharacterizationService.for(file_node, persister).characterize(save: false)
def characterize(save: true)
new_file = original_file.new(file_characterization_attributes.to_h)
@file_node.file_metadata = @file_node.file_metadata.select { |x| x.id != new_file.id } + [new_file]
Expand Down
2 changes: 2 additions & 0 deletions app/decorators/ephemera_folder_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ def collection_slugs

def parent
@parent ||= query_service.find_parents(resource: model).to_a.first.try(:decorate)
rescue ArgumentError
@parent ||= []
end

def manageable_files?
Expand Down
2 changes: 2 additions & 0 deletions app/decorators/ephemera_vocabulary_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ def find_references
query_service.find_inverse_references_by(resource: model, property: :member_of_vocabulary_id).to_a

end
rescue ArgumentError
@referenced_by ||= []
end

# a category is just a nested vocabulary
Expand Down
4 changes: 2 additions & 2 deletions app/indexers/facet_indexer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ def subject_terms
terms.concat(decorated_resource.subject) if decorated_resource.try(:subject)
terms.concat(decorated_resource.categories) if decorated_resource.try(:categories)
terms.map do |term|
term.respond_to?(:label) ? term.label : term
term.respond_to?(:label) ? Array.wrap(term.label).first : term
end.uniq
end

def language_terms
terms = []
terms.concat(decorated_resource.language) if decorated_resource.try(:language)
terms.map do |term|
term.respond_to?(:label) ? term.label : term
term.respond_to?(:label) ? Array.wrap(term.label).first : term
end.uniq
end

Expand Down
2 changes: 2 additions & 0 deletions app/indexers/member_of_indexer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ def to_solr
def parents
@parents ||=
query_service.find_parents(resource: resource)
rescue ArgumentError
@parents = []
end

def metadata_adapter
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/characterization_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class CharacterizationJob < ApplicationJob
def perform(file_set_id)
file_set = query_service.find_by(id: Valkyrie::ID.new(file_set_id))
metadata_adapter.persister.buffer_into_index do |buffered_adapter|
Valkyrie::FileCharacterizationService.for(file_node: file_set, persister: buffered_adapter.persister).characterize
Valkyrie::Derivatives::FileCharacterizationService.for(file_node: file_set, persister: buffered_adapter.persister).characterize
end
CreateDerivativesJob.set(queue: queue_name).perform_later(file_set_id)
end
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/cleanup_derivatives_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class CleanupDerivativesJob < ApplicationJob
# @param file_set_id [Valkyrie::ID, String] the ID for the Valkyrie Resource
def perform(file_set_id)
file_set = query_service.find_by(id: Valkyrie::ID.new(file_set_id))
Valkyrie::DerivativeService.for(FileSetChangeSet.new(file_set)).cleanup_derivatives
Valkyrie::Derivatives::DerivativeService.for(FileSetChangeSet.new(file_set)).cleanup_derivatives
rescue Valkyrie::Persistence::ObjectNotFoundError
Rails.logger.error "Unable to find FileSet #{file_set_id} for deletion, derivative files are probably left behind"
end
Expand Down
2 changes: 1 addition & 1 deletion app/jobs/create_derivatives_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class CreateDerivativesJob < ApplicationJob

def perform(file_set_id)
file_set = query_service.find_by(id: Valkyrie::ID.new(file_set_id))
Valkyrie::DerivativeService.for(FileSetChangeSet.new(file_set)).create_derivatives
Valkyrie::Derivatives::DerivativeService.for(FileSetChangeSet.new(file_set)).create_derivatives
CheckFixityJob.set(queue: queue_name).perform_later(file_set_id)
end

Expand Down
2 changes: 1 addition & 1 deletion app/jobs/recharacterize_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def perform(id)
def recharacterize(file_sets)
file_sets.each do |file_set|
@metadata_adapter.persister.buffer_into_index do |buffered_adapter|
Valkyrie::FileCharacterizationService.for(file_node: file_set, persister: buffered_adapter.persister).characterize
Valkyrie::Derivatives::FileCharacterizationService.for(file_node: file_set, persister: buffered_adapter.persister).characterize
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/ephemera_box.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ class EphemeraBox < Valhalla::Resource
attribute :local_identifier

def title
'Ephemera Box'
['Ephemera Box']
end
end
2 changes: 1 addition & 1 deletion app/models/ephemera_field.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ class EphemeraField < Valhalla::Resource
include Valkyrie::Resource::AccessControls
attribute :id, Valkyrie::Types::ID.optional
attribute :field_name # Please note that this stores an index for a Term within ControlledVocabulary::EphemeraField
attribute :member_of_vocabulary_id
attribute :member_of_vocabulary_id, Valkyrie::Types::Set
end
Loading

0 comments on commit 3d1542c

Please sign in to comment.