Sha256: 787a5b31729a59843915d2c1f6bc7229951b0f6a5712753de7d94658ce615ec7

Contents?: true

Size: 1.2 KB

Versions: 29

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

module Hyrax
  ##
  # Propagates visibility from a given Work to its FileSets
  class FileSetVisibilityPropagator
    ##
    # @!attribute [rw] source
    #   @return [#visibility]
    attr_accessor :source

    ##
    # @param source [#visibility] the object to propagate visibility from
    def initialize(source:)
      self.source = source
    end

    ##
    # @return [void]
    #
    # @raise [RuntimeError] if visibility propagation fails
    def propagate
      source.file_sets.each do |file|
        file.visibility = source.visibility # visibility must come first, because it can clear an embargo/lease
        copy_visibility_modifier(source: source, file: file, modifier: :lease)
        copy_visibility_modifier(source: source, file: file, modifier: :embargo)
        file.save!
      end
    end

    private

    def copy_visibility_modifier(source:, file:, modifier:)
      source_modifier = source.public_send(modifier)
      return unless source_modifier
      file.public_send("build_#{modifier}") unless file.public_send(modifier)
      file.public_send(modifier).attributes = source_modifier.attributes.except('id')
      file.public_send(modifier).save
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
hyrax-5.1.0.pre.beta1 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.4 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.3 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.2 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.1 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.0 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.0.rc3 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.0.rc2 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-5.0.0.rc1 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-3.6.0 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-4.0.0 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-4.0.0.rc3 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-4.0.0.rc2 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-4.0.0.rc1 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-3.5.0 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-4.0.0.beta2 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-3.4.2 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-4.0.0.beta1 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-3.4.1 app/services/hyrax/file_set_visibility_propagator.rb
hyrax-3.4.0 app/services/hyrax/file_set_visibility_propagator.rb