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