class BazaModels::Ransacker

Attributes

db[R]
klass[R]
query[RW]

Public Class Methods

new(args) click to toggle source
# File lib/baza_models/ransacker.rb, line 7
def initialize(args)
  @args = args.fetch(:args)
  @klass = args.fetch(:class)
  @db = @klass.db
  @params = args.fetch(:params)
  @_registered_params = @params # Support for SimpleFormRansack
  @query = args.fetch(:query)
  @search_key = @args[:search_key] || :q
end

Public Instance Methods

context() click to toggle source
# File lib/baza_models/ransacker.rb, line 22
def context
  BazaModels::Ransacker::Context.new(search_key: @search_key)
end
result() click to toggle source
# File lib/baza_models/ransacker.rb, line 17
def result
  add_filters_to_query unless @add_filters_to_query_executed
  @query
end

Private Instance Methods

add_filters_to_query() click to toggle source
# File lib/baza_models/ransacker.rb, line 28
  def add_filters_to_query
    @add_filters_to_query_executed = true
    return unless @params

    ransackable_scopes = @klass.ransackable_scopes.map(&:to_s) if @klass.respond_to?(:ransackable_scopes)

    @params.each do |key, value|
      if (match = key.to_s.match(/\A(.+?)_(cont|eq|lt|lteq|gt|gteq)\Z/))
        filter(match[1], value, match[2])
      elsif key.to_s == "s"
        match = value.to_s.match(/\A([A-z_\d]+)\s+(asc|desc)\Z/)
        raise "Couldn't sort-match: #{value}" unless match

        sort_by(column_name: match[1], sort_mode: match[2])
      elsif
ransackable_scopes&.include?(key.to_s)
        @query = @query.__send__(key, value)
      end
    end
  end
filter(column_name, value, mode) click to toggle source
# File lib/baza_models/ransacker.rb, line 49
def filter(column_name, value, mode)
  BazaModels::Ransacker::RelationshipScanner.new(
    column_name: column_name,
    mode: mode.to_sym,
    ransacker: self,
    value: value
  )
end
sort_by(args) click to toggle source
# File lib/baza_models/ransacker.rb, line 58
def sort_by(args)
  BazaModels::Ransacker::RelationshipScanner.new(
    column_name: args.fetch(:column_name),
    mode: :sort,
    ransacker: self,
    value: args.fetch(:sort_mode)
  )
end