Sha256: 25f6e782dba4024622057860a29a86d4c2083844fa247c3ebfb704fb345d5145

Contents?: true

Size: 1.65 KB

Versions: 6

Compression:

Stored size: 1.65 KB

Contents

module Sufia
  # Attaches remote files to the work
  class CreateWithRemoteFilesActor < CurationConcerns::Actors::AbstractActor
    def create(attributes)
      remote_files = attributes.delete(:remote_files)
      next_actor.create(attributes) && attach_files(remote_files)
    end

    def update(attributes)
      remote_files = attributes.delete(:remote_files)
      next_actor.update(attributes) && attach_files(remote_files)
    end

    protected

      # @param [HashWithIndifferentAccess]
      # @return [TrueClass]
      def attach_files(remote_files)
        return true unless remote_files
        remote_files.each do |file_info|
          next if file_info.blank? || file_info[:url].blank?
          create_file_from_url(file_info[:url], file_info[:file_name])
        end
        true
      end

      # Generic utility for creating FileSet from a URL
      # Used in to import files using URLs from a file picker like browse_everything
      def create_file_from_url(url, file_name)
        ::FileSet.new(import_url: url, label: file_name) do |fs|
          actor = CurationConcerns::Actors::FileSetActor.new(fs, user)
          actor.create_metadata(curation_concern, visibility: curation_concern.visibility)
          fs.save!
          uri = URI.parse(URI.encode(url))
          if uri.scheme == 'file'
            IngestLocalFileJob.perform_later(fs, URI.decode(uri.path), user)
          else
            ImportUrlJob.perform_later(fs, log(actor.user))
          end
        end
      end

      def log(user)
        CurationConcerns::Operation.create!(user: user,
                                            operation_type: "Attach Remote File")
      end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sufia-7.4.0 app/actors/sufia/create_with_remote_files_actor.rb
sufia-7.3.1 app/actors/sufia/create_with_remote_files_actor.rb
sufia-7.3.0 app/actors/sufia/create_with_remote_files_actor.rb
sufia-7.3.0.rc3 app/actors/sufia/create_with_remote_files_actor.rb
sufia-7.3.0.rc2 app/actors/sufia/create_with_remote_files_actor.rb
sufia-7.3.0.rc1 app/actors/sufia/create_with_remote_files_actor.rb