Sha256: 164ed7232c089235c8c5deb5e0bdfe90fc8cc9470d9d84019045033762979576

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true
##
# This monkey-patch shim is for both active_fedora and valkyrie resources for tests
# This shim handles the case where controllers are loaded with an ActiveFedora collection class
# different than a test mocks Hyrax.config.collection_class.
# This override checks the value in Hyrax.config and uses it when it is a known collection or admin set class.
# This override also memoizes the resource_class to avoid multiple lookups.
CanCan::ControllerResource.class_eval do
  def resource_class
    return @resource_class if @resource_class.present?
    @resource_class = case @options[:class]
                      when false then
                        name.to_sym
                      when nil then
                        namespaced_name.to_s.camelize.constantize
                      when String then
                        @options[:class].constantize
                      else
                        @options[:class]
                      end
    @resource_class = dynamically_resolve_class(@resource_class)
  end

  private

  def dynamically_resolve_class(resource_class)
    if collection_class?(resource_class)
      Hyrax.config.collection_class
    elsif admin_set_class?(resource_class)
      Hyrax.config.admin_set_class
    else
      resource_class
    end
  end

  def collection_class?(model_class)
    model_class == Hyrax::PcdmCollection || model_class < Hyrax::PcdmCollection || model_class == ::Collection || model_class < ::Collection
  end

  def admin_set_class?(model_class)
    model_class == Hyrax::AdministrativeSet || model_class < Hyrax::AdministrativeSet || model_class == AdminSet || model_class < AdminSet
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hyrax-5.0.0 spec/support/can_can_overrides.rb
hyrax-5.0.0.rc3 spec/support/can_can_overrides.rb