Class: Filterameter::FilterCoordinator

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

Overview

Filter Coordinator

Class FilterCoordinator 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 coordinator stored as a class variable.

The coordinators encapsulate references to the Query Builder and Filter Registry to keep the namespace clean for controllers that implement filter parameters.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller_name, controller_path) ⇒ FilterCoordinator

Returns a new instance of FilterCoordinator.



26
27
28
29
# File 'lib/filterameter/filter_coordinator.rb', line 26

def initialize(controller_name, controller_path)
  @controller_name = controller_name
  @controller_path = controller_path
end

Instance Attribute Details

#default_sort_parameters ⇒ Object (readonly)

Returns the value of attribute default_sort_parameters.



20
21
22
# File 'lib/filterameter/filter_coordinator.rb', line 20

def default_sort_parameters
  @default_sort_parameters
end

#query_variable_name ⇒ Object



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

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

Instance Method Details

#declarations_validator ⇒ Object



52
53
54
# File 'lib/filterameter/filter_coordinator.rb', line 52

def declarations_validator
  Filterameter::DeclarationsValidator.new(@controller_name, model_class, registry)
end

#default_sort=(sort_and_direction_pairs) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/filterameter/filter_coordinator.rb', line 43

def default_sort=(sort_and_direction_pairs)
  normalized = Helpers::SortNormalizer.normalize(sort_and_direction_pairs).freeze

  @default_sort_parameters = normalized
  @default_sort = normalized.map do |name, direction|
    RequestedSort.new(name, direction)
  end.freeze
end

#model_class=(model_class) ⇒ Object



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

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

#query_builder ⇒ Object



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

def query_builder
  @query_builder ||= Filterameter::QueryBuilder.new(default_query, @default_sort, registry)
end