class Cuprum::Rails::QueryBuilder

Applies filter operations for a Rails collection query.

Attributes

native_query[R]

Public Class Methods

new(base_query) click to toggle source

@param base_query [Cuprum::Rails::Query] The query to build.

Calls superclass method
# File lib/cuprum/rails/query_builder.rb, line 11
def initialize(base_query)
  super

  @native_query = base_query.send(:native_query)
end

Private Instance Methods

build_native_query(criteria) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 21
def build_native_query(criteria)
  native_query.where(
    criteria
      .map do |(attribute, operator, value)|
        send(operator, attribute, value)
      end
      .join(' AND ')
  )
end
build_query(criteria) click to toggle source
Calls superclass method
# File lib/cuprum/rails/query_builder.rb, line 31
def build_query(criteria)
  super.send(:with_native_query, build_native_query(criteria))
end
equal(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 35
def equal(attribute, value)
  return sanitize("#{attribute} IS NULL") if value.nil?

  sanitize("#{attribute} = :value", value: value)
end
greater_than(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 41
def greater_than(attribute, value)
  sanitize("#{attribute} > :value", value: value)
end
greater_than_or_equal_to(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 45
def greater_than_or_equal_to(attribute, value)
  sanitize("#{attribute} >= :value", value: value)
end
less_than(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 49
def less_than(attribute, value)
  sanitize("#{attribute} < :value", value: value)
end
less_than_or_equal_to(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 53
def less_than_or_equal_to(attribute, value)
  sanitize("#{attribute} <= :value", value: value)
end
not_equal(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 57
def not_equal(attribute, value)
  return sanitize("#{attribute} IS NOT NULL") if value.nil?

  sanitize("(#{attribute} != :value OR #{attribute} IS NULL)", value: value)
end
not_one_of(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 63
def not_one_of(attribute, value)
  sanitize(
    "(#{attribute} NOT IN (:value) OR #{attribute} IS NULL)",
    value: value
  )
end
one_of(attribute, value) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 70
def one_of(attribute, value)
  sanitize("#{attribute} IN (:value)", value: value)
end
sanitize(*conditions) click to toggle source
# File lib/cuprum/rails/query_builder.rb, line 74
def sanitize(*conditions)
  ActiveRecord::Base.sanitize_sql_for_conditions(conditions)
end