Module: Filterrific::ActiveRecordExtension

Defined in:
lib/filterrific/active_record_extension.rb

Instance Method Summary collapse

Instance Method Details

#filterrific(opts) ⇒ void

This method returns an undefined value.

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" },

)

Parameters:

  • opts (Hash)

    a customizable set of options

Options Hash (opts):

  • available_filters: (Array<String, Symbol>)

    a list of filters to be exposed by Filterrific.

  • default_filter_params: (Hash, optional)

    default filter parameters



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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) ⇒ ActiveRecord::Relation

Returns ActiveRecord relation based on filterrific_param_set. Use like so: ‘ModelClass.filterrific_find(@filterrific)`

Parameters:

Returns:

  • (ActiveRecord::Relation)

    with filters applied



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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