class IronBank::QueryBuilder
A query builder helps buidling a syntaxically correct query using ZOQL.
Attributes
conditions[R]
fields[R]
object[R]
Public Class Methods
new(object, fields, conditions)
click to toggle source
# File lib/iron_bank/query_builder.rb, line 22 def initialize(object, fields, conditions) @object = object @fields = fields @conditions = conditions end
zoql(object, fields, conditions = {})
click to toggle source
# File lib/iron_bank/query_builder.rb, line 9 def self.zoql(object, fields, conditions = {}) new(object, fields, conditions).zoql end
Public Instance Methods
zoql()
click to toggle source
# File lib/iron_bank/query_builder.rb, line 13 def zoql query = "select #{query_fields} from #{object}" conditions.empty? ? query : "#{query} where #{query_conditions}" end
Private Instance Methods
current_filter(field, value)
click to toggle source
# File lib/iron_bank/query_builder.rb, line 55 def current_filter(field, value) if value.is_a?(Array) range_query_builder(field, value) elsif [true, false].include? value "#{field}=#{value}" else "#{field}='#{value}'" end end
ensure_range_single_condition()
click to toggle source
# File lib/iron_bank/query_builder.rb, line 65 def ensure_range_single_condition return if conditions.count <= 1 return unless conditions.values.any? { |value| value.is_a?(Array) } raise "Filter ranges must be used in isolation." end
hash_query_conditions()
click to toggle source
# File lib/iron_bank/query_builder.rb, line 47 def hash_query_conditions conditions.each.with_object([]) do |(field, value), filters| # TODO: sanitize the value field = IronBank::Utils.camelize(field) filters << current_filter(field, value) end.join(" AND ") end
query_conditions()
click to toggle source
# File lib/iron_bank/query_builder.rb, line 32 def query_conditions ensure_range_single_condition case conditions when Hash hash_query_conditions end end
query_fields()
click to toggle source
# File lib/iron_bank/query_builder.rb, line 28 def query_fields fields.join(",") end
range_query_builder(field, value)
click to toggle source
# File lib/iron_bank/query_builder.rb, line 41 def range_query_builder(field, value) value.each.with_object([]) do |option, range_query| range_query << "#{field}='#{option}'" end.join(" OR ") end