parsecom 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +9 -2
- data/lib/parse/client.rb +25 -35
- data/lib/parse/http_client.rb +1 -1
- data/lib/parse/object.rb +55 -8
- data/lib/parse/pointer.rb +21 -15
- data/lib/parse/query.rb +10 -6
- data/lib/parse/user.rb +2 -2
- data/lib/parse/version.rb +1 -1
- data/lib/parsecom.rb +3 -3
- data/parsecom.gemspec +2 -0
- data/spec/fixtures/vcr_cassettes/object_find.yml +168 -0
- data/spec/fixtures/vcr_cassettes/object_new.yml +58 -0
- data/spec/fixtures/vcr_cassettes/user_find.yml +117 -0
- data/spec/fixtures/vcr_cassettes/user_log_in.yml +60 -0
- data/spec/fixtures/vcr_cassettes/user_sign_up.yml +58 -0
- data/spec/parse_client_spec.rb +3 -3
- data/spec/parse_object_spec.rb +24 -16
- data/spec/parse_user_spec.rb +18 -10
- data/spec/spec_helper.rb +22 -3
- metadata +44 -2
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -21,6 +21,13 @@ Parse.credentials :application_id => 'YOUR APPID', :api_key => 'YOUR APIKEY',
|
|
21
21
|
:master_key => 'YOUR MASTER KEY'
|
22
22
|
```
|
23
23
|
|
24
|
+
If you do not want to write your credentials on your code directly,
|
25
|
+
please set environment variables:
|
26
|
+
|
27
|
+
export PARSE_APPLICATION_ID="<YOUR_APPLICATION_ID>"
|
28
|
+
export PARSE_API_KEY="<YOUR_API_KEY>"
|
29
|
+
export PARSE_MASTER_KEY="<YOUR_MASTER_KEY>"
|
30
|
+
|
24
31
|
### Declaring Parse Classes
|
25
32
|
|
26
33
|
There are three ways to declare a parse class.
|
@@ -54,7 +61,7 @@ class.
|
|
54
61
|
Parse::Object.create :GameScore
|
55
62
|
```
|
56
63
|
|
57
|
-
It may suitable for writing code in declarative style.
|
64
|
+
It may be suitable for writing code in declarative style.
|
58
65
|
|
59
66
|
### Creating Objects
|
60
67
|
|
@@ -68,7 +75,7 @@ game_score.cheatMode = false
|
|
68
75
|
game_score.new? # => true
|
69
76
|
game_score.save
|
70
77
|
game_score.new? # => false
|
71
|
-
game_score.
|
78
|
+
game_score.parse_object_id # => 'Ed1nuqPvcm'
|
72
79
|
```
|
73
80
|
|
74
81
|
### Retrieving Objects
|
data/lib/parse/client.rb
CHANGED
@@ -16,7 +16,7 @@ module Parse
|
|
16
16
|
@api_key = api_key || Parse.api_key
|
17
17
|
@master_key = master_key || Parse.master_key
|
18
18
|
if @application_id.nil? || @api_key.nil?
|
19
|
-
raise ArgumentError.new <<-EOS.gsub(/^
|
19
|
+
raise ArgumentError.new <<-EOS.gsub(/^ +/, '')
|
20
20
|
Both Application ID and API Key must be set.
|
21
21
|
ex. Parse.credentials application_id: APPLICATION_ID, api_key: API_KEY
|
22
22
|
EOS
|
@@ -36,7 +36,9 @@ module Parse
|
|
36
36
|
def build_headers opt_headers={}
|
37
37
|
headers = {
|
38
38
|
'X-Parse-Application-Id' => @application_id,
|
39
|
-
'Content-Type' => 'application/json'
|
39
|
+
'Content-Type' => 'application/json',
|
40
|
+
'Accept' => 'application/json',
|
41
|
+
'User-Agent' => 'A parse.com client for ruby'
|
40
42
|
}
|
41
43
|
if @use_master_key
|
42
44
|
headers['X-Parse-Master-Key'] = @master_key
|
@@ -61,27 +63,35 @@ module Parse
|
|
61
63
|
end
|
62
64
|
|
63
65
|
def find parse_class, object_id_or_conditions, opts={}
|
64
|
-
|
66
|
+
case object_id_or_conditions
|
67
|
+
when :all
|
68
|
+
find_by_query parse_class, opts
|
69
|
+
when String, Symbol
|
65
70
|
find_by_id parse_class, object_id_or_conditions, opts
|
66
|
-
|
71
|
+
when Hash
|
67
72
|
find_by_query parse_class, object_id_or_conditions
|
73
|
+
else
|
74
|
+
raise ArgumentError.new('the first argument should be a string, a symbol, or a hash.')
|
68
75
|
end
|
69
76
|
end
|
70
77
|
|
71
78
|
def find_by_id parse_class, object_id, opts={}
|
72
|
-
|
73
|
-
|
74
|
-
|
79
|
+
parse_class_name = parse_class.is_a?(Parse::Object) \
|
80
|
+
? parse_class.parse_class_name : parse_class
|
81
|
+
call_api :get, "classes/#{parse_class_name}/#{object_id}" do |resp_body|
|
75
82
|
if opts.has_key? :include
|
76
|
-
included_keys = opts[:include]
|
77
|
-
included_keys = [included_keys] unless included_keys.is_a? Enumerable
|
83
|
+
included_keys = [opts[:include]].flatten
|
78
84
|
included_keys.each do |included_key|
|
79
|
-
|
80
|
-
|
85
|
+
resp_body[included_key].tap do |pointer|
|
86
|
+
if pointer['__type'] == 'Pointer'
|
87
|
+
pointer['body'] = self.find_by_id pointer['className'], pointer['objectId']
|
88
|
+
else
|
89
|
+
raise ArgumentError.new('included column should be a pointer.')
|
90
|
+
end
|
91
|
+
end
|
81
92
|
end
|
82
93
|
end
|
83
|
-
|
84
|
-
parse_class.new resp_body
|
94
|
+
resp_body
|
85
95
|
end
|
86
96
|
end
|
87
97
|
|
@@ -125,13 +135,13 @@ module Parse
|
|
125
135
|
end
|
126
136
|
|
127
137
|
def update parse_object, values
|
128
|
-
call_api :put, "classes/#{parse_object.parse_class_name}/#{parse_object.
|
138
|
+
call_api :put, "classes/#{parse_object.parse_class_name}/#{parse_object.parse_object_id}", values.to_json do |resp_body|
|
129
139
|
resp_body
|
130
140
|
end
|
131
141
|
end
|
132
142
|
|
133
143
|
def delete parse_object
|
134
|
-
call_api :delete, "classes/#{parse_object.parse_class_name}/#{parse_object.
|
144
|
+
call_api :delete, "classes/#{parse_object.parse_class_name}/#{parse_object.parse_object_id}" do |resp_body|
|
135
145
|
resp_body
|
136
146
|
end
|
137
147
|
end
|
@@ -178,25 +188,5 @@ module Parse
|
|
178
188
|
def method_missing name, *args, &block
|
179
189
|
call_function name, args.first
|
180
190
|
end
|
181
|
-
|
182
|
-
private
|
183
|
-
|
184
|
-
def convert parse_class, resp_body
|
185
|
-
resp_body.each do |k, v|
|
186
|
-
if v.is_a?(Hash) && v.has_key?('__type')
|
187
|
-
resp_body[k] = case v['__type']
|
188
|
-
when 'Date'
|
189
|
-
Date.parse v['iso']
|
190
|
-
when 'File'
|
191
|
-
Parse::File.new v
|
192
|
-
when 'Pointer'
|
193
|
-
# TODO: too many arguments
|
194
|
-
Parse::Pointer.new self, parse_class, resp_body, k, v
|
195
|
-
else
|
196
|
-
v
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
191
|
end
|
202
192
|
end
|
data/lib/parse/http_client.rb
CHANGED
@@ -9,7 +9,7 @@ module Parse
|
|
9
9
|
req = eval("Net::HTTP::#{method.to_s.capitalize}").new endpoint, headers
|
10
10
|
req.body = body if body
|
11
11
|
client = Net::HTTP.new @host, 443
|
12
|
-
|
12
|
+
client.set_debug_output $stderr if $DEBUG
|
13
13
|
client.use_ssl = true
|
14
14
|
client.start do
|
15
15
|
resp = client.request req
|
data/lib/parse/object.rb
CHANGED
@@ -5,10 +5,15 @@ module Parse
|
|
5
5
|
}
|
6
6
|
|
7
7
|
class Object
|
8
|
+
@@parse_class_vs_class_table = {}
|
8
9
|
|
9
10
|
class << self
|
10
11
|
attr_accessor :parse_class_name, :parse_client, :auto_camel_case
|
11
12
|
|
13
|
+
def register_parse_class parse_class
|
14
|
+
@@parse_class_vs_class_table[parse_class.parse_class_name] = parse_class
|
15
|
+
end
|
16
|
+
|
12
17
|
def create parse_class_name, mod=::Object
|
13
18
|
raise 'already defined' if mod.const_defined? parse_class_name
|
14
19
|
|
@@ -19,11 +24,12 @@ module Parse
|
|
19
24
|
klass.parse_class_name = parse_class_name.to_sym
|
20
25
|
klass.auto_camel_case = true
|
21
26
|
mod.const_set parse_class_name, klass
|
27
|
+
register_parse_class klass
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
25
31
|
def parse_class_name
|
26
|
-
@parse_class_name
|
32
|
+
@parse_class_name ||= name.split('::').last
|
27
33
|
end
|
28
34
|
|
29
35
|
def parse_client
|
@@ -31,27 +37,65 @@ module Parse
|
|
31
37
|
end
|
32
38
|
|
33
39
|
def find object_id_or_conditions, opts={}
|
34
|
-
parse_client.find
|
40
|
+
results = [parse_client.find(self, object_id_or_conditions, opts)].flatten
|
41
|
+
results.map! {|hash| self.new hash}
|
42
|
+
end
|
43
|
+
|
44
|
+
def find_by_id object_id, opts={}
|
45
|
+
find(object_id, opts).first
|
35
46
|
end
|
36
47
|
|
48
|
+
# TODO: need refactoring
|
37
49
|
def find! object_id_or_conditions, opts={}
|
38
|
-
parse_client.find!
|
50
|
+
results = [parse_client.find!(self, object_id_or_conditions, opts)].flatten
|
51
|
+
results.map! {|hash| self.new hash}
|
52
|
+
end
|
53
|
+
|
54
|
+
def find_by_id! object_id, opts={}
|
55
|
+
find!(object_id, opts).first
|
56
|
+
end
|
57
|
+
|
58
|
+
def find_all opts={}
|
59
|
+
find :all, opts
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_all! opts={}
|
63
|
+
find! :all, opts
|
39
64
|
end
|
40
65
|
end
|
41
66
|
|
42
|
-
attr_accessor :
|
67
|
+
attr_accessor :parse_object_id, :created_at, :updated_at, :acl
|
43
68
|
|
44
69
|
def initialize hash={}
|
70
|
+
body_hash = nil
|
45
71
|
hash = string_keyed_hash hash
|
46
72
|
if hash.has_key? 'objectId'
|
47
|
-
@
|
73
|
+
@parse_object_id = hash['objectId']
|
48
74
|
@raw_hash = hash
|
49
75
|
@updated_hash = {}
|
76
|
+
body_hash = @raw_hash
|
50
77
|
else
|
51
78
|
@raw_hash = {}
|
52
79
|
@updated_hash = hash
|
80
|
+
body_hash = @updated_hash
|
53
81
|
end
|
54
82
|
@deleted = false
|
83
|
+
|
84
|
+
hash.each do |k, v|
|
85
|
+
if v.is_a? Hash
|
86
|
+
body_hash[k] =
|
87
|
+
case v['__type']
|
88
|
+
when 'Date'
|
89
|
+
Date.parse v['iso']
|
90
|
+
when 'File'
|
91
|
+
Parse::File.new v
|
92
|
+
when 'Pointer'
|
93
|
+
Parse::Pointer.new self, v
|
94
|
+
else
|
95
|
+
v
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
55
99
|
end
|
56
100
|
|
57
101
|
def new?
|
@@ -100,7 +144,7 @@ module Parse
|
|
100
144
|
#parse_client.create(self, @updated_hash).tap do |response|
|
101
145
|
method = use_master_key ? :create! : :create
|
102
146
|
parse_client.send(method, self, @updated_hash).tap do |response|
|
103
|
-
@
|
147
|
+
@parse_object_id = response['objectId']
|
104
148
|
@created_at = Date.parse response['createdAt']
|
105
149
|
@updated_at = @created_at
|
106
150
|
@raw_hash.update @updated_hash
|
@@ -143,10 +187,13 @@ module Parse
|
|
143
187
|
delete true
|
144
188
|
end
|
145
189
|
|
146
|
-
def
|
147
|
-
@
|
190
|
+
def parse_object_id
|
191
|
+
@parse_object_id || @raw_hash['objectId']
|
148
192
|
end
|
149
193
|
|
194
|
+
alias obj_id parse_object_id
|
195
|
+
alias obj_id= parse_object_id=
|
196
|
+
|
150
197
|
def get_column name
|
151
198
|
name = name.to_s
|
152
199
|
ret = @updated_hash[name]
|
data/lib/parse/pointer.rb
CHANGED
@@ -1,25 +1,31 @@
|
|
1
1
|
# coding:utf-8
|
2
2
|
module Parse
|
3
3
|
class Pointer
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@
|
8
|
-
@parent_key = parent_key
|
4
|
+
attr_reader :object
|
5
|
+
|
6
|
+
def initialize parent, hash
|
7
|
+
@parent_object = parent
|
9
8
|
@raw_hash = hash
|
9
|
+
|
10
|
+
if @raw_hash.has_key? 'body'
|
11
|
+
@object = pointed_parse_class.new @raw_hash['body']
|
12
|
+
end
|
10
13
|
end
|
11
14
|
|
12
|
-
def load
|
13
|
-
|
14
|
-
|
15
|
-
eval(@perent_parse_class.name.split('::')[0..-2]) : ::Object
|
16
|
-
included_parse_class = Parse::Object included_parse_class_name, mod
|
17
|
-
@parent_hash[@parent_key] = @parse_client.find(
|
18
|
-
included_parse_class, @raw_hash['objectId']).tap do |real_value|
|
19
|
-
if block
|
20
|
-
block.call real_value
|
21
|
-
end
|
15
|
+
def load
|
16
|
+
unless @object
|
17
|
+
@object = pointed_parse_class.find_by_id @raw_hash['objectId']
|
22
18
|
end
|
19
|
+
@object
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def pointed_parse_class
|
25
|
+
included_parse_class_name = @raw_hash['className']
|
26
|
+
mod = @parent_object.class.name.include?('::') ? \
|
27
|
+
eval(@perent_object.class.name.split('::')[0..-2]) : ::Object
|
28
|
+
Parse::Object included_parse_class_name, mod
|
23
29
|
end
|
24
30
|
end
|
25
31
|
end
|
data/lib/parse/query.rb
CHANGED
@@ -4,11 +4,15 @@ module Parse
|
|
4
4
|
attr_accessor :parse_class_name, :parse_client
|
5
5
|
|
6
6
|
def initialize parse_class_or_name=nil
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
if parse_class_or_name.is_a?(Class) && parse_class_or_name < Parse::Object
|
8
|
+
@parse_class = parse_class_or_name
|
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
|
12
16
|
@limit = nil
|
13
17
|
@skip = nil
|
14
18
|
@count = false
|
@@ -249,7 +253,7 @@ module Parse
|
|
249
253
|
def condition_value_to_s val
|
250
254
|
case val
|
251
255
|
when Parse::Object
|
252
|
-
%Q|{"__type":"Pointer","className":"#{val.parse_class_name}","objectId":"#{val.
|
256
|
+
%Q|{"__type":"Pointer","className":"#{val.parse_class_name}","objectId":"#{val.parse_object_id}"}|
|
253
257
|
else
|
254
258
|
val.inspect
|
255
259
|
end
|
data/lib/parse/user.rb
CHANGED
@@ -28,7 +28,7 @@ module Parse
|
|
28
28
|
|
29
29
|
def sign_up
|
30
30
|
parse_client.sign_up @username, @password, opts do |resp_body|
|
31
|
-
@
|
31
|
+
@parse_object_id = resp_body['objectId']
|
32
32
|
@created_at = resp_body['createdAt']
|
33
33
|
@raw_hash.update(@updated_hash).update resp_body
|
34
34
|
@updated_hash.clear
|
@@ -39,7 +39,7 @@ module Parse
|
|
39
39
|
|
40
40
|
def log_in
|
41
41
|
parse_client.log_in @username, @password do |resp_body|
|
42
|
-
@
|
42
|
+
@parse_object_id = resp_body['objectId']
|
43
43
|
@created_at = resp_body['createdAt']
|
44
44
|
@updated_at = resp_body['updatedAt']
|
45
45
|
@raw_hash.update(@updated_hash).update resp_body
|
data/lib/parse/version.rb
CHANGED
data/lib/parsecom.rb
CHANGED
@@ -17,9 +17,9 @@ require 'parse/pointer'
|
|
17
17
|
require 'parse/file'
|
18
18
|
|
19
19
|
module Parse
|
20
|
-
@@application_id =
|
21
|
-
@@api_key =
|
22
|
-
@@master_key =
|
20
|
+
@@application_id = ENV['PARSE_APPLICATION_ID']
|
21
|
+
@@api_key = ENV['PARSE_API_KEY']
|
22
|
+
@@master_key = ENV['PARSE_MASTER_KEY']
|
23
23
|
@@auto_snake_case = false
|
24
24
|
|
25
25
|
module_function
|
data/parsecom.gemspec
CHANGED
@@ -0,0 +1,168 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.parse.com/1/classes/ClassA/vI8RdTV68d
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-Parse-Application-Id:
|
11
|
+
- <X-Parse-Application-Id>
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
User-Agent:
|
17
|
+
- A parse.com client for ruby
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- <X-Parse-REST-API-Key>
|
20
|
+
User-Agent:
|
21
|
+
- Ruby
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
Access-Control-Allow-Origin:
|
28
|
+
- ! '*'
|
29
|
+
Access-Control-Request-Method:
|
30
|
+
- ! '*'
|
31
|
+
Cache-Control:
|
32
|
+
- max-age=0, private, must-revalidate
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
Date:
|
36
|
+
- Tue, 08 Oct 2013 13:18:30 GMT
|
37
|
+
Etag:
|
38
|
+
- ! '"5016c685bf75aea12be4bdc0726b8abb"'
|
39
|
+
Server:
|
40
|
+
- nginx/1.4.2
|
41
|
+
Set-Cookie:
|
42
|
+
- <COOKIE-KEY>
|
43
|
+
Status:
|
44
|
+
- 200 OK
|
45
|
+
X-Runtime:
|
46
|
+
- '0.190291'
|
47
|
+
X-Ua-Compatible:
|
48
|
+
- IE=Edge,chrome=1
|
49
|
+
Content-Length:
|
50
|
+
- '132'
|
51
|
+
Connection:
|
52
|
+
- keep-alive
|
53
|
+
body:
|
54
|
+
encoding: US-ASCII
|
55
|
+
string: ! '{"columnA":"Hello, parse.com","createdAt":"2013-10-08T13:18:28.749Z","updatedAt":"2013-10-08T13:18:28.749Z","objectId":"vI8RdTV68d"}'
|
56
|
+
http_version:
|
57
|
+
recorded_at: Tue, 08 Oct 2013 13:18:29 GMT
|
58
|
+
- request:
|
59
|
+
method: get
|
60
|
+
uri: https://api.parse.com/1/classes/ClassA?keys=columnB&limit=3&order=createdAt&where=%7B%22columnB%22:%7B%22$gt%22:5%7D%7D
|
61
|
+
body:
|
62
|
+
encoding: US-ASCII
|
63
|
+
string: ''
|
64
|
+
headers:
|
65
|
+
X-Parse-Application-Id:
|
66
|
+
- <X-Parse-Application-Id>
|
67
|
+
Content-Type:
|
68
|
+
- application/json
|
69
|
+
Accept:
|
70
|
+
- application/json
|
71
|
+
User-Agent:
|
72
|
+
- A parse.com client for ruby
|
73
|
+
X-Parse-Rest-Api-Key:
|
74
|
+
- <X-Parse-REST-API-Key>
|
75
|
+
User-Agent:
|
76
|
+
- Ruby
|
77
|
+
response:
|
78
|
+
status:
|
79
|
+
code: 200
|
80
|
+
message: OK
|
81
|
+
headers:
|
82
|
+
Access-Control-Allow-Origin:
|
83
|
+
- ! '*'
|
84
|
+
Access-Control-Request-Method:
|
85
|
+
- ! '*'
|
86
|
+
Cache-Control:
|
87
|
+
- max-age=0, private, must-revalidate
|
88
|
+
Content-Type:
|
89
|
+
- application/json; charset=utf-8
|
90
|
+
Date:
|
91
|
+
- Tue, 08 Oct 2013 13:18:31 GMT
|
92
|
+
Etag:
|
93
|
+
- ! '"b35ed59f2d61b8185524fd55b7570ed1"'
|
94
|
+
Server:
|
95
|
+
- nginx/1.4.2
|
96
|
+
Set-Cookie:
|
97
|
+
- <COOKIE-KEY>
|
98
|
+
Status:
|
99
|
+
- 200 OK
|
100
|
+
X-Runtime:
|
101
|
+
- '0.199730'
|
102
|
+
X-Ua-Compatible:
|
103
|
+
- IE=Edge,chrome=1
|
104
|
+
Content-Length:
|
105
|
+
- '367'
|
106
|
+
Connection:
|
107
|
+
- keep-alive
|
108
|
+
body:
|
109
|
+
encoding: US-ASCII
|
110
|
+
string: ! '{"results":[{"columnB":100,"createdAt":"2013-10-03T08:52:06.000Z","updatedAt":"2013-10-03T09:14:45.177Z","objectId":"UUqhbnuTYx"},{"columnB":100,"createdAt":"2013-10-03T09:13:55.850Z","updatedAt":"2013-10-03T09:14:42.814Z","objectId":"ZvYdVUQ6bM"},{"columnB":100,"createdAt":"2013-10-03T09:14:26.327Z","updatedAt":"2013-10-03T09:14:40.863Z","objectId":"gAU5Soepva"}]}'
|
111
|
+
http_version:
|
112
|
+
recorded_at: Tue, 08 Oct 2013 13:18:31 GMT
|
113
|
+
- request:
|
114
|
+
method: get
|
115
|
+
uri: https://api.parse.com/1/classes/ClassA?keys=columnB&limit=3&order=createdAt&where=%7B%22objectId%22:%22UUqhbnuTYx%22%7D
|
116
|
+
body:
|
117
|
+
encoding: US-ASCII
|
118
|
+
string: ''
|
119
|
+
headers:
|
120
|
+
X-Parse-Application-Id:
|
121
|
+
- <X-Parse-Application-Id>
|
122
|
+
Content-Type:
|
123
|
+
- application/json
|
124
|
+
Accept:
|
125
|
+
- application/json
|
126
|
+
User-Agent:
|
127
|
+
- A parse.com client for ruby
|
128
|
+
X-Parse-Rest-Api-Key:
|
129
|
+
- <X-Parse-REST-API-Key>
|
130
|
+
User-Agent:
|
131
|
+
- Ruby
|
132
|
+
response:
|
133
|
+
status:
|
134
|
+
code: 200
|
135
|
+
message: OK
|
136
|
+
headers:
|
137
|
+
Access-Control-Allow-Origin:
|
138
|
+
- ! '*'
|
139
|
+
Access-Control-Request-Method:
|
140
|
+
- ! '*'
|
141
|
+
Cache-Control:
|
142
|
+
- max-age=0, private, must-revalidate
|
143
|
+
Content-Type:
|
144
|
+
- application/json; charset=utf-8
|
145
|
+
Date:
|
146
|
+
- Tue, 08 Oct 2013 13:18:32 GMT
|
147
|
+
Etag:
|
148
|
+
- ! '"25e49608238780e90afc7e4a8342ce9c"'
|
149
|
+
Server:
|
150
|
+
- nginx/1.4.2
|
151
|
+
Set-Cookie:
|
152
|
+
- <COOKIE-KEY>
|
153
|
+
Status:
|
154
|
+
- 200 OK
|
155
|
+
X-Runtime:
|
156
|
+
- '0.091277'
|
157
|
+
X-Ua-Compatible:
|
158
|
+
- IE=Edge,chrome=1
|
159
|
+
Content-Length:
|
160
|
+
- '131'
|
161
|
+
Connection:
|
162
|
+
- keep-alive
|
163
|
+
body:
|
164
|
+
encoding: US-ASCII
|
165
|
+
string: ! '{"results":[{"columnB":100,"createdAt":"2013-10-03T08:52:06.000Z","updatedAt":"2013-10-03T09:14:45.177Z","objectId":"UUqhbnuTYx"}]}'
|
166
|
+
http_version:
|
167
|
+
recorded_at: Tue, 08 Oct 2013 13:18:32 GMT
|
168
|
+
recorded_with: VCR 2.4.0
|
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.parse.com/1/classes/ClassA
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! '{"columnA":"Hello, parse.com"}'
|
9
|
+
headers:
|
10
|
+
X-Parse-Application-Id:
|
11
|
+
- <X-Parse-Application-Id>
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
User-Agent:
|
17
|
+
- A parse.com client for ruby
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- <X-Parse-REST-API-Key>
|
20
|
+
User-Agent:
|
21
|
+
- Ruby
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 201
|
25
|
+
message: Created
|
26
|
+
headers:
|
27
|
+
Access-Control-Allow-Origin:
|
28
|
+
- ! '*'
|
29
|
+
Access-Control-Request-Method:
|
30
|
+
- ! '*'
|
31
|
+
Cache-Control:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
Date:
|
36
|
+
- Tue, 08 Oct 2013 13:18:28 GMT
|
37
|
+
Location:
|
38
|
+
- https://api.parse.com/1/classes/ClassA/vI8RdTV68d
|
39
|
+
Server:
|
40
|
+
- nginx/1.4.2
|
41
|
+
Set-Cookie:
|
42
|
+
- <COOKIE-KEY>
|
43
|
+
Status:
|
44
|
+
- 201 Created
|
45
|
+
X-Runtime:
|
46
|
+
- '0.098102'
|
47
|
+
X-Ua-Compatible:
|
48
|
+
- IE=Edge,chrome=1
|
49
|
+
Content-Length:
|
50
|
+
- '64'
|
51
|
+
Connection:
|
52
|
+
- keep-alive
|
53
|
+
body:
|
54
|
+
encoding: US-ASCII
|
55
|
+
string: ! '{"createdAt":"2013-10-08T13:18:28.749Z","objectId":"vI8RdTV68d"}'
|
56
|
+
http_version:
|
57
|
+
recorded_at: Tue, 08 Oct 2013 13:18:28 GMT
|
58
|
+
recorded_with: VCR 2.4.0
|
@@ -0,0 +1,117 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.parse.com/1/classes/ClassA/UUqhbnuTYx
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-Parse-Application-Id:
|
11
|
+
- <X-Parse-Application-Id>
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
User-Agent:
|
17
|
+
- A parse.com client for ruby
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- <X-Parse-REST-API-Key>
|
20
|
+
X-Parse-Session-Token:
|
21
|
+
- <X-Parse-Session-Token>
|
22
|
+
User-Agent:
|
23
|
+
- Ruby
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Access-Control-Allow-Origin:
|
30
|
+
- ! '*'
|
31
|
+
Access-Control-Request-Method:
|
32
|
+
- ! '*'
|
33
|
+
Cache-Control:
|
34
|
+
- max-age=0, private, must-revalidate
|
35
|
+
Content-Type:
|
36
|
+
- application/json; charset=utf-8
|
37
|
+
Date:
|
38
|
+
- Tue, 08 Oct 2013 13:18:37 GMT
|
39
|
+
Etag:
|
40
|
+
- ! '"ae50cb0dce7ead5e1d206e7d1e658ceb"'
|
41
|
+
Server:
|
42
|
+
- nginx/1.4.2
|
43
|
+
Set-Cookie:
|
44
|
+
- <COOKIE-KEY>
|
45
|
+
Status:
|
46
|
+
- 200 OK
|
47
|
+
X-Runtime:
|
48
|
+
- '0.156641'
|
49
|
+
X-Ua-Compatible:
|
50
|
+
- IE=Edge,chrome=1
|
51
|
+
Content-Length:
|
52
|
+
- '207'
|
53
|
+
Connection:
|
54
|
+
- keep-alive
|
55
|
+
body:
|
56
|
+
encoding: US-ASCII
|
57
|
+
string: ! '{"columnA":"hello","columnB":100,"user":{"__type":"Pointer","className":"_User","objectId":"5VuUwoEe0j"},"createdAt":"2013-10-03T08:52:06.000Z","updatedAt":"2013-10-03T09:14:45.177Z","objectId":"UUqhbnuTYx"}'
|
58
|
+
http_version:
|
59
|
+
recorded_at: Tue, 08 Oct 2013 13:18:37 GMT
|
60
|
+
- request:
|
61
|
+
method: get
|
62
|
+
uri: https://api.parse.com/1/classes/_User/5VuUwoEe0j
|
63
|
+
body:
|
64
|
+
encoding: US-ASCII
|
65
|
+
string: ''
|
66
|
+
headers:
|
67
|
+
X-Parse-Application-Id:
|
68
|
+
- <X-Parse-Application-Id>
|
69
|
+
Content-Type:
|
70
|
+
- application/json
|
71
|
+
Accept:
|
72
|
+
- application/json
|
73
|
+
User-Agent:
|
74
|
+
- A parse.com client for ruby
|
75
|
+
X-Parse-Rest-Api-Key:
|
76
|
+
- <X-Parse-REST-API-Key>
|
77
|
+
X-Parse-Session-Token:
|
78
|
+
- <X-Parse-Session-Token>
|
79
|
+
User-Agent:
|
80
|
+
- Ruby
|
81
|
+
response:
|
82
|
+
status:
|
83
|
+
code: 200
|
84
|
+
message: OK
|
85
|
+
headers:
|
86
|
+
Access-Control-Allow-Origin:
|
87
|
+
- ! '*'
|
88
|
+
Access-Control-Request-Method:
|
89
|
+
- ! '*'
|
90
|
+
Cache-Control:
|
91
|
+
- max-age=0, private, must-revalidate
|
92
|
+
Content-Type:
|
93
|
+
- application/json; charset=utf-8
|
94
|
+
Date:
|
95
|
+
- Tue, 08 Oct 2013 13:18:40 GMT
|
96
|
+
Etag:
|
97
|
+
- ! '"7e3887e73da29bf2f8e12e5602a55e79"'
|
98
|
+
Server:
|
99
|
+
- nginx/1.4.2
|
100
|
+
Set-Cookie:
|
101
|
+
- <COOKIE-KEY>
|
102
|
+
Status:
|
103
|
+
- 200 OK
|
104
|
+
X-Runtime:
|
105
|
+
- '0.102107'
|
106
|
+
X-Ua-Compatible:
|
107
|
+
- IE=Edge,chrome=1
|
108
|
+
Content-Length:
|
109
|
+
- '128'
|
110
|
+
Connection:
|
111
|
+
- keep-alive
|
112
|
+
body:
|
113
|
+
encoding: US-ASCII
|
114
|
+
string: ! '{"username":"username149","createdAt":"2013-10-01T14:19:56.846Z","updatedAt":"2013-10-01T14:19:56.846Z","objectId":"5VuUwoEe0j"}'
|
115
|
+
http_version:
|
116
|
+
recorded_at: Tue, 08 Oct 2013 13:18:40 GMT
|
117
|
+
recorded_with: VCR 2.4.0
|
@@ -0,0 +1,60 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.parse.com/1/login?password=password&username=username
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
X-Parse-Application-Id:
|
11
|
+
- <X-Parse-Application-Id>
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
User-Agent:
|
17
|
+
- A parse.com client for ruby
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- <X-Parse-REST-API-Key>
|
20
|
+
X-Parse-Session-Token:
|
21
|
+
- <X-Parse-Session-Token>
|
22
|
+
User-Agent:
|
23
|
+
- Ruby
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Access-Control-Allow-Origin:
|
30
|
+
- ! '*'
|
31
|
+
Access-Control-Request-Method:
|
32
|
+
- ! '*'
|
33
|
+
Cache-Control:
|
34
|
+
- max-age=0, private, must-revalidate
|
35
|
+
Content-Type:
|
36
|
+
- application/json; charset=utf-8
|
37
|
+
Date:
|
38
|
+
- Tue, 08 Oct 2013 13:18:35 GMT
|
39
|
+
Etag:
|
40
|
+
- ! '"3b897a446e909397ccb9ea1b65668d01"'
|
41
|
+
Server:
|
42
|
+
- nginx/1.4.2
|
43
|
+
Set-Cookie:
|
44
|
+
- <COOKIE-KEY>
|
45
|
+
Status:
|
46
|
+
- 200 OK
|
47
|
+
X-Runtime:
|
48
|
+
- '0.145767'
|
49
|
+
X-Ua-Compatible:
|
50
|
+
- IE=Edge,chrome=1
|
51
|
+
Content-Length:
|
52
|
+
- '168'
|
53
|
+
Connection:
|
54
|
+
- keep-alive
|
55
|
+
body:
|
56
|
+
encoding: US-ASCII
|
57
|
+
string: ! '{"username":"username","createdAt":"2013-09-30T16:12:49.307Z","updatedAt":"2013-09-30T16:12:49.307Z","objectId":"HzHwHJpoRH","sessionToken":"cng37qr6lc33tmrvpf6jrnk00"}'
|
58
|
+
http_version:
|
59
|
+
recorded_at: Tue, 08 Oct 2013 13:18:35 GMT
|
60
|
+
recorded_with: VCR 2.4.0
|
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.parse.com/1/users
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! '{"username":"username94","password":"password"}'
|
9
|
+
headers:
|
10
|
+
X-Parse-Application-Id:
|
11
|
+
- <X-Parse-Application-Id>
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
User-Agent:
|
17
|
+
- A parse.com client for ruby
|
18
|
+
X-Parse-Rest-Api-Key:
|
19
|
+
- <X-Parse-REST-API-Key>
|
20
|
+
User-Agent:
|
21
|
+
- Ruby
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 201
|
25
|
+
message: Created
|
26
|
+
headers:
|
27
|
+
Access-Control-Allow-Origin:
|
28
|
+
- ! '*'
|
29
|
+
Access-Control-Request-Method:
|
30
|
+
- ! '*'
|
31
|
+
Cache-Control:
|
32
|
+
- no-cache
|
33
|
+
Content-Type:
|
34
|
+
- application/json; charset=utf-8
|
35
|
+
Date:
|
36
|
+
- Tue, 08 Oct 2013 13:18:33 GMT
|
37
|
+
Location:
|
38
|
+
- https://api.parse.com/1/users/xxT4YXUSyx
|
39
|
+
Server:
|
40
|
+
- nginx/1.4.2
|
41
|
+
Set-Cookie:
|
42
|
+
- <COOKIE-KEY>
|
43
|
+
Status:
|
44
|
+
- 201 Created
|
45
|
+
X-Runtime:
|
46
|
+
- '0.157749'
|
47
|
+
X-Ua-Compatible:
|
48
|
+
- IE=Edge,chrome=1
|
49
|
+
Content-Length:
|
50
|
+
- '107'
|
51
|
+
Connection:
|
52
|
+
- keep-alive
|
53
|
+
body:
|
54
|
+
encoding: US-ASCII
|
55
|
+
string: ! '{"createdAt":"2013-10-08T13:18:33.991Z","objectId":"xxT4YXUSyx","sessionToken":"ahgd26pwyt3b683iys74ye7fo"}'
|
56
|
+
http_version:
|
57
|
+
recorded_at: Tue, 08 Oct 2013 13:18:33 GMT
|
58
|
+
recorded_with: VCR 2.4.0
|
data/spec/parse_client_spec.rb
CHANGED
@@ -4,20 +4,20 @@ require 'parsecom'
|
|
4
4
|
|
5
5
|
describe Parse::Client, 'when using master_key' do
|
6
6
|
it 'should use api key' do
|
7
|
-
client = Parse::Client.new
|
7
|
+
client = Parse::Client.new
|
8
8
|
client.build_headers.keys.should be_include('X-Parse-REST-API-Key')
|
9
9
|
client.build_headers.keys.should_not be_include('X-Parse-Master-Key')
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should use master key' do
|
13
|
-
client = Parse::Client.new
|
13
|
+
client = Parse::Client.new
|
14
14
|
client.use_master_key!
|
15
15
|
client.build_headers.keys.should_not be_include('X-Parse-REST-API-Key')
|
16
16
|
client.build_headers.keys.should be_include('X-Parse-Master-Key')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should raise an error when master_key is not set' do
|
20
|
-
client = Parse::Client.new
|
20
|
+
client = Parse::Client.new
|
21
21
|
client.master_key = nil
|
22
22
|
expect {
|
23
23
|
client.use_master_key!
|
data/spec/parse_object_spec.rb
CHANGED
@@ -32,23 +32,31 @@ describe Parse::Object, 'when it defines a parse class' do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
describe Parse::Object, 'when it creates a new parse object' do
|
35
|
+
a_obj_id = nil
|
35
36
|
it 'should create a parse object' do
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
37
|
+
VCR.use_cassette 'object_new' do
|
38
|
+
class_a = ClassA.new
|
39
|
+
class_a.columnA = 'Hello, parse.com'
|
40
|
+
class_a.new?.should be_true
|
41
|
+
class_a.save
|
42
|
+
class_a.new?.should be_false
|
43
|
+
a_obj_id = class_a.parse_object_id
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should create a parse object' do
|
48
|
+
VCR.use_cassette 'object_find' do
|
49
|
+
class_a2 = ClassA.find_by_id a_obj_id
|
50
|
+
class_a2.columnA.should eql('Hello, parse.com')
|
51
|
+
|
52
|
+
class_as = ClassA.find :where => proc{column(:columnB).gt 5},
|
53
|
+
:order => 'createdAt', :keys => 'columnB', :limit => 3
|
54
|
+
class_as.size.should == 3
|
55
|
+
|
56
|
+
class_a = ClassA.find :where => {'objectId' => 'UUqhbnuTYx'},
|
57
|
+
:order => 'createdAt', :keys => 'columnB', :limit => 3
|
58
|
+
class_a.size.should == 1
|
59
|
+
end
|
52
60
|
end
|
53
61
|
end
|
54
62
|
|
data/spec/parse_user_spec.rb
CHANGED
@@ -3,17 +3,21 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe Parse::User, 'when it signs up' do
|
5
5
|
it 'should create new user' do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
VCR.use_cassette 'user_sign_up' do
|
7
|
+
user = Parse::User.sign_up "username#{rand 1000}", 'password'
|
8
|
+
user.parse_object_id.should be_an_instance_of String
|
9
|
+
user.parse_client.session_token.should be_an_instance_of String
|
10
|
+
end
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
14
|
describe Parse::User, 'when it logs in' do
|
13
15
|
it 'should get the session token' do
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
VCR.use_cassette 'user_log_in' do
|
17
|
+
user = Parse::User.log_in 'username', 'password'
|
18
|
+
user.parse_object_id.should be_an_instance_of String
|
19
|
+
user.parse_client.session_token.should be_an_instance_of String
|
20
|
+
end
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
@@ -24,9 +28,13 @@ end
|
|
24
28
|
|
25
29
|
describe Parse::User, 'when it is included in other query' do
|
26
30
|
it 'should return a valid User object' do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
VCR.use_cassette 'user_find' do
|
32
|
+
class_a = ClassA.find_by_id 'UUqhbnuTYx', :include => 'user'
|
33
|
+
user_pointer = class_a.user
|
34
|
+
user_pointer.should be_an_instance_of Parse::Pointer
|
35
|
+
user = user_pointer.object
|
36
|
+
user.should be_an_instance_of Parse::User
|
37
|
+
user.parse_object_id.should == '5VuUwoEe0j'
|
38
|
+
end
|
31
39
|
end
|
32
40
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'vcr'
|
2
3
|
|
3
4
|
RSpec::Matchers.define :have_params do |expected|
|
4
5
|
match do |actual|
|
@@ -8,7 +9,25 @@ RSpec::Matchers.define :have_params do |expected|
|
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
12
|
+
VCR.configure do |c|
|
13
|
+
c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
14
|
+
c.hook_into :webmock
|
15
|
+
c.allow_http_connections_when_no_cassette = true
|
16
|
+
c.filter_sensitive_data("<COOKIE-KEY>") { |i| [i.response.headers['Set-Cookie']].flatten.compact.first }
|
17
|
+
|
18
|
+
def filter_sensitive_header(c, header)
|
19
|
+
c.filter_sensitive_data("<#{header}>") do |interaction|
|
20
|
+
if v = interaction.request.headers.detect{|k,_| k.casecmp(header) == 0}
|
21
|
+
v.last.first
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
filter_sensitive_header(c, 'X-Parse-Application-Id')
|
27
|
+
filter_sensitive_header(c, 'X-Parse-Rest-Api-Key')
|
28
|
+
filter_sensitive_header(c, 'X-Parse-REST-API-Key')
|
29
|
+
filter_sensitive_header(c, 'X-Parse-Master-Key')
|
30
|
+
filter_sensitive_header(c, 'X-Parse-Session-Token')
|
31
|
+
end
|
32
|
+
|
11
33
|
require 'parsecom'
|
12
|
-
# setup Parse object
|
13
|
-
Parse.credentials application_id: ENV['APPLICATION_ID'], api_key: ENV['API_KEY'], master_key: ENV['MASTER_KEY']
|
14
|
-
#puts('set your credentials in spec/spec_helper.rb and remove this line') || exit
|
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.5
|
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-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -27,6 +27,38 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: webmock
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: vcr
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
30
62
|
description: Pure Ruby version of parse.com client. This library allows you to access
|
31
63
|
straightforwardly to parse.com REST API.
|
32
64
|
email:
|
@@ -52,6 +84,11 @@ files:
|
|
52
84
|
- lib/parse/version.rb
|
53
85
|
- lib/parsecom.rb
|
54
86
|
- parsecom.gemspec
|
87
|
+
- spec/fixtures/vcr_cassettes/object_find.yml
|
88
|
+
- spec/fixtures/vcr_cassettes/object_new.yml
|
89
|
+
- spec/fixtures/vcr_cassettes/user_find.yml
|
90
|
+
- spec/fixtures/vcr_cassettes/user_log_in.yml
|
91
|
+
- spec/fixtures/vcr_cassettes/user_sign_up.yml
|
55
92
|
- spec/parse_client_spec.rb
|
56
93
|
- spec/parse_object_spec.rb
|
57
94
|
- spec/parse_query_spec.rb
|
@@ -83,6 +120,11 @@ signing_key:
|
|
83
120
|
specification_version: 3
|
84
121
|
summary: Pure Ruby version of parse.com client
|
85
122
|
test_files:
|
123
|
+
- spec/fixtures/vcr_cassettes/object_find.yml
|
124
|
+
- spec/fixtures/vcr_cassettes/object_new.yml
|
125
|
+
- spec/fixtures/vcr_cassettes/user_find.yml
|
126
|
+
- spec/fixtures/vcr_cassettes/user_log_in.yml
|
127
|
+
- spec/fixtures/vcr_cassettes/user_sign_up.yml
|
86
128
|
- spec/parse_client_spec.rb
|
87
129
|
- spec/parse_object_spec.rb
|
88
130
|
- spec/parse_query_spec.rb
|