Class: Filterrific::ParamSet

Inherits:
Object
  • Object
show all
Defined in:
lib/filterrific/param_set.rb

Overview

FilterParamSet is a container to store FilterParams for a resource class that is filterrific

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_class, filterrific_params = {}) ⇒ ParamSet

Returns a new instance of ParamSet.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/filterrific/param_set.rb', line 8

def initialize(resource_class, filterrific_params = {})

  self.resource_class = resource_class

  # use either passed in options or resource class' default list_options
  # don't merge them. This causes trouble if an option is set to nil
  # by the user, then it will be overriden by default list_options
  # You might wonder "what if I want to change only one thing from the defaults?"
  # Persistence, baby. By the time you submit changes to one dimension, all the others
  # will be already initialized with the defaults.
  filterrific_params = resource_class.default_filterrific_params if filterrific_params.blank?

  # force all keys to strings
  filterrific_params.stringify_keys!

  # condition filterrific_params
  filterrific_params.each do |key, val|
    case
    when val.is_a?(Proc)
      # evaulate Procs
      filterrific_params[key] = val.call
    when val.is_a?(Array)
      # type cast integers
      filterrific_params[key] = filterrific_params[key].map { |e| e =~ /^\d+$/ ? e.to_i : e }
    when val =~ /^\d+$/
      # type cast integers
      filterrific_params[key] = filterrific_params[key].to_i
    end
  end

  # Define attr_accessor for each FilterrificScope
  # on Filterrific::ParamSet instance and assign values from options
  resource_class.filterrific_scope_names.each do |scope_name|
    self.class.send(:attr_accessor, scope_name)
    v = filterrific_params[scope_name.to_s]
    self.send("#{ scope_name }=", v)  if v.present?
  end

end

Instance Attribute Details

#resource_classObject

Returns the value of attribute resource_class.



6
7
8
# File 'lib/filterrific/param_set.rb', line 6

def resource_class
  @resource_class
end

Instance Method Details

#customized?Boolean

Returns true if this Filterrific::ParamSet is not the model’s default.

Returns:

  • (Boolean)


67
68
69
# File 'lib/filterrific/param_set.rb', line 67

def customized?
  resource_class.default_filterrific_params != to_hash
end

#to_hashObject

Returns FilterrificParams as hash (used for URL params and serialization)



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/filterrific/param_set.rb', line 49

def to_hash
  {}.tap { |h|
    resource_class.filterrific_scope_names.each do |scope_name|
      param_value = self.send(scope_name)
      case
      when param_value.blank?
        # do nothing
      when param_value.is_a?(Proc)
        # evaluate Proc so it can be serialized
        h[scope_name.to_s] = param_value.call
      else
        h[scope_name.to_s] = param_value
      end
    end
  }
end