Sha256: b546e833d1b16029824c4ff705df874b4953492ca54eaaa1d736d0b0fdba0fff

Contents?: true

Size: 1.7 KB

Versions: 7

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true
module Hyrax
  ##
  # @api public
  class VersionListPresenter
    include Enumerable

    attr_reader :versioning_service

    ##
    # @param service [Hyrax::VersioningService]
    def initialize(service)
      @versioning_service = service
    end

    ##
    # @param [Object] an object representing the File Set
    #
    # @return [Hyrax::VersionListPresenter] an enumerable of presenters for the
    #   relevant file versions.
    #
    # @raise [ArgumentError] if we can't build an enumerable
    def self.for(file_set:, file_service: Hyrax.config.file_set_file_service)
      original_file = case file_set
                      when ActiveFedora::Base
                        file_set.original_file
                      else
                        file_service.new(file_set: file_set).primary_file
                      end

      new(Hyrax::VersioningService.new(resource: original_file))
    rescue NoMethodError
      raise ArgumentError
    end

    delegate :each, :empty?, to: :wrapped_list
    delegate :supports_multiple_versions?, to: :versioning_service

    private

    def wrapped_list
      @wrapped_list ||=
        begin
          presenters = @versioning_service.versions.map { |v| Hyrax::VersionPresenter.new(v) } # wrap each item in a presenter
          if presenters.first&.version&.respond_to?(:created)
            presenters.sort! { |a, b| b.version.created <=> a.version.created } if presenters.first&.version.respond_to?(:created) # sort list of versions based on creation date
          else
            presenters.reverse!
          end
          presenters.tap { |l| l.first.try(:current!) } # set the first version to the current version
        end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hyrax-5.1.0.pre.beta1 app/presenters/hyrax/version_list_presenter.rb
hyrax-5.0.4 app/presenters/hyrax/version_list_presenter.rb
hyrax-5.0.3 app/presenters/hyrax/version_list_presenter.rb
hyrax-5.0.2 app/presenters/hyrax/version_list_presenter.rb
hyrax-5.0.1 app/presenters/hyrax/version_list_presenter.rb
hyrax-5.0.0 app/presenters/hyrax/version_list_presenter.rb
hyrax-5.0.0.rc3 app/presenters/hyrax/version_list_presenter.rb