diff --git a/app/models/hyrax/file_metadata.rb b/app/models/hyrax/file_metadata.rb index 1c71e7eda2..2ea6dce37d 100644 --- a/app/models/hyrax/file_metadata.rb +++ b/app/models/hyrax/file_metadata.rb @@ -18,7 +18,7 @@ def self.FileMetadata(file) "with id #{file.id}. Initializing a new one") FileMetadata.new(file_identifier: file.id, - original_filename: File.basename(file.io)) + original_filename: File.basename(file.disk_path)) end class FileMetadata < Valkyrie::Resource diff --git a/app/models/hyrax/work.rb b/app/models/hyrax/work.rb index 14adb76ce2..e7b326a7d3 100644 --- a/app/models/hyrax/work.rb +++ b/app/models/hyrax/work.rb @@ -63,7 +63,7 @@ module Hyrax # `it_behaves_like 'has_members'`. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb. # * Work to File Set: (0..m) A work can have many file sets. # @example Add a file set to a work (code from Hyrax::WorkUploadsHandler#append_to_work) - # work.member_ids << file_set.id + # work.member_ids += [file_set.id] # work.representative_id = file_set.id if work.respond_to?(:representative_id) && work.representative_id.blank? # work.thumbnail_id = file_set.id if work.respond_to?(:thumbnail_id) && work.thumbnail_id.blank? # Hyrax.persister.save(resource: work) diff --git a/app/services/hyrax/collections/collection_member_service.rb b/app/services/hyrax/collections/collection_member_service.rb index a141b6ce33..7a115c9a8a 100644 --- a/app/services/hyrax/collections/collection_member_service.rb +++ b/app/services/hyrax/collections/collection_member_service.rb @@ -106,7 +106,7 @@ def add_member_by_id(collection_id:, new_member_id:, user:) def add_member(collection_id:, new_member:, user:) message = Hyrax::MultipleMembershipChecker.new(item: new_member).check(collection_ids: [collection_id], include_current_members: true) raise Hyrax::SingleMembershipError, message if message.present? - new_member.member_of_collection_ids << collection_id # only populate this direction + new_member.member_of_collection_ids += [collection_id] # only populate this direction new_member = Hyrax.persister.save(resource: new_member) publish_metadata_updated(new_member, user) new_member diff --git a/app/services/hyrax/valkyrie_upload.rb b/app/services/hyrax/valkyrie_upload.rb index 30f9a4993d..c2ddbec7d5 100644 --- a/app/services/hyrax/valkyrie_upload.rb +++ b/app/services/hyrax/valkyrie_upload.rb @@ -80,7 +80,7 @@ def version_upload(file_set:, io:, user:) # # @return [Hyrax::FileSet] updated file set def add_file_to_file_set(file_set:, file_metadata:, user:) - file_set.file_ids << file_metadata.id + file_set.file_ids += [file_metadata.id] Hyrax.persister.save(resource: file_set) Hyrax.publisher.publish('object.membership.updated', object: file_set, user: user) end diff --git a/app/services/hyrax/work_uploads_handler.rb b/app/services/hyrax/work_uploads_handler.rb index 0c89af7af1..f49bcd1667 100644 --- a/app/services/hyrax/work_uploads_handler.rb +++ b/app/services/hyrax/work_uploads_handler.rb @@ -124,7 +124,7 @@ def make_file_set_and_ingest(file) # # @todo figure out how to know less about Work's ideas about FileSet use here. Maybe post-Wings, work. def append_to_work(file_set) - work.member_ids << file_set.id + work.member_ids += [file_set.id] work.representative_id = file_set.id if work.respond_to?(:representative_id) && work.representative_id.blank? work.thumbnail_id = file_set.id if work.respond_to?(:thumbnail_id) && work.thumbnail_id.blank? end diff --git a/app/validators/hyrax/collection_membership_validator.rb b/app/validators/hyrax/collection_membership_validator.rb index 16430b12b7..d0d2752c85 100644 --- a/app/validators/hyrax/collection_membership_validator.rb +++ b/app/validators/hyrax/collection_membership_validator.rb @@ -29,7 +29,7 @@ def collections_ids(record) record.member_of_collections_attributes .each do |_k, h| next if h["_destroy"] == "true" - collection_ids << Valkyrie::ID.new(h["id"]) + collection_ids += [Valkyrie::ID.new(h["id"])] end end diff --git a/config/initializers/file_length_patch.rb b/config/initializers/file_length_patch.rb new file mode 100644 index 0000000000..36568f550d --- /dev/null +++ b/config/initializers/file_length_patch.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +# Valkyrie::Storage::Fedora expects io objects to have #length +class ::File + alias length size unless ::File.respond_to? :length +end diff --git a/lib/hyrax/configuration.rb b/lib/hyrax/configuration.rb index 2c59417e76..f5140d3091 100644 --- a/lib/hyrax/configuration.rb +++ b/lib/hyrax/configuration.rb @@ -565,6 +565,20 @@ def derivatives_storage_adapter=(adapter) @derivatives_storage_adapter = Valkyrie::StorageAdapter.find(adapter.to_sym) end + # A HTTP connection to use for Valkyrie Fedora requests + # + # @return [#call] lambda/proc that generates a Faraday connection + def fedora_connection_builder + @fedora_connection_builder ||= lambda { |url| + Faraday.new(url) do |f| + f.request :multipart + f.request :url_encoded + f.adapter Faraday.default_adapter + end + } + end + attr_writer :fedora_connection_builder + ## # @return [#save, #save_all, #delete, #wipe!] an indexing adapter def index_adapter diff --git a/lib/hyrax/transactions/steps/add_to_parent.rb b/lib/hyrax/transactions/steps/add_to_parent.rb index 142c354637..909d607be8 100644 --- a/lib/hyrax/transactions/steps/add_to_parent.rb +++ b/lib/hyrax/transactions/steps/add_to_parent.rb @@ -20,7 +20,7 @@ def call(obj, parent_id: nil, user: nil) return Success(obj) if parent_id.blank? parent = Hyrax.query_service.find_by(id: parent_id) - parent.member_ids << obj.id + parent.member_ids += [obj.id] Hyrax.persister.save(resource: parent) user ||= ::User.find_by_user_key(obj.depositor)