Sha256: ea9a067d6f69e800a5992c721535197bd44e06f815d10764d412ccf696b79775

Contents?: true

Size: 1.06 KB

Versions: 12

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

module CanCan
  module ControllerResourceFinder
    protected

    def find_resource
      if @options[:singleton] && parent_resource.respond_to?(name)
        parent_resource.send(name)
      elsif @options[:find_by]
        find_resource_using_find_by
      else
        adapter.find(resource_base, id_param)
      end
    end

    def find_resource_using_find_by
      find_by_dynamic_finder || find_by_find_by_finder || resource_base.send(@options[:find_by], id_param)
    end

    def find_by_dynamic_finder
      method_name = "find_by_#{@options[:find_by]}!"
      resource_base.send(method_name, id_param) if resource_base.respond_to? method_name
    end

    def find_by_find_by_finder
      resource_base.find_by(@options[:find_by].to_sym => id_param) if resource_base.respond_to? :find_by
    end

    def id_param
      @params[id_param_key].to_s if @params[id_param_key].present?
    end

    def id_param_key
      if @options[:id_param]
        @options[:id_param]
      else
        parent? ? :"#{name}_id" : :id
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/cancancan-3.6.1/lib/cancan/controller_resource_finder.rb
cancancan-3.5.0 lib/cancan/controller_resource_finder.rb
cancancan-3.4.0 lib/cancan/controller_resource_finder.rb
cancancan-3.3.0 lib/cancan/controller_resource_finder.rb
cancancan-3.2.2 lib/cancan/controller_resource_finder.rb
cancancan-3.2.1 lib/cancan/controller_resource_finder.rb
cancancan-3.2.0 lib/cancan/controller_resource_finder.rb
cancancan-3.1.0 lib/cancan/controller_resource_finder.rb
cancancan-3.0.2 lib/cancan/controller_resource_finder.rb
cancancan-3.0.1 lib/cancan/controller_resource_finder.rb
cancancan-3.0.0 lib/cancan/controller_resource_finder.rb
cancancan-3.0.0.rc1 lib/cancan/controller_resource_finder.rb