Class: Filterameter::ControllerFilters

Inherits:
Object
  • Object
show all
Defined in:
lib/filterameter/controller_filters.rb

Overview

Controller Filters

Class ControllerFilters stores the configuration declared via class-level method calls such as the list of filters and the optionally declared model class. Each controller will have one instance of the controller declarations stored as a class variable.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller_name, controller_path) ⇒ ControllerFilters

Returns a new instance of ControllerFilters.



24
25
26
27
28
29
# File 'lib/filterameter/controller_filters.rb', line 24

def initialize(controller_name, controller_path)
  @controller_name = controller_name
  @controller_path = controller_path
  @declarations = {}
  @filters = Hash.new { |hash, key| hash[key] = filter_factory.build(@declarations[key]) }
end

Instance Attribute Details

#query_variable_nameObject



39
40
41
# File 'lib/filterameter/controller_filters.rb', line 39

def query_variable_name
  @query_variable_name ||= model_class.model_name.plural
end

Instance Method Details

#add_filter(parameter_name, options) ⇒ Object



35
36
37
# File 'lib/filterameter/controller_filters.rb', line 35

def add_filter(parameter_name, options)
  @declarations[parameter_name.to_s] = Filterameter::FilterDeclaration.new(parameter_name, options)
end

#build_query(filter_params, starting_query) ⇒ Object



43
44
45
46
47
# File 'lib/filterameter/controller_filters.rb', line 43

def build_query(filter_params, starting_query)
  valid_filters(filter_params).reduce(starting_query || model_class.all) do |query, (name, value)|
    @filters[name].apply(query, value)
  end
end

#model_class=(model_class) ⇒ Object



31
32
33
# File 'lib/filterameter/controller_filters.rb', line 31

def model_class=(model_class)
  @model_class = model_class.is_a?(String) ? model_class.constantize : model_class
end