class IndexQueryBuilder::QueryBuilder

Attributes

filters[R]
query_definition[R]

Public Class Methods

apply(base_scope, query_definition, filters) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 3
def self.apply(base_scope, query_definition, filters)
  new(query_definition, filters).apply(base_scope)
end
new(query_definition, filters) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 9
def initialize(query_definition, filters)
  @query_definition = query_definition
  @filters = filters
end

Public Instance Methods

apply(base_scope) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 14
def apply(base_scope)
  apply_filters(apply_order_by(base_scope))
end

Private Instance Methods

apply_filters(arel) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 26
def apply_filters(arel)
  filters.reduce(arel) do |arel, (filter_name, filter_value)|
    apply_predicates_for_filter(arel, filter_name, filter_value)
  end
end
apply_order_by(arel) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 20
def apply_order_by(arel)
  query_definition.arel_ordering.reduce(arel) do |arel, ordering|
    ordering.call(arel)
  end
end
apply_predicates_for_filter(arel, filter_name, filter_value) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 32
def apply_predicates_for_filter(arel, filter_name, filter_value)
  arel_predicates(filter_name).reduce(arel) { |arel, predicate| predicate.call(arel, filter_value) }
end
arel_predicates(filter_name) click to toggle source
# File lib/index_query_builder/query_builder.rb, line 36
def arel_predicates(filter_name)
  query_definition.arel_filters.fetch(filter_name) { [] }
end