Class: Parse::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/parse/query.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cls_name) ⇒ Query

Returns a new instance of Query.



15
16
17
18
19
20
# File 'lib/parse/query.rb', line 15

def initialize(cls_name)
  @class_name = cls_name
  @where = {}
  @order = :ascending
  @ors = []
end

Instance Attribute Details

#class_nameObject

Returns the value of attribute class_name.



7
8
9
# File 'lib/parse/query.rb', line 7

def class_name
  @class_name
end

#countObject

Returns the value of attribute count.



12
13
14
# File 'lib/parse/query.rb', line 12

def count
  @count
end

#includeObject

Returns the value of attribute include.



13
14
15
# File 'lib/parse/query.rb', line 13

def include
  @include
end

#limitObject

Returns the value of attribute limit.



10
11
12
# File 'lib/parse/query.rb', line 10

def limit
  @limit
end

#orderObject

Returns the value of attribute order.



9
10
11
# File 'lib/parse/query.rb', line 9

def order
  @order
end

#order_byObject

Returns the value of attribute order_by.



8
9
10
# File 'lib/parse/query.rb', line 8

def order_by
  @order_by
end

#skipObject

Returns the value of attribute skip.



11
12
13
# File 'lib/parse/query.rb', line 11

def skip
  @skip
end

#whereObject

Returns the value of attribute where.



6
7
8
# File 'lib/parse/query.rb', line 6

def where
  @where
end

Instance Method Details

#add_constraint(field, constraint) ⇒ Object

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
# File 'lib/parse/query.rb', line 22

def add_constraint(field, constraint)
  raise ArgumentError, "cannot add constraint to an $or query" if @ors.size > 0
  current = where[field]
  if current && current.is_a?(Hash) && constraint.is_a?(Hash)
    current.merge! constraint
  else
    where[field] = constraint
  end
end

#eq(field, value) ⇒ Object



44
45
46
47
# File 'lib/parse/query.rb', line 44

def eq(field, value)
  add_constraint field, Parse.pointerize_value(value)
  self
end

#exists(field, value = true) ⇒ Object



94
95
96
97
# File 'lib/parse/query.rb', line 94

def exists(field, value = true)
  add_constraint field, { "$exists" => value }
  self
end

#getObject



118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/parse/query.rb', line 118

def get
  uri   = Protocol.class_uri @class_name
  if @class_name == Parse::Protocol::CLASS_USER
    uri = Protocol.user_uri
  end
  query = { "where" => CGI.escape(where_as_json.to_json) }
  set_order(query)
  [:count, :limit, :skip, :include].each {|a| merge_attribute(a, query)}
  Parse.client.logger.info{"Parse query for #{uri} #{CGI.unescape(query.inspect)}"}
  response = Parse.client.request uri, :get, nil, query
  Parse.parse_json class_name, response
end

#greater_eq(field, value) ⇒ Object



74
75
76
77
# File 'lib/parse/query.rb', line 74

def greater_eq(field, value)
  add_constraint field, { "$gte" => Parse.pointerize_value(value) }
  self
end

#greater_than(field, value) ⇒ Object



69
70
71
72
# File 'lib/parse/query.rb', line 69

def greater_than(field, value)
  add_constraint field, { "$gt" => Parse.pointerize_value(value) }
  self
end

#in_query(field, query = nil) ⇒ Object



99
100
101
102
103
# File 'lib/parse/query.rb', line 99

def in_query(field, query=nil)
  query_hash = {Parse::Protocol::KEY_CLASS_NAME => query.class_name, "where" => query.where}
  add_constraint(field, "$inQuery" => query_hash)
  self
end

#includes(class_name) ⇒ Object

private :add_constraint



33
34
35
36
# File 'lib/parse/query.rb', line 33

def includes(class_name)
  @includes = class_name
  self
end

#less_eq(field, value) ⇒ Object



64
65
66
67
# File 'lib/parse/query.rb', line 64

def less_eq(field, value)
  add_constraint field, { "$lte" => Parse.pointerize_value(value) }
  self
end

#less_than(field, value) ⇒ Object



59
60
61
62
# File 'lib/parse/query.rb', line 59

def less_than(field, value)
  add_constraint field, { "$lt" => Parse.pointerize_value(value) }
  self
end

#not_eq(field, value) ⇒ Object



49
50
51
52
# File 'lib/parse/query.rb', line 49

def not_eq(field, value)
  add_constraint field, { "$ne" => Parse.pointerize_value(value) }
  self
end

#or(query) ⇒ Object

Raises:

  • (ArgumentError)


38
39
40
41
42
# File 'lib/parse/query.rb', line 38

def or(query)
  raise ArgumentError, "you must pass an entire #{self.class} to \#or" unless query.is_a?(self.class)
  @ors << query
  self
end

#regex(field, expression) ⇒ Object



54
55
56
57
# File 'lib/parse/query.rb', line 54

def regex(field, expression)
  add_constraint field, { "$regex" => expression }
  self
end


89
90
91
92
# File 'lib/parse/query.rb', line 89

def related_to(field,value)
  h = {"object" => Parse.pointerize_value(value), "key" => field}
  add_constraint("$relatedTo", h )
end

#value_in(field, values) ⇒ Object



79
80
81
82
# File 'lib/parse/query.rb', line 79

def value_in(field, values)
  add_constraint field, { "$in" => values.map { |v| Parse.pointerize_value(v) } }
  self
end

#value_not_in(field, values) ⇒ Object



84
85
86
87
# File 'lib/parse/query.rb', line 84

def value_not_in(field, values)
  add_constraint field, { "$nin" => values.map { |v| Parse.pointerize_value(v) } }
  self
end

#where_as_jsonObject



110
111
112
113
114
115
116
# File 'lib/parse/query.rb', line 110

def where_as_json
  if @ors.size > 0
    {"$or" => [self.where] + @ors.map{|query| query.where_as_json}}
  else
    @where
  end
end