module Filterrific::ActiveRecordExtension
Attributes
filterrific_available_filters[RW]
filterrific_default_filter_params[RW]
Public Instance Methods
filterrific(opts)
click to toggle source
Adds Filterrific
behavior to class when called like so:
filterrific(
:available_filters => [:sorted_by, :search_query, :with_state] :default_filter_params => { :sorted_by => "created_at_asc" },
)
@params opts [Hash] with either string or symbol keys, will be stringified. @option opts [Array<String, Symbol>] available_filters: a list of filters to be exposed by Filterrific
. @option opts [Hash, optional] default_filter_params: default filter parameters @return [void]
# File lib/filterrific/active_record_extension.rb, line 19 def filterrific(opts) class << self attr_accessor :filterrific_available_filters attr_accessor :filterrific_default_filter_params end self.filterrific_available_filters = [] opts.stringify_keys! # define_sorted_by_scope(opts['sorted_by']) if opts['sorted_by'] # define_search_query_scope(opts['search_query']) if opts['search_query'] assign_filterrific_available_filters(opts) validate_filterrific_available_filters assign_filterrific_default_filter_params(opts) validate_filterrific_default_filter_params end
filterrific_find(filterrific_param_set)
click to toggle source
Returns ActiveRecord relation based on filterrific_param_set. Use like so: ‘ModelClass.filterrific_find(@filterrific)`
@param filterrific_param_set [Filterrific::ParamSet] @return [ActiveRecord::Relation] with filters applied
# File lib/filterrific/active_record_extension.rb, line 42 def filterrific_find(filterrific_param_set) unless filterrific_param_set.is_a?(Filterrific::ParamSet) raise( ArgumentError, "Invalid Filterrific::ParamSet: #{filterrific_param_set.inspect}" ) end # Initialize ActiveRecord::Relation ar_rel = if ActiveRecord::Relation === self # self is already an ActiveRecord::Relation, use as is self else # Send `:all` to class to get an ActiveRecord::Relation all end # Apply filterrific params filterrific_available_filters.each do |filter_name| filter_param = filterrific_param_set.send(filter_name) next if filter_param.blank? # skip blank filter_params ar_rel = ar_rel.send(filter_name, filter_param) end ar_rel end
Protected Instance Methods
assign_filterrific_available_filters(opts)
click to toggle source
Assigns available filters. @param opts [Hash] the complete options hash passed to ‘filterrific`.
This method uses the 'available_filters', 'sorted_by', and 'search_query' keys.
@return [void]
# File lib/filterrific/active_record_extension.rb, line 81 def assign_filterrific_available_filters(opts) self.filterrific_available_filters = ( filterrific_available_filters + (opts["available_filters"] || []) ).map(&:to_s).uniq.sort end
assign_filterrific_default_filter_params(opts)
click to toggle source
# File lib/filterrific/active_record_extension.rb, line 95 def assign_filterrific_default_filter_params(opts) self.filterrific_default_filter_params = ( opts["default_filter_params"] || {} ).stringify_keys end
validate_filterrific_available_filters()
click to toggle source
Validates presence of at least one available filter. @return [void]
# File lib/filterrific/active_record_extension.rb, line 89 def validate_filterrific_available_filters if filterrific_available_filters.blank? raise(ArgumentError, ":available_filters can't be empty") end end
validate_filterrific_default_filter_params()
click to toggle source
# File lib/filterrific/active_record_extension.rb, line 101 def validate_filterrific_default_filter_params # Raise exception if defaults contain keys that are not present in available_filters if ( inv_fdfps = filterrific_default_filter_params.keys - filterrific_available_filters ).any? raise(ArgumentError, "Invalid default filter params: #{inv_fdfps.inspect}") end end