Sha256: a842ad1efdb0b04973c3d2b9d02d9f8c95815a01dd1f4bf78a45d33994f97a57

Contents?: true

Size: 1.02 KB

Versions: 3

Compression:

Stored size: 1.02 KB

Contents

module Trax
  module Controller
    module Collection
      module NestedSearchScopes
        extend ::ActiveSupport::Concern

        module ClassMethods
          def has_nested_scopes_for(scope_name, as:, model:, permitted_scopes: [], only: [:index, :search], type: :hash, **options)
            has_scope(scope_name, as: as, only: only, type: type, **options) do |controller, scope, value|
              scope_ivar_name = "@#{scope_name}_scope"
              instance_variable_set(:"#{scope_ivar_name}", model)

              value.each_pair do |k,v|
                raise ::ActionController::ParameterMissing.new("Invalid search parameter #{k} #{v}") unless permitted_scopes.include?(k)

                instance_variable_set(
                  :"#{scope_ivar_name}",
                  instance_variable_get(:"#{scope_ivar_name}").all.__send__(k, v)
                )
              end

              scope.__send__(scope_name, instance_variable_get(:"#{scope_ivar_name}"))
            end
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
trax_controller-1.0.0 lib/trax/controller/collection/nested_search_scopes.rb
trax_controller-0.1.4 lib/trax/controller/collection/nested_search_scopes.rb
trax_controller-0.1.3 lib/trax/controller/collection/nested_search_scopes.rb