parsecom 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -2
- data/lib/parse/client.rb +14 -16
- data/lib/parse/installation.rb +6 -0
- data/lib/parse/object.rb +16 -10
- data/lib/parse/pointer.rb +7 -6
- data/lib/parse/query.rb +23 -13
- data/lib/parse/relation.rb +22 -0
- data/lib/parse/role.rb +6 -0
- data/lib/parse/version.rb +1 -1
- data/lib/parsecom.rb +3 -0
- data/parsecom.gemspec +0 -1
- data/spec/parse_query_spec.rb +6 -15
- data/spec/spec_helper.rb +1 -1
- metadata +5 -2
data/README.md
CHANGED
@@ -132,8 +132,7 @@ If you want to update attributes without retrieving the object, you can use
|
|
132
132
|
the Parse::Client object for it.
|
133
133
|
|
134
134
|
```ruby
|
135
|
-
|
136
|
-
Parse::Client.default_client.update score, :score => 73453
|
135
|
+
Parse::Client.default.update :GaemScore, 'Ed1nuqPvcm', :score => 73453
|
137
136
|
```
|
138
137
|
|
139
138
|
### Deleting Objects
|
data/lib/parse/client.rb
CHANGED
@@ -7,7 +7,7 @@ module Parse
|
|
7
7
|
|
8
8
|
attr_accessor :http_client, :session_token, :master_key
|
9
9
|
|
10
|
-
def self.
|
10
|
+
def self.default
|
11
11
|
@@default_client ||= new
|
12
12
|
end
|
13
13
|
|
@@ -62,22 +62,20 @@ module Parse
|
|
62
62
|
@session_token = nil
|
63
63
|
end
|
64
64
|
|
65
|
-
def find
|
65
|
+
def find parse_class_name, object_id_or_conditions, opts={}
|
66
66
|
case object_id_or_conditions
|
67
67
|
when :all
|
68
|
-
find_by_query
|
68
|
+
find_by_query parse_class_name, opts
|
69
69
|
when String, Symbol
|
70
|
-
find_by_id
|
70
|
+
find_by_id parse_class_name, object_id_or_conditions, opts
|
71
71
|
when Hash
|
72
|
-
find_by_query
|
72
|
+
find_by_query parse_class_name, object_id_or_conditions
|
73
73
|
else
|
74
74
|
raise ArgumentError.new('the first argument should be a string, a symbol, or a hash.')
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
def find_by_id
|
79
|
-
parse_class_name = parse_class.is_a?(Parse::Object) \
|
80
|
-
? parse_class.parse_class_name : parse_class
|
78
|
+
def find_by_id parse_class_name, object_id, opts={}
|
81
79
|
call_api :get, "classes/#{parse_class_name}/#{object_id}" do |resp_body|
|
82
80
|
if opts.has_key? :include
|
83
81
|
included_keys = [opts[:include]].flatten
|
@@ -95,8 +93,8 @@ module Parse
|
|
95
93
|
end
|
96
94
|
end
|
97
95
|
|
98
|
-
def find_by_query
|
99
|
-
query = Query.new
|
96
|
+
def find_by_query parse_class_name, conditions
|
97
|
+
query = Query.new parse_class_name, self
|
100
98
|
query.limit conditions[:limit] if conditions.has_key? :limit
|
101
99
|
query.skip conditions[:skip] if conditions.has_key? :skip
|
102
100
|
query.count conditions[:count] if conditions.has_key? :count
|
@@ -128,20 +126,20 @@ module Parse
|
|
128
126
|
query.invoke
|
129
127
|
end
|
130
128
|
|
131
|
-
def create
|
132
|
-
call_api :post, "classes/#{
|
129
|
+
def create parse_class_name, values
|
130
|
+
call_api :post, "classes/#{parse_class_name}", values.to_json do |resp_body|
|
133
131
|
resp_body
|
134
132
|
end
|
135
133
|
end
|
136
134
|
|
137
|
-
def update
|
138
|
-
call_api :put, "classes/#{
|
135
|
+
def update parse_class_name, parse_object_id, values
|
136
|
+
call_api :put, "classes/#{parse_class_name}/#{parse_object_id}", values.to_json do |resp_body|
|
139
137
|
resp_body
|
140
138
|
end
|
141
139
|
end
|
142
140
|
|
143
|
-
def delete
|
144
|
-
call_api :delete, "classes/#{
|
141
|
+
def delete parse_class_name, parse_object_id
|
142
|
+
call_api :delete, "classes/#{parse_class_name}/#{parse_object_id}" do |resp_body|
|
145
143
|
resp_body
|
146
144
|
end
|
147
145
|
end
|
data/lib/parse/object.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# coding:utf-8
|
2
2
|
module Parse
|
3
3
|
RESERVED_PARSE_CLASS = {
|
4
|
-
'_User' => 'Parse::User'
|
4
|
+
'_User' => 'Parse::User',
|
5
|
+
'_Role' => 'Parse::Role',
|
6
|
+
'_Installation' => 'Parse::Installation'
|
5
7
|
}
|
6
8
|
|
7
9
|
class Object
|
@@ -33,11 +35,11 @@ module Parse
|
|
33
35
|
end
|
34
36
|
|
35
37
|
def parse_client
|
36
|
-
@parse_client ||= Parse::Client.
|
38
|
+
@parse_client ||= Parse::Client.default
|
37
39
|
end
|
38
40
|
|
39
41
|
def find object_id_or_conditions, opts={}
|
40
|
-
results = [parse_client.find(self, object_id_or_conditions, opts)].flatten
|
42
|
+
results = [parse_client.find(self.parse_class_name, object_id_or_conditions, opts)].flatten
|
41
43
|
results.map! {|hash| self.new hash}
|
42
44
|
end
|
43
45
|
|
@@ -47,7 +49,7 @@ module Parse
|
|
47
49
|
|
48
50
|
# TODO: need refactoring
|
49
51
|
def find! object_id_or_conditions, opts={}
|
50
|
-
results = [parse_client.find!(self, object_id_or_conditions, opts)].flatten
|
52
|
+
results = [parse_client.find!(self.parse_class_name, object_id_or_conditions, opts)].flatten
|
51
53
|
results.map! {|hash| self.new hash}
|
52
54
|
end
|
53
55
|
|
@@ -90,7 +92,9 @@ module Parse
|
|
90
92
|
when 'File'
|
91
93
|
Parse::File.new v
|
92
94
|
when 'Pointer'
|
93
|
-
Parse::Pointer.new
|
95
|
+
Parse::Pointer.new v, self
|
96
|
+
when 'Relation'
|
97
|
+
Parse::Relation.new self, k, v
|
94
98
|
else
|
95
99
|
v
|
96
100
|
end
|
@@ -141,9 +145,8 @@ module Parse
|
|
141
145
|
check_deleted!
|
142
146
|
hash = string_keyed_hash hash
|
143
147
|
@updated_hash.update hash
|
144
|
-
#parse_client.create(self, @updated_hash).tap do |response|
|
145
148
|
method = use_master_key ? :create! : :create
|
146
|
-
parse_client.send(method, self, @updated_hash).tap do |response|
|
149
|
+
parse_client.send(method, self.parse_class_name, @updated_hash).tap do |response|
|
147
150
|
@parse_object_id = response['objectId']
|
148
151
|
@created_at = Date.parse response['createdAt']
|
149
152
|
@updated_at = @created_at
|
@@ -162,7 +165,7 @@ module Parse
|
|
162
165
|
hash = string_keyed_hash hash
|
163
166
|
#parse_client.update(self, hash).tap do |response|
|
164
167
|
method = use_master_key ? :update! : :update
|
165
|
-
parse_client.send(method,
|
168
|
+
parse_client.send(method, parse_class_name, parse_object_id, hash).tap do |response|
|
166
169
|
@updated_at = Date.parse response['updatedAt']
|
167
170
|
@raw_hash.update @updated_hash
|
168
171
|
@updated_hash.clear
|
@@ -176,9 +179,8 @@ module Parse
|
|
176
179
|
def delete use_master_key=false
|
177
180
|
raise 'You cannot delete new object' if new?
|
178
181
|
check_deleted!
|
179
|
-
#parse_client.delete(self).tap do |response|
|
180
182
|
method = use_master_key ? :delete! : :delete
|
181
|
-
parse_client.send(method,
|
183
|
+
parse_client.send(method, parse_class_name, parse_object_id).tap do |response|
|
182
184
|
@deleted = true
|
183
185
|
end
|
184
186
|
end
|
@@ -214,6 +216,10 @@ module Parse
|
|
214
216
|
@updated_hash[name] = value
|
215
217
|
end
|
216
218
|
|
219
|
+
def to_pointer
|
220
|
+
Pointer.new 'className' => parse_class_name, 'objectId' => parse_object_id
|
221
|
+
end
|
222
|
+
|
217
223
|
def to_s
|
218
224
|
"<#{parse_class_name}: #{{}.update(@raw_hash).update(@updated_hash).to_s}>"
|
219
225
|
end
|
data/lib/parse/pointer.rb
CHANGED
@@ -3,9 +3,9 @@ module Parse
|
|
3
3
|
class Pointer
|
4
4
|
attr_reader :object
|
5
5
|
|
6
|
-
def initialize
|
7
|
-
@parent_object = parent
|
6
|
+
def initialize hash, parent=nil
|
8
7
|
@raw_hash = hash
|
8
|
+
@parent_object = parent
|
9
9
|
|
10
10
|
if @raw_hash.has_key? 'body'
|
11
11
|
@object = pointed_parse_class.new @raw_hash['body']
|
@@ -13,10 +13,11 @@ module Parse
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def load
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
@object ||= pointed_parse_class.find_by_id @raw_hash['objectId']
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_json
|
20
|
+
%Q|{"__type":"Pointer","className":"#{@raw_hash['className']}","objectId":"#{@raw_hash['objectId']}"}|
|
20
21
|
end
|
21
22
|
|
22
23
|
private
|
data/lib/parse/query.rb
CHANGED
@@ -3,26 +3,19 @@ module Parse
|
|
3
3
|
attr_reader :keys
|
4
4
|
attr_accessor :parse_class_name, :parse_client
|
5
5
|
|
6
|
-
def initialize
|
7
|
-
|
8
|
-
|
9
|
-
@parse_class_name = parse_class_or_name.parse_class_name
|
10
|
-
@parse_client = parse_class_or_name.parse_client
|
11
|
-
else
|
12
|
-
@parse_class = nil
|
13
|
-
@parse_class_name = parse_class_or_name.to_s
|
14
|
-
@parse_client = Parse::Client.default_client
|
15
|
-
end
|
6
|
+
def initialize parse_class_name=nil, parse_client=nil
|
7
|
+
@parse_class_name = parse_class_name.to_s
|
8
|
+
@parse_client = parse_client || Parse::Client.default
|
16
9
|
@limit = nil
|
17
10
|
@skip = nil
|
18
11
|
@count = false
|
19
|
-
@where = []
|
12
|
+
@where = [] # array of Conditions
|
20
13
|
@order = []
|
21
14
|
@include = []
|
22
15
|
@keys = []
|
23
16
|
end
|
24
17
|
|
25
|
-
def
|
18
|
+
def run &block
|
26
19
|
block = proc do |body|
|
27
20
|
# TODO: should handle error
|
28
21
|
body['results']
|
@@ -32,7 +25,7 @@ module Parse
|
|
32
25
|
: "classes/#{@parse_class_name}"
|
33
26
|
@parse_client.call_api :get, "#{endpoint}?#{to_params}", nil, &block
|
34
27
|
end
|
35
|
-
alias run
|
28
|
+
alias invoke run
|
36
29
|
|
37
30
|
def limit val=nil
|
38
31
|
if val
|
@@ -143,6 +136,12 @@ module Parse
|
|
143
136
|
end
|
144
137
|
alias _or_ or_condition
|
145
138
|
|
139
|
+
def related_to column_name, pointer
|
140
|
+
RelatedToCondition.new(column_name, pointer).tap do |condition|
|
141
|
+
@where.push condition
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
146
145
|
class Subquery < Query
|
147
146
|
attr_accessor :parent
|
148
147
|
|
@@ -283,6 +282,17 @@ module Parse
|
|
283
282
|
%Q|"$or":[#{@conditions.map {|c| "{#{c.to_s}}"}.join ','}]|
|
284
283
|
end
|
285
284
|
end
|
285
|
+
|
286
|
+
class RelatedToCondition
|
287
|
+
def initialize column_name, pointer
|
288
|
+
@column_name = column_name
|
289
|
+
@pointer = pointer
|
290
|
+
end
|
291
|
+
|
292
|
+
def to_s
|
293
|
+
%Q|"$relatedTo":{"object":#{@pointer.to_json},"key":"#{@column_name}"}|
|
294
|
+
end
|
295
|
+
end
|
286
296
|
end
|
287
297
|
|
288
298
|
def Query parse_class_name=nil
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
module Parse
|
3
|
+
class Relation
|
4
|
+
def initialize parent, column_name, hash
|
5
|
+
@parent_object = parent
|
6
|
+
@column_name = column_name
|
7
|
+
@raw_hash = hash
|
8
|
+
end
|
9
|
+
|
10
|
+
def load parse_client=Parse::Client.default
|
11
|
+
unless @objects
|
12
|
+
pointer = @parent_object.to_pointer
|
13
|
+
key = @column_name
|
14
|
+
related_class = Parse::Object @raw_hash['className']
|
15
|
+
@objects = related_class.find :where => proc {
|
16
|
+
related_to key, pointer
|
17
|
+
}
|
18
|
+
end
|
19
|
+
@objects
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/parse/role.rb
ADDED
data/lib/parse/version.rb
CHANGED
data/lib/parsecom.rb
CHANGED
data/parsecom.gemspec
CHANGED
@@ -14,7 +14,6 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.license = "MIT"
|
15
15
|
|
16
16
|
gem.files = `git ls-files`.split($/)
|
17
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
18
|
gem.require_paths = ["lib"]
|
20
19
|
|
data/spec/parse_query_spec.rb
CHANGED
@@ -108,21 +108,12 @@ describe Parse::Query, 'when it builds conditions' do
|
|
108
108
|
query.to_params.should have_params('where' => '{"post":{"$notInQuery":{"where":{"image":{"$exists":true}},"className":"Post"}}}')
|
109
109
|
query.where.clear
|
110
110
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
# # "objectId":"8TOXdXf3tz"
|
118
|
-
# # },
|
119
|
-
# # "key":"likes"
|
120
|
-
# # }
|
121
|
-
# #}
|
122
|
-
# # TODO
|
123
|
-
# end
|
124
|
-
# query.to_params.should == 'where={}'
|
125
|
-
# query.where.clear
|
111
|
+
query.where do
|
112
|
+
pointer = Parse::Pointer.new('className' => 'Post', 'objectId' => '8TOXdXf3tz')
|
113
|
+
related_to :likes, pointer
|
114
|
+
end
|
115
|
+
query.to_params.should have_params('where' => '{"$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}')
|
116
|
+
query.where.clear
|
126
117
|
|
127
118
|
query.where do
|
128
119
|
column(:wins).gt(150).or column(:wins).lt(5)
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parsecom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -77,9 +77,12 @@ files:
|
|
77
77
|
- lib/parse/ext/string.rb
|
78
78
|
- lib/parse/file.rb
|
79
79
|
- lib/parse/http_client.rb
|
80
|
+
- lib/parse/installation.rb
|
80
81
|
- lib/parse/object.rb
|
81
82
|
- lib/parse/pointer.rb
|
82
83
|
- lib/parse/query.rb
|
84
|
+
- lib/parse/relation.rb
|
85
|
+
- lib/parse/role.rb
|
83
86
|
- lib/parse/user.rb
|
84
87
|
- lib/parse/version.rb
|
85
88
|
- lib/parsecom.rb
|