Sha256: 3680db6a538dae54e75295214de2c5f2bdc741c87add411b52274dddb718d030

Contents?: true

Size: 1.61 KB

Versions: 3

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true
require 'drillbit/authorizers/parameters'

module  Drillbit
module  Authorizers
class   Parameters
class   Filtering < Authorizers::Parameters
  def call
    params.permit(*authorized_params)
  end

  private

  def authorized_params
    @authorized_params ||= [
                             :sort,
                             page:   %i{
                                       number
                                       size
                                       offset
                                       limit
                                       cursor
                                     },
                             filter: [
                                       :query,
                                       {},
                                     ],
                           ]
  end

  def add_filterable_parameter(name)
    param = params.
            fetch(:filter, {}).
            fetch(name,    nil)

    if param.class == Array
      authorized_params[1][:filter][1][name] = []
    else
      authorized_params[1][:filter] << name
    end
  end

  def add_filterable_parameters(*names)
    names.each do |name|
      add_filterable_parameter(name)
    end
  end

  def override_filter_parameter(name:,
                                value:,
                                only_when_present: false,
                                override_if_admin: false)

    add_filterable_parameter name

    return true if !override_if_admin && token.admin?

    params[:filter] ||= {}

    params[:filter][name] = value if params[:filter][name] || !only_when_present
  end
end
end
end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
drillbit-2.4.0 lib/drillbit/authorizers/parameters/filtering.rb
drillbit-2.3.1 lib/drillbit/authorizers/parameters/filtering.rb
drillbit-2.3.0 lib/drillbit/authorizers/parameters/filtering.rb