Sha256: df70f0779df3ffc2440db4450dde3042b6fac4daed967d484fb79535a084727c

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

module FedoraMigrate
  class DatastreamMover < Mover

    attr_accessor :versionable

    def post_initialize
      raise FedoraMigrate::Errors::MigrationError, "You must supply a target" if target.nil?
    end

    def versionable?
      versionable.nil? ? target_versionable? : versionable
    end

    def target_versionable?
      if target.respond_to?(:versionable?)
        target.versionable?
      else
        false
      end
    end

    def migrate
      before_datastream_migration
      migrate_datastream
      after_datastream_migration
      super
    end

    private

    def migrate_datastream
      if versionable?
        migrate_versions
      else
        migrate_current
      end
    end

    # Reload the target, otherwise the checksum is nil
    def migrate_current
      migrate_content
      target.reload if report.last.success?
    end

    # Rubydora stores the versions array as the most recent first. We explicitly sort them according to createDate
    def migrate_versions
      source.versions.sort { |a,b| a.createDate <=> b.createDate }.each do |version|
        migrate_content(version)
        target.create_version if report.last.success? && !application_creates_versions?
      end
    end

    def migrate_content datastream=nil
      datastream ||= source
      report << FedoraMigrate::ContentMover.new(datastream, target).migrate
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fedora-migrate-0.3.0 lib/fedora_migrate/datastream_mover.rb
fedora-migrate-0.2.0 lib/fedora_migrate/datastream_mover.rb