class Toller::Retriever

Retriever

Attributes

collection[R]
filter_params[R]
retrievals[R]
sort_params[R]

Public Class Methods

filter(collection, filter_params, sort_params, retrievals) click to toggle source
# File lib/toller/retriever.rb, line 10
def self.filter(collection, filter_params, sort_params, retrievals)
  new(collection, filter_params, sort_params, retrievals).filter
end
new(collection, filter_params, sort_params, retrievals) click to toggle source
# File lib/toller/retriever.rb, line 14
def initialize(collection, filter_params, sort_params, retrievals)
  @collection = collection
  @filter_params = filter_params
  @sort_params = sort_params
  @retrievals = retrievals
end

Public Instance Methods

filter() click to toggle source
# File lib/toller/retriever.rb, line 21
def filter
  active_retrievals.reduce(collection) do |items, retrieval|
    param_value = if retrieval.is_a?(Filter)
                    filter_params.fetch(retrieval.parameter, nil)
                  else
                    sort_params.include?("-#{retrieval.parameter}") ? :desc : :asc
                  end

    retrieval.apply!(items, param_value)
  end
end

Private Instance Methods

active_retrievals() click to toggle source
# File lib/toller/retriever.rb, line 35
def active_retrievals
  retrievals.select do |retrieval|
    retrieval.is_a?(Filter) ? filtering_activated?(retrieval) : sorting_activated?(retrieval)
  end
end
filtering_activated?(retrieval) click to toggle source
# File lib/toller/retriever.rb, line 41
def filtering_activated?(retrieval)
  return true if filter_params.blank? && retrieval.default

  filter_params.fetch(retrieval.parameter, nil).present?
end
sorting_activated?(retrieval) click to toggle source
# File lib/toller/retriever.rb, line 47
def sorting_activated?(retrieval)
  return true if sort_params.blank? && retrieval.default

  string_parameter = retrieval.parameter.to_s

  sort_params.include?(string_parameter) || sort_params.include?("-#{string_parameter}")
end