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