class Parse::Query::Condition

Public Class Methods

new(query, column_name) click to toggle source
# File lib/parse/query.rb, line 174
def initialize query, column_name
  @query = query
  @column_name = column_name
  @conditions = []
end

Public Instance Methods

between(*range) click to toggle source
# File lib/parse/query.rb, line 206
def between *range
  if range.size == 1 && range.first.is_a?(Range)
    range = range.first
  elsif range.size == 2
    range = range[0]..range[1]
  else
    raise ArgumentErrr
  end

  if range.exclude_end?
    self.gt(range.begin).lt(range.end)
  else
    self.gte(range.begin).lte(range.end)
  end
end
exists(val=true) click to toggle source
# File lib/parse/query.rb, line 222
def exists val=true
  @conditions.push ['$exists', val]
  self
end
max_distance_in_kilometers(kilometers) click to toggle source
# File lib/parse/query.rb, line 273
def max_distance_in_kilometers kilometers
  @conditions.push ['$maxDistanceInKilometers', kilometers]
  self
end
max_distance_in_miles(miles) click to toggle source
# File lib/parse/query.rb, line 268
def max_distance_in_miles miles
  @conditions.push ['$maxDistanceInMiles', miles]
  self
end
max_distance_in_radians(radians) click to toggle source
# File lib/parse/query.rb, line 278
def max_distance_in_radians radians
  @conditions.push ['$maxDistanceInRadians', radians]
  self
end
near_sphere(geo_point) click to toggle source

conditions for GeoPoints

# File lib/parse/query.rb, line 263
def near_sphere geo_point
  @conditions.push ['$nearSphere', geo_point]
  self
end
or(cond) click to toggle source
# File lib/parse/query.rb, line 252
def or cond
  # quite dirty!!
  @query.where.delete self
  @query.where.delete cond
  or_cond = Condition.new @query, '$or'
  or_cond.eq [self, cond]
  @query.where.push or_cond
end
regex(regex) click to toggle source
# File lib/parse/query.rb, line 288
def regex regex
  @conditions.push ['$regex', regex.source]
  self
end
starts_with(str) click to toggle source

parse.com/questions/are-like-or-regex-queries-possible-via-the-rest-api

# File lib/parse/query.rb, line 294
def starts_with str
  regex %r|^\Q#{str}\E|
end
to_s() click to toggle source
# File lib/parse/query.rb, line 298
def to_s
  if @conditions.size == 1 && !@conditions[0].is_a?(Array)
    "#{@column_name.to_s.inspect}:#{condition_to_s @conditions[0]}"
  elsif @conditions.size == 1 && @conditions[0][0].to_s[0] != '$'
    # $or
    "#{@column_name.to_s.inspect}:#{condition_to_s @conditions[0]}"
  else
    "#{@column_name.to_s.inspect}:{#{@conditions.map{|c| condition_to_s c}.join ','}}"
  end
end
within(southwest_geo_point, northeast_geo_point) click to toggle source
# File lib/parse/query.rb, line 283
def within southwest_geo_point, northeast_geo_point
  @conditions.push WithinCondition.new(southwest_geo_point, northeast_geo_point)
  self
end

Private Instance Methods

condition_to_s(condition) click to toggle source
# File lib/parse/query.rb, line 325
def condition_to_s condition
  case condition
  when Array
    if condition[0].to_s[0] == '$'
      "#{condition[0].inspect}:#{condition_value_to_s condition[1]}"
    else
      # $or
      "[#{condition.map{|c| "{#{condition_value_to_s c}}"}.join ','}]"
    end
  else
    condition_value_to_s condition
  end
end
condition_value_to_s(val) click to toggle source
# File lib/parse/query.rb, line 311
def condition_value_to_s val
  case val
  when Parse::Object
    %Q|{"__type":"Pointer","className":"#{val.parse_class_name}","objectId":"#{val.parse_object_id}"}|
  when Parse::GeoPoint
    val.to_json
  when Parse::ParseDate
    val.to_json
  else
    val.inspect
    #val.to_json
  end
end