parse-ruby-client 0.1.10 → 0.1.11
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 +21 -1
- data/VERSION +1 -1
- data/features.md +135 -0
- data/fixtures/vcr_cassettes/test_array_add_relation.yml +321 -0
- data/fixtures/vcr_cassettes/test_include.yml +180 -0
- data/lib/parse/datatypes.rb +9 -1
- data/lib/parse/error.rb +4 -2
- data/lib/parse/object.rb +16 -1
- data/lib/parse/protocol.rb +4 -3
- data/lib/parse/query.rb +8 -3
- data/lib/parse/util.rb +1 -2
- data/parse-ruby-client.gemspec +5 -2
- data/test/test_object.rb +18 -0
- data/test/test_query.rb +29 -0
- metadata +6 -3
data/README.md
CHANGED
@@ -19,7 +19,9 @@ This currently depends on the gems 'json' and 'patron' for JSON support and HTTP
|
|
19
19
|
|
20
20
|
## Installation
|
21
21
|
|
22
|
-
|
22
|
+
[](http://badge.fury.io/rb/parse-ruby-client)
|
23
|
+
|
24
|
+
`gem "parse-ruby-client"`
|
23
25
|
|
24
26
|
---
|
25
27
|
|
@@ -148,6 +150,24 @@ Parse::Query.new("GameScore") \
|
|
148
150
|
|
149
151
|
```
|
150
152
|
|
153
|
+
### Relational Data
|
154
|
+
|
155
|
+
```ruby
|
156
|
+
post = Parse::Object.new "Post"
|
157
|
+
post.save
|
158
|
+
|
159
|
+
comment = Parse::Object.new "Comment"
|
160
|
+
comment.save
|
161
|
+
|
162
|
+
post.array_add_relation("comments", comment.pointer)
|
163
|
+
post.save
|
164
|
+
|
165
|
+
q = Parse::Query.new("Comment")
|
166
|
+
q.related_to("comments", post.pointer)
|
167
|
+
comments = q.get
|
168
|
+
assert_equal comments.first["objectId"], comment["objectId"]
|
169
|
+
```
|
170
|
+
|
151
171
|
## Push Notifications
|
152
172
|
|
153
173
|
```ruby
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.11
|
data/features.md
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
## Summary
|
2
|
+
|
3
|
+
parse-ruby-client lets you interact with Parse using Ruby. There are many uses. For example:
|
4
|
+
|
5
|
+
- A webserver can show data from Parse on a website.
|
6
|
+
- You can upload large amounts of data that will later be consumed in a mobile app.
|
7
|
+
- You can download recent data to run your own custom analytics.
|
8
|
+
- You can export all of your data if you no longer want to use Parse.
|
9
|
+
|
10
|
+
### Quick Reference
|
11
|
+
|
12
|
+
#### Installation
|
13
|
+
|
14
|
+
`gem install parse-ruby-client` or add `gem "parse-ruby-client"` to your `Gemfile.`
|
15
|
+
|
16
|
+
#### Configuration
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
require 'parse-ruby-client'
|
20
|
+
|
21
|
+
Parse.init :application_id => "<your_app_id>",
|
22
|
+
:api_key => "<your_api_key>"
|
23
|
+
```
|
24
|
+
|
25
|
+
## Objects
|
26
|
+
|
27
|
+
The design philosophy behind parse-ruby-client is to stay out of the way as much as possible. Parse Objects, at the most basic level, act like Ruby `Hash` objects with Parse-specific methods tacked on.
|
28
|
+
|
29
|
+
### Creating Objects
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
game_score = Parse::Object.new("GameScore")
|
33
|
+
game_score["score"] = 1337
|
34
|
+
game_score["playerName"] = "Sean Plott"
|
35
|
+
game_score["cheatMode"] = false
|
36
|
+
result = game_score.save
|
37
|
+
puts result
|
38
|
+
```
|
39
|
+
|
40
|
+
This will return:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
{"score"=>1337,
|
44
|
+
"playerName"=>"Sean Plott",
|
45
|
+
"cheatMode"=>false,
|
46
|
+
"createdAt"=>"2013-01-19T21:01:33.562Z",
|
47
|
+
"objectId"=>"GeqPWJdNqp"}
|
48
|
+
```
|
49
|
+
|
50
|
+
### Retrieving Objects
|
51
|
+
|
52
|
+
The easiest way to retrieve Objects is with `Parse::Query`:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
game_score_query = Parse::Query.new("GameScore")
|
56
|
+
game_score_query.eq("objectId", "GeqPWJdNqp")
|
57
|
+
game_score = game_score_query.get
|
58
|
+
puts game_score
|
59
|
+
```
|
60
|
+
|
61
|
+
This will return:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
[{"score"=>1337,
|
65
|
+
"playerName"=>"Sean Plott",
|
66
|
+
"createdAt"=>"2013-01-19T21:01:33.562Z",
|
67
|
+
"updatedAt"=>"2013-01-19T21:01:33.562Z",
|
68
|
+
"objectId"=>"GeqPWJdNqp"}]
|
69
|
+
```
|
70
|
+
|
71
|
+
Notice that this is an `Array` of results. For more information on queries, see TODO.
|
72
|
+
|
73
|
+
When retrieving objects that have pointers to children, you can fetch child objects by setting the `include` attribute. For instance, to fetch the object pointed to by the "game" key:
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
game_score_query = Parse::Query.new("GameScore")
|
77
|
+
game_score_query.eq("objectId", "GeqPWJdNqp")
|
78
|
+
game_score_query.include = "game"
|
79
|
+
game_score = game_score_query.get
|
80
|
+
```
|
81
|
+
|
82
|
+
You can include multiple children pointers by separating key names by commas:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
game_score_query.include = "game,genre"
|
86
|
+
```
|
87
|
+
|
88
|
+
### Updating Objects
|
89
|
+
|
90
|
+
To change the data on an object that already exists, just call `Parse::Object#save` on it. Any keys you don't specify will remain unchanged, so you can update just a subset of the object's data. For example, if we wanted to change the score field of our object:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
game_score = Parse::Query.new("GameScore").eq("objectId", "GeqPWJdNqp").get.first
|
94
|
+
game_score["score"] = 73453
|
95
|
+
result = game_score.save
|
96
|
+
puts result
|
97
|
+
```
|
98
|
+
|
99
|
+
This will return:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
{"score"=>73453,
|
103
|
+
"playerName"=>"Sean Plott",
|
104
|
+
"createdAt"=>"2013-01-19T21:01:33.562Z",
|
105
|
+
"updatedAt"=>"2013-01-19T21:16:34.395Z",
|
106
|
+
"objectId"=>"GeqPWJdNqp"}
|
107
|
+
```
|
108
|
+
|
109
|
+
#### Counters
|
110
|
+
|
111
|
+
To help with storing counter-type data, Parse provides the ability to atomically increment (or decrement) any number field. So, we can increment the score field like so:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
game_score = Parse::Query.new("GameScore").eq("objectId", "GeqPWJdNqp").get.first
|
115
|
+
game_score["score"] = Parse::Increment.new(1)
|
116
|
+
game_score.save
|
117
|
+
```
|
118
|
+
|
119
|
+
You can also use `Parse::Decrement.new(amount)`.
|
120
|
+
|
121
|
+
#### Arrays
|
122
|
+
|
123
|
+
## Queries
|
124
|
+
|
125
|
+
## Users
|
126
|
+
|
127
|
+
## Roles
|
128
|
+
|
129
|
+
## Files
|
130
|
+
|
131
|
+
## Push Notifications
|
132
|
+
|
133
|
+
## Installations
|
134
|
+
|
135
|
+
## Geopoints
|
@@ -0,0 +1,321 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.parse.com/1/classes/Post
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! '{}'
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
Accept:
|
13
|
+
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- Parse for Ruby, 0.0
|
16
|
+
X-Parse-Master-Key:
|
17
|
+
- ''
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- PsXOTylMvpCsyhx7njRh06BzSsehrwywuYwD9UiN
|
20
|
+
X-Parse-Application-Id:
|
21
|
+
- X4gXxFjSqK9VHZZPFR32Cvp5wntIhDI5TESO18jB
|
22
|
+
X-Parse-Session-Token:
|
23
|
+
- ''
|
24
|
+
Expect:
|
25
|
+
- ''
|
26
|
+
response:
|
27
|
+
status:
|
28
|
+
code: 201
|
29
|
+
message: !binary |-
|
30
|
+
Q3JlYXRlZA==
|
31
|
+
headers:
|
32
|
+
!binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
|
33
|
+
- !binary |-
|
34
|
+
Kg==
|
35
|
+
!binary "QWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2Q=":
|
36
|
+
- !binary |-
|
37
|
+
Kg==
|
38
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
39
|
+
- !binary |-
|
40
|
+
bm8tY2FjaGU=
|
41
|
+
!binary "Q29udGVudC1UeXBl":
|
42
|
+
- !binary |-
|
43
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
44
|
+
!binary "RGF0ZQ==":
|
45
|
+
- !binary |-
|
46
|
+
V2VkLCAxNiBKYW4gMjAxMyAxNDo0MDoxOCBHTVQ=
|
47
|
+
!binary "TG9jYXRpb24=":
|
48
|
+
- !binary |-
|
49
|
+
aHR0cHM6Ly9hcGkucGFyc2UuY29tLzEvY2xhc3Nlcy9Qb3N0L1M2T2lZbzdy
|
50
|
+
bkM=
|
51
|
+
!binary "U2VydmVy":
|
52
|
+
- !binary |-
|
53
|
+
bmdpbngvMS4yLjI=
|
54
|
+
!binary "U2V0LUNvb2tpZQ==":
|
55
|
+
- !binary |-
|
56
|
+
X3BhcnNlX3Nlc3Npb249QkFoN0Jra2lEM05sYzNOcGIyNWZhV1FHT2daRlJp
|
57
|
+
SWxOakk1WldVME1tVTVaV0l3TURGa1pESXdNek00T1dKaE16TTROMlExTm1Z
|
58
|
+
JTNELS01OGMwZmI1MjNhMmY0NTgwMmMyNmI2MDY0MzVmZjMyNjhjMTBkNDQ1
|
59
|
+
OyBkb21haW49LnBhcnNlLmNvbTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTYt
|
60
|
+
SmFuLTIwMjMgMTQ6NDA6MTggR01UOyBzZWN1cmU7IEh0dHBPbmx5
|
61
|
+
!binary "U3RhdHVz":
|
62
|
+
- !binary |-
|
63
|
+
MjAxIENyZWF0ZWQ=
|
64
|
+
!binary "WC1SdW50aW1l":
|
65
|
+
- !binary |-
|
66
|
+
MC4xNzU4OTc=
|
67
|
+
!binary "WC1VYS1Db21wYXRpYmxl":
|
68
|
+
- !binary |-
|
69
|
+
SUU9RWRnZSxjaHJvbWU9MQ==
|
70
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
71
|
+
- !binary |-
|
72
|
+
NjQ=
|
73
|
+
!binary "Q29ubmVjdGlvbg==":
|
74
|
+
- !binary |-
|
75
|
+
a2VlcC1hbGl2ZQ==
|
76
|
+
body:
|
77
|
+
encoding: ASCII-8BIT
|
78
|
+
string: !binary |-
|
79
|
+
eyJjcmVhdGVkQXQiOiIyMDEzLTAxLTE2VDE0OjQwOjE4LjUyN1oiLCJvYmpl
|
80
|
+
Y3RJZCI6IlM2T2lZbzdybkMifQ==
|
81
|
+
http_version:
|
82
|
+
recorded_at: Wed, 16 Jan 2013 14:40:18 GMT
|
83
|
+
- request:
|
84
|
+
method: post
|
85
|
+
uri: https://api.parse.com/1/classes/Comment
|
86
|
+
body:
|
87
|
+
encoding: UTF-8
|
88
|
+
string: ! '{}'
|
89
|
+
headers:
|
90
|
+
Content-Type:
|
91
|
+
- application/json
|
92
|
+
Accept:
|
93
|
+
- application/json
|
94
|
+
User-Agent:
|
95
|
+
- Parse for Ruby, 0.0
|
96
|
+
X-Parse-Master-Key:
|
97
|
+
- ''
|
98
|
+
X-Parse-Rest-Api-Key:
|
99
|
+
- PsXOTylMvpCsyhx7njRh06BzSsehrwywuYwD9UiN
|
100
|
+
X-Parse-Application-Id:
|
101
|
+
- X4gXxFjSqK9VHZZPFR32Cvp5wntIhDI5TESO18jB
|
102
|
+
X-Parse-Session-Token:
|
103
|
+
- ''
|
104
|
+
Expect:
|
105
|
+
- ''
|
106
|
+
response:
|
107
|
+
status:
|
108
|
+
code: 201
|
109
|
+
message: !binary |-
|
110
|
+
Q3JlYXRlZA==
|
111
|
+
headers:
|
112
|
+
!binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
|
113
|
+
- !binary |-
|
114
|
+
Kg==
|
115
|
+
!binary "QWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2Q=":
|
116
|
+
- !binary |-
|
117
|
+
Kg==
|
118
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
119
|
+
- !binary |-
|
120
|
+
bm8tY2FjaGU=
|
121
|
+
!binary "Q29udGVudC1UeXBl":
|
122
|
+
- !binary |-
|
123
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
124
|
+
!binary "RGF0ZQ==":
|
125
|
+
- !binary |-
|
126
|
+
V2VkLCAxNiBKYW4gMjAxMyAxNDo0MDoxOCBHTVQ=
|
127
|
+
!binary "TG9jYXRpb24=":
|
128
|
+
- !binary |-
|
129
|
+
aHR0cHM6Ly9hcGkucGFyc2UuY29tLzEvY2xhc3Nlcy9Db21tZW50L2FQRVRX
|
130
|
+
WWZvQmk=
|
131
|
+
!binary "U2VydmVy":
|
132
|
+
- !binary |-
|
133
|
+
bmdpbngvMS4yLjI=
|
134
|
+
!binary "U2V0LUNvb2tpZQ==":
|
135
|
+
- !binary |-
|
136
|
+
X3BhcnNlX3Nlc3Npb249QkFoN0Jra2lEM05sYzNOcGIyNWZhV1FHT2daRlJp
|
137
|
+
SWxaVGMxT1RObFpUVTRaVFZrWWpsak9EazVPV1JpWVRNMllqa3hNMkkzTlRZ
|
138
|
+
JTNELS05Zjg4MGNmNWU4MTZkM2NiZGQ2MmUwMDUzYjRhZTJmYjkzNmFhOGYx
|
139
|
+
OyBkb21haW49LnBhcnNlLmNvbTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTYt
|
140
|
+
SmFuLTIwMjMgMTQ6NDA6MTggR01UOyBzZWN1cmU7IEh0dHBPbmx5
|
141
|
+
!binary "U3RhdHVz":
|
142
|
+
- !binary |-
|
143
|
+
MjAxIENyZWF0ZWQ=
|
144
|
+
!binary "WC1SdW50aW1l":
|
145
|
+
- !binary |-
|
146
|
+
MC4xNjYyNzE=
|
147
|
+
!binary "WC1VYS1Db21wYXRpYmxl":
|
148
|
+
- !binary |-
|
149
|
+
SUU9RWRnZSxjaHJvbWU9MQ==
|
150
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
151
|
+
- !binary |-
|
152
|
+
NjQ=
|
153
|
+
!binary "Q29ubmVjdGlvbg==":
|
154
|
+
- !binary |-
|
155
|
+
a2VlcC1hbGl2ZQ==
|
156
|
+
body:
|
157
|
+
encoding: ASCII-8BIT
|
158
|
+
string: !binary |-
|
159
|
+
eyJjcmVhdGVkQXQiOiIyMDEzLTAxLTE2VDE0OjQwOjE4LjczN1oiLCJvYmpl
|
160
|
+
Y3RJZCI6ImFQRVRXWWZvQmkifQ==
|
161
|
+
http_version:
|
162
|
+
recorded_at: Wed, 16 Jan 2013 14:40:18 GMT
|
163
|
+
- request:
|
164
|
+
method: put
|
165
|
+
uri: https://api.parse.com/1/classes/Post/S6OiYo7rnC
|
166
|
+
body:
|
167
|
+
encoding: UTF-8
|
168
|
+
string: ! '{"comments":{"__op":"AddRelation","objects":[{"__type":"Pointer","className":"Comment","objectId":"aPETWYfoBi"}]}}'
|
169
|
+
headers:
|
170
|
+
Content-Type:
|
171
|
+
- application/json
|
172
|
+
Accept:
|
173
|
+
- application/json
|
174
|
+
User-Agent:
|
175
|
+
- Parse for Ruby, 0.0
|
176
|
+
X-Parse-Master-Key:
|
177
|
+
- ''
|
178
|
+
X-Parse-Rest-Api-Key:
|
179
|
+
- PsXOTylMvpCsyhx7njRh06BzSsehrwywuYwD9UiN
|
180
|
+
X-Parse-Application-Id:
|
181
|
+
- X4gXxFjSqK9VHZZPFR32Cvp5wntIhDI5TESO18jB
|
182
|
+
X-Parse-Session-Token:
|
183
|
+
- ''
|
184
|
+
Expect:
|
185
|
+
- ''
|
186
|
+
response:
|
187
|
+
status:
|
188
|
+
code: 200
|
189
|
+
message: !binary |-
|
190
|
+
T0s=
|
191
|
+
headers:
|
192
|
+
!binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
|
193
|
+
- !binary |-
|
194
|
+
Kg==
|
195
|
+
!binary "QWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2Q=":
|
196
|
+
- !binary |-
|
197
|
+
Kg==
|
198
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
199
|
+
- !binary |-
|
200
|
+
bWF4LWFnZT0wLCBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGU=
|
201
|
+
!binary "Q29udGVudC1UeXBl":
|
202
|
+
- !binary |-
|
203
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
204
|
+
!binary "RGF0ZQ==":
|
205
|
+
- !binary |-
|
206
|
+
V2VkLCAxNiBKYW4gMjAxMyAxNDo0MDoxOSBHTVQ=
|
207
|
+
!binary "RXRhZw==":
|
208
|
+
- !binary |-
|
209
|
+
ImRkYWZhMDJhMjM4MjNkZWI4ZTM0YTI0ODk2NjllODM2Ig==
|
210
|
+
!binary "U2VydmVy":
|
211
|
+
- !binary |-
|
212
|
+
bmdpbngvMS4yLjI=
|
213
|
+
!binary "U2V0LUNvb2tpZQ==":
|
214
|
+
- !binary |-
|
215
|
+
X3BhcnNlX3Nlc3Npb249QkFoN0Jra2lEM05sYzNOcGIyNWZhV1FHT2daRlJp
|
216
|
+
SWxORGN6T1dWaU1qUXlNVFptT1dZME9EbG1NRE0wTldFeVpUZzJNbVptTlRB
|
217
|
+
JTNELS0wN2MyOWZiYjQwYTY0MzllNGQ2ZTk3ZmNiODg1OGYxYzYyNTJlNzJi
|
218
|
+
OyBkb21haW49LnBhcnNlLmNvbTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTYt
|
219
|
+
SmFuLTIwMjMgMTQ6NDA6MTkgR01UOyBzZWN1cmU7IEh0dHBPbmx5
|
220
|
+
!binary "U3RhdHVz":
|
221
|
+
- !binary |-
|
222
|
+
MjAwIE9L
|
223
|
+
!binary "WC1SdW50aW1l":
|
224
|
+
- !binary |-
|
225
|
+
MC4zMzQxMjU=
|
226
|
+
!binary "WC1VYS1Db21wYXRpYmxl":
|
227
|
+
- !binary |-
|
228
|
+
SUU9RWRnZSxjaHJvbWU9MQ==
|
229
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
230
|
+
- !binary |-
|
231
|
+
NDA=
|
232
|
+
!binary "Q29ubmVjdGlvbg==":
|
233
|
+
- !binary |-
|
234
|
+
a2VlcC1hbGl2ZQ==
|
235
|
+
body:
|
236
|
+
encoding: ASCII-8BIT
|
237
|
+
string: !binary |-
|
238
|
+
eyJ1cGRhdGVkQXQiOiIyMDEzLTAxLTE2VDE0OjQwOjE4Ljk3N1oifQ==
|
239
|
+
http_version:
|
240
|
+
recorded_at: Wed, 16 Jan 2013 14:40:19 GMT
|
241
|
+
- request:
|
242
|
+
method: get
|
243
|
+
uri: https://api.parse.com/1/classes/Comment?where=%7B%22$relatedTo%22:%7B%22object%22:%7B%22__type%22:%22Pointer%22,%22className%22:%22Post%22,%22objectId%22:%22S6OiYo7rnC%22%7D,%22key%22:%22comments%22%7D%7D
|
244
|
+
body:
|
245
|
+
encoding: US-ASCII
|
246
|
+
string: ''
|
247
|
+
headers:
|
248
|
+
Content-Type:
|
249
|
+
- application/json
|
250
|
+
Accept:
|
251
|
+
- application/json
|
252
|
+
User-Agent:
|
253
|
+
- Parse for Ruby, 0.0
|
254
|
+
X-Parse-Master-Key:
|
255
|
+
- ''
|
256
|
+
X-Parse-Rest-Api-Key:
|
257
|
+
- PsXOTylMvpCsyhx7njRh06BzSsehrwywuYwD9UiN
|
258
|
+
X-Parse-Application-Id:
|
259
|
+
- X4gXxFjSqK9VHZZPFR32Cvp5wntIhDI5TESO18jB
|
260
|
+
X-Parse-Session-Token:
|
261
|
+
- ''
|
262
|
+
Expect:
|
263
|
+
- ''
|
264
|
+
response:
|
265
|
+
status:
|
266
|
+
code: 200
|
267
|
+
message: !binary |-
|
268
|
+
T0s=
|
269
|
+
headers:
|
270
|
+
!binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
|
271
|
+
- !binary |-
|
272
|
+
Kg==
|
273
|
+
!binary "QWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2Q=":
|
274
|
+
- !binary |-
|
275
|
+
Kg==
|
276
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
277
|
+
- !binary |-
|
278
|
+
bWF4LWFnZT0wLCBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGU=
|
279
|
+
!binary "Q29udGVudC1UeXBl":
|
280
|
+
- !binary |-
|
281
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
282
|
+
!binary "RGF0ZQ==":
|
283
|
+
- !binary |-
|
284
|
+
V2VkLCAxNiBKYW4gMjAxMyAxNDo0MDoyMCBHTVQ=
|
285
|
+
!binary "RXRhZw==":
|
286
|
+
- !binary |-
|
287
|
+
IjY5OTYyM2M3NTY5ZDk0MzA4OTVjMDE1NmRhNjhlOWFlIg==
|
288
|
+
!binary "U2VydmVy":
|
289
|
+
- !binary |-
|
290
|
+
bmdpbngvMS4yLjI=
|
291
|
+
!binary "U2V0LUNvb2tpZQ==":
|
292
|
+
- !binary |-
|
293
|
+
X3BhcnNlX3Nlc3Npb249QkFoN0Jra2lEM05sYzNOcGIyNWZhV1FHT2daRlJp
|
294
|
+
SWxObVEyT1ROalpUQTBPV0U0WWpVNE5Ea3hOakUzTURJeU9EWTFOVFptTW1F
|
295
|
+
JTNELS0xYmM5MzE0Nzk0OTE5NmZmOGI2YmNkZjliNTM4ZWIyNzk1YTY3NjEy
|
296
|
+
OyBkb21haW49LnBhcnNlLmNvbTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTYt
|
297
|
+
SmFuLTIwMjMgMTQ6NDA6MjAgR01UOyBzZWN1cmU7IEh0dHBPbmx5
|
298
|
+
!binary "U3RhdHVz":
|
299
|
+
- !binary |-
|
300
|
+
MjAwIE9L
|
301
|
+
!binary "WC1SdW50aW1l":
|
302
|
+
- !binary |-
|
303
|
+
MC42ODY4Mzg=
|
304
|
+
!binary "WC1VYS1Db21wYXRpYmxl":
|
305
|
+
- !binary |-
|
306
|
+
SUU9RWRnZSxjaHJvbWU9MQ==
|
307
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
308
|
+
- !binary |-
|
309
|
+
MTE3
|
310
|
+
!binary "Q29ubmVjdGlvbg==":
|
311
|
+
- !binary |-
|
312
|
+
a2VlcC1hbGl2ZQ==
|
313
|
+
body:
|
314
|
+
encoding: ASCII-8BIT
|
315
|
+
string: !binary |-
|
316
|
+
eyJyZXN1bHRzIjpbeyJjcmVhdGVkQXQiOiIyMDEzLTAxLTE2VDE0OjQwOjE4
|
317
|
+
LjczN1oiLCJ1cGRhdGVkQXQiOiIyMDEzLTAxLTE2VDE0OjQwOjE4LjczN1oi
|
318
|
+
LCJvYmplY3RJZCI6ImFQRVRXWWZvQmkifV19
|
319
|
+
http_version:
|
320
|
+
recorded_at: Wed, 16 Jan 2013 14:40:20 GMT
|
321
|
+
recorded_with: VCR 2.0.1
|
@@ -0,0 +1,180 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.parse.com/1/classes/Post
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: "{\"title\":\"foo\"}"
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
Accept:
|
13
|
+
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- Parse for Ruby, 0.0
|
16
|
+
X-Parse-Master-Key:
|
17
|
+
- ""
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- jYdptjS76YHikuIFfJEgHD8UMIjH6cp2rWz4fo2C
|
20
|
+
X-Parse-Application-Id:
|
21
|
+
- hnJRtntbYPvWfjqcqLZsdFaOKT0F3SfNU7Kc7woN
|
22
|
+
X-Parse-Session-Token:
|
23
|
+
- ""
|
24
|
+
Expect:
|
25
|
+
- ""
|
26
|
+
response:
|
27
|
+
status:
|
28
|
+
code: 201
|
29
|
+
message: Created
|
30
|
+
headers:
|
31
|
+
Access-Control-Allow-Origin:
|
32
|
+
- "*"
|
33
|
+
Access-Control-Request-Method:
|
34
|
+
- "*"
|
35
|
+
Cache-Control:
|
36
|
+
- no-cache
|
37
|
+
Content-Type:
|
38
|
+
- application/json; charset=utf-8
|
39
|
+
Date:
|
40
|
+
- Thu, 17 Jan 2013 17:13:34 GMT
|
41
|
+
Location:
|
42
|
+
- https://api.parse.com/1/classes/Post/0ylGAv4qfA
|
43
|
+
Server:
|
44
|
+
- nginx/1.2.2
|
45
|
+
Set-Cookie:
|
46
|
+
- _parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlYzliMjZiMzllZGFjMDA3Yzk5ZjE3ZjUwMDBlZGEwN2M%3D--f4d278f69aa2353017fa480914551a210a78d2c7; domain=.parse.com; path=/; expires=Tue, 17-Jan-2023 17:13:34 GMT; secure; HttpOnly
|
47
|
+
Status:
|
48
|
+
- 201 Created
|
49
|
+
X-Runtime:
|
50
|
+
- "0.072524"
|
51
|
+
X-Ua-Compatible:
|
52
|
+
- IE=Edge,chrome=1
|
53
|
+
Content-Length:
|
54
|
+
- "64"
|
55
|
+
Connection:
|
56
|
+
- keep-alive
|
57
|
+
body:
|
58
|
+
encoding: ASCII-8BIT
|
59
|
+
string: "{\"createdAt\":\"2013-01-17T17:13:34.358Z\",\"objectId\":\"0ylGAv4qfA\"}"
|
60
|
+
http_version:
|
61
|
+
recorded_at: Thu, 17 Jan 2013 17:13:34 GMT
|
62
|
+
- request:
|
63
|
+
method: post
|
64
|
+
uri: https://api.parse.com/1/classes/Post
|
65
|
+
body:
|
66
|
+
encoding: UTF-8
|
67
|
+
string: "{\"title\":\"bar\",\"other\":{\"__type\":\"Pointer\",\"className\":\"Post\",\"objectId\":\"0ylGAv4qfA\"}}"
|
68
|
+
headers:
|
69
|
+
Content-Type:
|
70
|
+
- application/json
|
71
|
+
Accept:
|
72
|
+
- application/json
|
73
|
+
User-Agent:
|
74
|
+
- Parse for Ruby, 0.0
|
75
|
+
X-Parse-Master-Key:
|
76
|
+
- ""
|
77
|
+
X-Parse-Rest-Api-Key:
|
78
|
+
- jYdptjS76YHikuIFfJEgHD8UMIjH6cp2rWz4fo2C
|
79
|
+
X-Parse-Application-Id:
|
80
|
+
- hnJRtntbYPvWfjqcqLZsdFaOKT0F3SfNU7Kc7woN
|
81
|
+
X-Parse-Session-Token:
|
82
|
+
- ""
|
83
|
+
Expect:
|
84
|
+
- ""
|
85
|
+
response:
|
86
|
+
status:
|
87
|
+
code: 201
|
88
|
+
message: Created
|
89
|
+
headers:
|
90
|
+
Access-Control-Allow-Origin:
|
91
|
+
- "*"
|
92
|
+
Access-Control-Request-Method:
|
93
|
+
- "*"
|
94
|
+
Cache-Control:
|
95
|
+
- no-cache
|
96
|
+
Content-Type:
|
97
|
+
- application/json; charset=utf-8
|
98
|
+
Date:
|
99
|
+
- Thu, 17 Jan 2013 17:13:34 GMT
|
100
|
+
Location:
|
101
|
+
- https://api.parse.com/1/classes/Post/i0HlajhFXX
|
102
|
+
Server:
|
103
|
+
- nginx/1.2.2
|
104
|
+
Set-Cookie:
|
105
|
+
- _parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlMDExMzk3ZTdlOTEzNDEyYjMyZGZkZDE5MWY4MDY4YWE%3D--ec2534ca428c5a0c73ac3cf5634bcb7881447eef; domain=.parse.com; path=/; expires=Tue, 17-Jan-2023 17:13:34 GMT; secure; HttpOnly
|
106
|
+
Status:
|
107
|
+
- 201 Created
|
108
|
+
X-Runtime:
|
109
|
+
- "0.254273"
|
110
|
+
X-Ua-Compatible:
|
111
|
+
- IE=Edge,chrome=1
|
112
|
+
Content-Length:
|
113
|
+
- "64"
|
114
|
+
Connection:
|
115
|
+
- keep-alive
|
116
|
+
body:
|
117
|
+
encoding: ASCII-8BIT
|
118
|
+
string: "{\"createdAt\":\"2013-01-17T17:13:34.465Z\",\"objectId\":\"i0HlajhFXX\"}"
|
119
|
+
http_version:
|
120
|
+
recorded_at: Thu, 17 Jan 2013 17:13:34 GMT
|
121
|
+
- request:
|
122
|
+
method: get
|
123
|
+
uri: https://api.parse.com/1/classes/Post?include=other&where=%7B%22objectId%22:%22i0HlajhFXX%22%7D
|
124
|
+
body:
|
125
|
+
encoding: US-ASCII
|
126
|
+
string: ""
|
127
|
+
headers:
|
128
|
+
Content-Type:
|
129
|
+
- application/json
|
130
|
+
Accept:
|
131
|
+
- application/json
|
132
|
+
User-Agent:
|
133
|
+
- Parse for Ruby, 0.0
|
134
|
+
X-Parse-Master-Key:
|
135
|
+
- ""
|
136
|
+
X-Parse-Rest-Api-Key:
|
137
|
+
- jYdptjS76YHikuIFfJEgHD8UMIjH6cp2rWz4fo2C
|
138
|
+
X-Parse-Application-Id:
|
139
|
+
- hnJRtntbYPvWfjqcqLZsdFaOKT0F3SfNU7Kc7woN
|
140
|
+
X-Parse-Session-Token:
|
141
|
+
- ""
|
142
|
+
Expect:
|
143
|
+
- ""
|
144
|
+
response:
|
145
|
+
status:
|
146
|
+
code: 200
|
147
|
+
message: OK
|
148
|
+
headers:
|
149
|
+
Access-Control-Allow-Origin:
|
150
|
+
- "*"
|
151
|
+
Access-Control-Request-Method:
|
152
|
+
- "*"
|
153
|
+
Cache-Control:
|
154
|
+
- max-age=0, private, must-revalidate
|
155
|
+
Content-Type:
|
156
|
+
- application/json; charset=utf-8
|
157
|
+
Date:
|
158
|
+
- Thu, 17 Jan 2013 17:13:35 GMT
|
159
|
+
Etag:
|
160
|
+
- "\"0c16d470804a385fb35d9e40b4928e34\""
|
161
|
+
Server:
|
162
|
+
- nginx/1.2.2
|
163
|
+
Set-Cookie:
|
164
|
+
- _parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNDQ1NzVkYTExZTBjOTVlOWExOTQwNmNmZDFiZTE3NGU%3D--781e16e0634f86cdd9a44ba4baa2c12fe9a8d531; domain=.parse.com; path=/; expires=Tue, 17-Jan-2023 17:13:35 GMT; secure; HttpOnly
|
165
|
+
Status:
|
166
|
+
- 200 OK
|
167
|
+
X-Runtime:
|
168
|
+
- "0.269586"
|
169
|
+
X-Ua-Compatible:
|
170
|
+
- IE=Edge,chrome=1
|
171
|
+
Content-Length:
|
172
|
+
- "294"
|
173
|
+
Connection:
|
174
|
+
- keep-alive
|
175
|
+
body:
|
176
|
+
encoding: ASCII-8BIT
|
177
|
+
string: "{\"results\":[{\"title\":\"bar\",\"other\":{\"title\":\"foo\",\"createdAt\":\"2013-01-17T17:13:34.358Z\",\"updatedAt\":\"2013-01-17T17:13:34.358Z\",\"objectId\":\"0ylGAv4qfA\",\"__type\":\"Object\",\"className\":\"Post\"},\"createdAt\":\"2013-01-17T17:13:34.465Z\",\"updatedAt\":\"2013-01-17T17:13:34.465Z\",\"objectId\":\"i0HlajhFXX\"}]}"
|
178
|
+
http_version:
|
179
|
+
recorded_at: Thu, 17 Jan 2013 17:13:35 GMT
|
180
|
+
recorded_with: VCR 2.0.1
|
data/lib/parse/datatypes.rb
CHANGED
@@ -48,6 +48,10 @@ module Parse
|
|
48
48
|
def get
|
49
49
|
Parse.get @class_name, @parse_object_id if @parse_object_id
|
50
50
|
end
|
51
|
+
|
52
|
+
def to_s
|
53
|
+
"#{@class_name}:#{@parse_object_id}"
|
54
|
+
end
|
51
55
|
end
|
52
56
|
|
53
57
|
# Date
|
@@ -294,6 +298,10 @@ module Parse
|
|
294
298
|
def to_json(*a)
|
295
299
|
as_json.to_json(*a)
|
296
300
|
end
|
301
|
+
|
302
|
+
def to_s
|
303
|
+
"(#{latitude}, #{longitude})"
|
304
|
+
end
|
297
305
|
end
|
298
306
|
|
299
307
|
# File
|
@@ -334,4 +342,4 @@ module Parse
|
|
334
342
|
end
|
335
343
|
|
336
344
|
|
337
|
-
end
|
345
|
+
end
|
data/lib/parse/error.rb
CHANGED
data/lib/parse/object.rb
CHANGED
@@ -133,6 +133,14 @@ module Parse
|
|
133
133
|
as_json.to_json(*a)
|
134
134
|
end
|
135
135
|
|
136
|
+
def to_s
|
137
|
+
"#{@class_name}:#{@parse_object_id} #{super}"
|
138
|
+
end
|
139
|
+
|
140
|
+
def inspect
|
141
|
+
"#{@class_name}:#{@parse_object_id} #{super}"
|
142
|
+
end
|
143
|
+
|
136
144
|
# Update the fields of the local Parse object with the current
|
137
145
|
# values from the API.
|
138
146
|
def refresh
|
@@ -161,6 +169,10 @@ module Parse
|
|
161
169
|
array_op(field, Protocol::KEY_ADD, value)
|
162
170
|
end
|
163
171
|
|
172
|
+
def array_add_relation(field, value)
|
173
|
+
array_op(field, Protocol::KEY_ADD_RELATION, value)
|
174
|
+
end
|
175
|
+
|
164
176
|
def array_add_unique(field, value)
|
165
177
|
array_op(field, Protocol::KEY_ADD_UNIQUE, value)
|
166
178
|
end
|
@@ -217,6 +229,9 @@ module Parse
|
|
217
229
|
when Protocol::KEY_ADD
|
218
230
|
self[field] ||= []
|
219
231
|
self[field] << value
|
232
|
+
when Protocol::KEY_ADD_RELATION
|
233
|
+
self[field] ||= []
|
234
|
+
self[field] << value
|
220
235
|
when Protocol::KEY_ADD_UNIQUE
|
221
236
|
self[field] ||= []
|
222
237
|
self[field] << value unless self[field].include?(value)
|
@@ -225,4 +240,4 @@ module Parse
|
|
225
240
|
end
|
226
241
|
end
|
227
242
|
end
|
228
|
-
end
|
243
|
+
end
|
data/lib/parse/protocol.rb
CHANGED
@@ -65,6 +65,7 @@ module Parse
|
|
65
65
|
# array ops
|
66
66
|
KEY_OBJECTS = "objects"
|
67
67
|
KEY_ADD = "Add"
|
68
|
+
KEY_ADD_RELATION= "AddRelation"
|
68
69
|
KEY_ADD_UNIQUE = "AddUnique"
|
69
70
|
KEY_REMOVE = "Remove"
|
70
71
|
|
@@ -73,8 +74,6 @@ module Parse
|
|
73
74
|
# The JSON key used to identify the datatype of a special value.
|
74
75
|
KEY_TYPE = "__type"
|
75
76
|
|
76
|
-
TYPE_OBJECT = "Object"
|
77
|
-
|
78
77
|
# The JSON key used to specify the numerical value in the
|
79
78
|
# increment/decrement API call.
|
80
79
|
KEY_AMOUNT = "amount"
|
@@ -90,6 +89,8 @@ module Parse
|
|
90
89
|
# Operation name for decrementing an objects field value remotely
|
91
90
|
OP_DECREMENT = "Decrement"
|
92
91
|
|
92
|
+
# The data type name for special JSON objects representing a full object
|
93
|
+
TYPE_OBJECT = "Object"
|
93
94
|
|
94
95
|
# The data type name for special JSON objects representing a reference
|
95
96
|
# to another Parse object.
|
@@ -170,4 +171,4 @@ module Parse
|
|
170
171
|
"/#{VERSION}/#{BATCH_REQUEST_URI}"
|
171
172
|
end
|
172
173
|
end
|
173
|
-
end
|
174
|
+
end
|
data/lib/parse/query.rb
CHANGED
@@ -86,6 +86,11 @@ module Parse
|
|
86
86
|
self
|
87
87
|
end
|
88
88
|
|
89
|
+
def related_to(field,value)
|
90
|
+
h = {"object" => value, "key" => field}
|
91
|
+
add_constraint("$relatedTo", h )
|
92
|
+
end
|
93
|
+
|
89
94
|
def exists(field, value = true)
|
90
95
|
add_constraint field, { "$exists" => value }
|
91
96
|
self
|
@@ -131,11 +136,11 @@ module Parse
|
|
131
136
|
query.merge!(:order => order_string)
|
132
137
|
end
|
133
138
|
|
134
|
-
def merge_attribute(attribute, query)
|
139
|
+
def merge_attribute(attribute, query, query_field = nil)
|
135
140
|
value = self.instance_variable_get("@#{attribute.to_s}")
|
136
141
|
return if value.nil?
|
137
|
-
query.merge!(attribute => value)
|
142
|
+
query.merge!((query_field || attribute) => value)
|
138
143
|
end
|
139
144
|
end
|
140
145
|
|
141
|
-
end
|
146
|
+
end
|
data/lib/parse/util.rb
CHANGED
@@ -7,7 +7,6 @@ module Parse
|
|
7
7
|
# @param class_name [Object]
|
8
8
|
# @param obj [Object]
|
9
9
|
def Parse.parse_json(class_name, obj)
|
10
|
-
|
11
10
|
if obj.nil?
|
12
11
|
nil
|
13
12
|
|
@@ -48,7 +47,7 @@ module Parse
|
|
48
47
|
when Protocol::TYPE_FILE
|
49
48
|
Parse::File.new obj
|
50
49
|
when Protocol::TYPE_OBJECT # used for relation queries, e.g. "?include=post"
|
51
|
-
Parse::Object.new
|
50
|
+
Parse::Object.new obj[Protocol::KEY_CLASS_NAME], Hash[obj.map{|k,v| [k, parse_json(nil, v)]}]
|
52
51
|
end
|
53
52
|
end
|
54
53
|
end
|
data/parse-ruby-client.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "parse-ruby-client"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.11"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alan deLevie", "Adam Alpern"]
|
12
|
-
s.date = "2013-01-
|
12
|
+
s.date = "2013-01-24"
|
13
13
|
s.description = "A simple Ruby client for the parse.com REST API"
|
14
14
|
s.email = "adelevie@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,7 +25,9 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"example.rb",
|
28
|
+
"features.md",
|
28
29
|
"fixtures/vcr_cassettes/test_array_add.yml",
|
30
|
+
"fixtures/vcr_cassettes/test_array_add_relation.yml",
|
29
31
|
"fixtures/vcr_cassettes/test_batch_create_object.yml",
|
30
32
|
"fixtures/vcr_cassettes/test_batch_delete_object.yml",
|
31
33
|
"fixtures/vcr_cassettes/test_batch_run.yml",
|
@@ -35,6 +37,7 @@ Gem::Specification.new do |s|
|
|
35
37
|
"fixtures/vcr_cassettes/test_deep_parse.yml",
|
36
38
|
"fixtures/vcr_cassettes/test_destroy.yml",
|
37
39
|
"fixtures/vcr_cassettes/test_get.yml",
|
40
|
+
"fixtures/vcr_cassettes/test_include.yml",
|
38
41
|
"fixtures/vcr_cassettes/test_new_model.yml",
|
39
42
|
"fixtures/vcr_cassettes/test_new_object.yml",
|
40
43
|
"fixtures/vcr_cassettes/test_nils_delete_keys.yml",
|
data/test/test_object.rb
CHANGED
@@ -122,4 +122,22 @@ class TestObject < Test::Unit::TestCase
|
|
122
122
|
assert_equal ["hello", "goodbye"], post["chapters"]
|
123
123
|
end
|
124
124
|
end
|
125
|
+
|
126
|
+
def test_array_add_relation
|
127
|
+
VCR.use_cassette('test_array_add_relation', :record => :new_episodes) do
|
128
|
+
post = Parse::Object.new "Post"
|
129
|
+
post.save
|
130
|
+
|
131
|
+
comment = Parse::Object.new "Comment"
|
132
|
+
comment.save
|
133
|
+
|
134
|
+
post.array_add_relation("comments", comment.pointer)
|
135
|
+
post.save
|
136
|
+
|
137
|
+
q = Parse::Query.new("Comment")
|
138
|
+
q.related_to("comments", post.pointer)
|
139
|
+
comments = q.get
|
140
|
+
assert_equal comments.first["objectId"], comment["objectId"]
|
141
|
+
end
|
142
|
+
end
|
125
143
|
end
|
data/test/test_query.rb
CHANGED
@@ -30,6 +30,16 @@ class TestQuery < Test::Unit::TestCase
|
|
30
30
|
assert_equal q.where["player"], { "$regex" => "regex voodoo"}
|
31
31
|
end
|
32
32
|
|
33
|
+
def test_related_to
|
34
|
+
q = Parse::Query.new "Comment"
|
35
|
+
pointer = Parse::Pointer.new(class_name: "Post", parse_object_id: '1234')
|
36
|
+
q.related_to("comments", pointer)
|
37
|
+
|
38
|
+
assert_not_nil q.where["$relatedTo"]
|
39
|
+
assert_equal pointer, q.where["$relatedTo"]["object"]
|
40
|
+
assert_equal q.where["$relatedTo"]["key"], "comments"
|
41
|
+
end
|
42
|
+
|
33
43
|
def test_eq
|
34
44
|
q = Parse::Query.new "TestQuery"
|
35
45
|
q.eq("points", 5)
|
@@ -59,6 +69,25 @@ class TestQuery < Test::Unit::TestCase
|
|
59
69
|
end
|
60
70
|
end
|
61
71
|
|
72
|
+
def test_include
|
73
|
+
VCR.use_cassette('test_include', :record => :new_episodes) do
|
74
|
+
post_1 = Parse::Object.new "Post"
|
75
|
+
post_1['title'] = 'foo'
|
76
|
+
post_1.save
|
77
|
+
|
78
|
+
post_2 = Parse::Object.new "Post"
|
79
|
+
post_2['title'] = 'bar'
|
80
|
+
post_2['other'] = post_1.pointer
|
81
|
+
post_2.save
|
82
|
+
|
83
|
+
q = Parse::Query.new "Post"
|
84
|
+
q.eq('objectId', post_2.parse_object_id)
|
85
|
+
q.include = 'other'
|
86
|
+
|
87
|
+
assert_equal 'foo', q.get.first['other']['title']
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
62
91
|
def test_or
|
63
92
|
#VCR.use_cassette('test_or', :record => :new_episodes) do
|
64
93
|
foo = Parse::Object.new "Post"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parse-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-01-
|
13
|
+
date: 2013-01-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: patron
|
@@ -172,7 +172,9 @@ files:
|
|
172
172
|
- Rakefile
|
173
173
|
- VERSION
|
174
174
|
- example.rb
|
175
|
+
- features.md
|
175
176
|
- fixtures/vcr_cassettes/test_array_add.yml
|
177
|
+
- fixtures/vcr_cassettes/test_array_add_relation.yml
|
176
178
|
- fixtures/vcr_cassettes/test_batch_create_object.yml
|
177
179
|
- fixtures/vcr_cassettes/test_batch_delete_object.yml
|
178
180
|
- fixtures/vcr_cassettes/test_batch_run.yml
|
@@ -182,6 +184,7 @@ files:
|
|
182
184
|
- fixtures/vcr_cassettes/test_deep_parse.yml
|
183
185
|
- fixtures/vcr_cassettes/test_destroy.yml
|
184
186
|
- fixtures/vcr_cassettes/test_get.yml
|
187
|
+
- fixtures/vcr_cassettes/test_include.yml
|
185
188
|
- fixtures/vcr_cassettes/test_new_model.yml
|
186
189
|
- fixtures/vcr_cassettes/test_new_object.yml
|
187
190
|
- fixtures/vcr_cassettes/test_nils_delete_keys.yml
|
@@ -237,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
237
240
|
version: '0'
|
238
241
|
segments:
|
239
242
|
- 0
|
240
|
-
hash:
|
243
|
+
hash: 4089803935142513409
|
241
244
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
245
|
none: false
|
243
246
|
requirements:
|