module Filtron
Constants
- VERSION
Public Instance Methods
filter(filters)
click to toggle source
# File lib/filtron.rb, line 29 def filter(filters) conditions = filters_to_conditions(filters) if filters[:ransack_options] search(conditions).result(filters[:ransack_options]) else search(conditions) end end
filter_with(param, predicate, options = {}, &block)
click to toggle source
# File lib/filtron.rb, line 16 def filter_with(param, predicate, options = {}, &block) filtron_filters[param] = [predicate, options, block] end
filtron_filters()
click to toggle source
# File lib/filtron.rb, line 4 def filtron_filters @filtron_filters ||= {} end
filtron_query_param()
click to toggle source
# File lib/filtron.rb, line 12 def filtron_query_param @filtron_query_param ||= :q end
filtron_query_predicate()
click to toggle source
# File lib/filtron.rb, line 8 def filtron_query_predicate @filtron_query_predicate end
queries(*columns)
click to toggle source
# File lib/filtron.rb, line 20 def queries(*columns) options = columns[-1].is_a?(Hash) ? columns.pop : {} suffix = options.fetch(:suffix, "_cont") suffix = "_#{suffix}" unless suffix.start_with?("_") @filtron_query_param = options.fetch(:with, @filtron_query_param) @filtron_query_predicate = columns.join("_or_") + suffix end
Protected Instance Methods
add_query_predicate(filters, params)
click to toggle source
# File lib/filtron.rb, line 60 def add_query_predicate(filters, params) key = filtron_query_param if key && params[key] filters << [filtron_query_predicate, params[key]] end end
filters_from_predicates(params, predicates)
click to toggle source
# File lib/filtron.rb, line 48 def filters_from_predicates(params, predicates) slice(params, *predicates.keys).map do |key, value| filter = predicates[key] value = filter[-1].call(value) if filter[-1].respond_to?(:call) [filter[0], value] end end
filters_to_conditions(params)
click to toggle source
# File lib/filtron.rb, line 41 def filters_to_conditions(params) predicates = filtron_filters filters = filters_from_predicates(params, predicates) add_query_predicate(filters, params) Hash[filters] end
slice(hash, *keys)
click to toggle source
# File lib/filtron.rb, line 56 def slice(hash, *keys) keys.each_with_object({}) { |k, h| h[k] = hash[k] if hash.key?(k) } end