parsecom 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/parse/client.rb +48 -11
- data/lib/parse/object.rb +40 -9
- data/lib/parse/version.rb +1 -1
- data/lib/parsecom.rb +10 -0
- data/parsecom.gemspec +1 -1
- data/spec/parse_client_spec.rb +26 -0
- data/spec/spec_helper.rb +1 -1
- metadata +5 -3
data/lib/parse/client.rb
CHANGED
@@ -5,19 +5,20 @@ module Parse
|
|
5
5
|
API_VERSION = 1
|
6
6
|
@@default_client = nil
|
7
7
|
|
8
|
-
attr_accessor :http_client, :session_token
|
8
|
+
attr_accessor :http_client, :session_token, :master_key
|
9
9
|
|
10
10
|
def self.default_client
|
11
11
|
@@default_client ||= new
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize application_id=nil, api_key=nil, http_client=nil
|
14
|
+
def initialize application_id=nil, api_key=nil, master_key=nil, http_client=nil
|
15
15
|
@application_id = application_id || Parse.application_id
|
16
16
|
@api_key = api_key || Parse.api_key
|
17
|
+
@master_key = master_key || Parse.master_key
|
17
18
|
if @application_id.nil? || @api_key.nil?
|
18
|
-
raise ArgumentError.new <<-EOS
|
19
|
-
Both Application ID and API Key must be set.
|
20
|
-
ex. Parse.credentials application_id: APPLICATION_ID, api_key: API_KEY
|
19
|
+
raise ArgumentError.new <<-EOS.gsub(/^ +/)
|
20
|
+
Both Application ID and API Key must be set.
|
21
|
+
ex. Parse.credentials application_id: APPLICATION_ID, api_key: API_KEY
|
21
22
|
EOS
|
22
23
|
end
|
23
24
|
@http_client = http_client || Parse::HttpClient.new(API_SERVER)
|
@@ -25,17 +26,25 @@ ex. Parse.credentials application_id: APPLICATION_ID, api_key: API_KEY
|
|
25
26
|
|
26
27
|
def call_api method, endpoint, body=nil, opt_headers={}, &block
|
27
28
|
endpoint = "/#{API_VERSION}/#{endpoint}" unless endpoint[0] == '/'
|
29
|
+
headers = build_headers opt_headers
|
30
|
+
if body.is_a?(Hash)
|
31
|
+
body = Hash[*(body.to_a.map{|k, v| [k, URI.encode(v)]}.flatten)].to_json
|
32
|
+
end
|
33
|
+
@http_client.request method, endpoint, headers, body, &block
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_headers opt_headers={}
|
28
37
|
headers = {
|
29
38
|
'X-Parse-Application-Id' => @application_id,
|
30
|
-
'X-Parse-REST-API-Key' => @api_key,
|
31
39
|
'Content-Type' => 'application/json'
|
32
40
|
}
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
41
|
+
if @use_master_key
|
42
|
+
headers['X-Parse-Master-Key'] = @master_key
|
43
|
+
else
|
44
|
+
headers['X-Parse-REST-API-Key'] = @api_key
|
37
45
|
end
|
38
|
-
|
46
|
+
headers['X-Parse-Session-Token'] = @session_token if @session_token
|
47
|
+
headers.update opt_headers
|
39
48
|
end
|
40
49
|
|
41
50
|
def sign_up username, password, opts={}, &block
|
@@ -138,6 +147,34 @@ ex. Parse.credentials application_id: APPLICATION_ID, api_key: API_KEY
|
|
138
147
|
end
|
139
148
|
end
|
140
149
|
|
150
|
+
def use_master_key!
|
151
|
+
self.use_master_key = true
|
152
|
+
end
|
153
|
+
|
154
|
+
def use_master_key= val
|
155
|
+
raise ArgumentError.new('master_key is not set.') if val && !@master_key
|
156
|
+
@use_master_key = val
|
157
|
+
end
|
158
|
+
|
159
|
+
def use_master_key &block
|
160
|
+
return @use_master_key unless block
|
161
|
+
|
162
|
+
tmp, @use_master_key = @use_master_key, true
|
163
|
+
ret = block.call
|
164
|
+
@use_master_key = tmp
|
165
|
+
ret
|
166
|
+
end
|
167
|
+
|
168
|
+
%w(find find_by_id find_by_query create update delete call_function).each do |name|
|
169
|
+
eval <<-EOS
|
170
|
+
def #{name}! *args, &block
|
171
|
+
use_master_key do
|
172
|
+
#{name} *args, &block
|
173
|
+
end
|
174
|
+
end
|
175
|
+
EOS
|
176
|
+
end
|
177
|
+
|
141
178
|
def method_missing name, *args, &block
|
142
179
|
call_function name, args.first
|
143
180
|
end
|
data/lib/parse/object.rb
CHANGED
@@ -33,6 +33,10 @@ module Parse
|
|
33
33
|
def find object_id_or_conditions, opts={}
|
34
34
|
parse_client.find self, object_id_or_conditions, opts
|
35
35
|
end
|
36
|
+
|
37
|
+
def find! object_id_or_conditions, opts={}
|
38
|
+
parse_client.find! self, object_id_or_conditions, opts
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
38
42
|
attr_accessor :obj_id, :created_at, :updated_at, :acl
|
@@ -70,21 +74,32 @@ module Parse
|
|
70
74
|
self.class.parse_class_name
|
71
75
|
end
|
72
76
|
|
73
|
-
def save hash=@updated_hash
|
77
|
+
def save hash=@updated_hash, use_master_key=false
|
74
78
|
check_deleted!
|
79
|
+
|
80
|
+
unless hash.is_a? Hash
|
81
|
+
hash = @updated_hash
|
82
|
+
use_master_key = hash
|
83
|
+
end
|
75
84
|
hash = string_keyed_hash hash
|
76
85
|
if new?
|
77
|
-
create hash
|
86
|
+
create hash, use_master_key
|
78
87
|
else
|
79
|
-
update hash
|
88
|
+
update hash, use_master_key
|
80
89
|
end
|
81
90
|
end
|
82
91
|
|
83
|
-
def
|
92
|
+
def save! hash=@updated_hash
|
93
|
+
save hash, true
|
94
|
+
end
|
95
|
+
|
96
|
+
def create hash, use_master_key=false
|
84
97
|
check_deleted!
|
85
98
|
hash = string_keyed_hash hash
|
86
99
|
@updated_hash.update hash
|
87
|
-
parse_client.create(self, @updated_hash).tap do |response|
|
100
|
+
#parse_client.create(self, @updated_hash).tap do |response|
|
101
|
+
method = use_master_key ? :create! : :create
|
102
|
+
parse_client.send(method, self, @updated_hash).tap do |response|
|
88
103
|
@obj_id = response['objectId']
|
89
104
|
@created_at = Date.parse response['createdAt']
|
90
105
|
@updated_at = @created_at
|
@@ -93,25 +108,41 @@ module Parse
|
|
93
108
|
@updated_hash.clear
|
94
109
|
end
|
95
110
|
end
|
111
|
+
|
112
|
+
def create! hash
|
113
|
+
create hash, true
|
114
|
+
end
|
96
115
|
|
97
|
-
def update hash
|
116
|
+
def update hash, use_master_key=false
|
98
117
|
check_deleted!
|
99
118
|
hash = string_keyed_hash hash
|
100
|
-
parse_client.update(self, hash).tap do |response|
|
119
|
+
#parse_client.update(self, hash).tap do |response|
|
120
|
+
method = use_master_key ? :update! : :update
|
121
|
+
parse_client.send(method, self, hash).tap do |response|
|
101
122
|
@updated_at = Date.parse response['updatedAt']
|
102
123
|
@raw_hash.update @updated_hash
|
103
124
|
@updated_hash.clear
|
104
125
|
end
|
105
126
|
end
|
106
127
|
|
107
|
-
def
|
128
|
+
def update! hash
|
129
|
+
update hash, true
|
130
|
+
end
|
131
|
+
|
132
|
+
def delete use_master_key=false
|
108
133
|
raise 'You cannot delete new object' if new?
|
109
134
|
check_deleted!
|
110
|
-
parse_client.delete(self).tap do |response|
|
135
|
+
#parse_client.delete(self).tap do |response|
|
136
|
+
method = use_master_key ? :delete! : :delete
|
137
|
+
parse_client.send(method, self).tap do |response|
|
111
138
|
@deleted = true
|
112
139
|
end
|
113
140
|
end
|
114
141
|
|
142
|
+
def delete!
|
143
|
+
delete true
|
144
|
+
end
|
145
|
+
|
115
146
|
def obj_id
|
116
147
|
@obj_id || @raw_hash['objectId']
|
117
148
|
end
|
data/lib/parse/version.rb
CHANGED
data/lib/parsecom.rb
CHANGED
@@ -19,6 +19,7 @@ require 'parse/file'
|
|
19
19
|
module Parse
|
20
20
|
@@application_id = nil
|
21
21
|
@@api_key = nil
|
22
|
+
@@master_key = nil
|
22
23
|
@@auto_snake_case = false
|
23
24
|
|
24
25
|
module_function
|
@@ -39,9 +40,18 @@ module Parse
|
|
39
40
|
@@api_key = api_key
|
40
41
|
end
|
41
42
|
|
43
|
+
def master_key
|
44
|
+
@@master_key
|
45
|
+
end
|
46
|
+
|
47
|
+
def master_key= master_key
|
48
|
+
@@master_key = master_key
|
49
|
+
end
|
50
|
+
|
42
51
|
def credentials hash
|
43
52
|
@@application_id = hash[:application_id]
|
44
53
|
@@api_key = hash[:api_key]
|
54
|
+
@@master_key = hash[:master_key]
|
45
55
|
end
|
46
56
|
|
47
57
|
def credentials= hash
|
data/parsecom.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = Parse::VERSION
|
9
9
|
gem.authors = ["Ando Yasushi"]
|
10
10
|
gem.email = ["andyjpn@gmail.com"]
|
11
|
-
gem.description = %q{Pure Ruby version of parse.com client. This library
|
11
|
+
gem.description = %q{Pure Ruby version of parse.com client. This library allows you to access straightforwardly to parse.com REST API.}
|
12
12
|
gem.summary = %q{Pure Ruby version of parse.com client}
|
13
13
|
gem.homepage = "https://github.com/technohippy/parsecom"
|
14
14
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'parsecom'
|
4
|
+
|
5
|
+
describe Parse::Client, 'when using master_key' do
|
6
|
+
it 'should use api key' do
|
7
|
+
client = Parse::Client.new# 'appid', 'apikey'
|
8
|
+
client.build_headers.keys.should be_include('X-Parse-REST-API-Key')
|
9
|
+
client.build_headers.keys.should_not be_include('X-Parse-Master-Key')
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should use master key' do
|
13
|
+
client = Parse::Client.new# 'appid', 'apikey', 'masterkey'
|
14
|
+
client.use_master_key!
|
15
|
+
client.build_headers.keys.should_not be_include('X-Parse-REST-API-Key')
|
16
|
+
client.build_headers.keys.should be_include('X-Parse-Master-Key')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should raise an error when master_key is not set' do
|
20
|
+
client = Parse::Client.new# 'appid', 'apikey'
|
21
|
+
client.master_key = nil
|
22
|
+
expect {
|
23
|
+
client.use_master_key!
|
24
|
+
}.to raise_error
|
25
|
+
end
|
26
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -10,5 +10,5 @@ end
|
|
10
10
|
|
11
11
|
require 'parsecom'
|
12
12
|
# setup Parse object
|
13
|
-
Parse.credentials application_id: ENV['APPLICATION_ID'], api_key: ENV['API_KEY']
|
13
|
+
Parse.credentials application_id: ENV['APPLICATION_ID'], api_key: ENV['API_KEY'], master_key: ENV['MASTER_KEY']
|
14
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.3
|
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-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
-
description: Pure Ruby version of parse.com client. This library
|
30
|
+
description: Pure Ruby version of parse.com client. This library allows you to access
|
31
31
|
straightforwardly to parse.com REST API.
|
32
32
|
email:
|
33
33
|
- andyjpn@gmail.com
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/parse/version.rb
|
53
53
|
- lib/parsecom.rb
|
54
54
|
- parsecom.gemspec
|
55
|
+
- spec/parse_client_spec.rb
|
55
56
|
- spec/parse_object_spec.rb
|
56
57
|
- spec/parse_query_spec.rb
|
57
58
|
- spec/parse_user_spec.rb
|
@@ -81,6 +82,7 @@ signing_key:
|
|
81
82
|
specification_version: 3
|
82
83
|
summary: Pure Ruby version of parse.com client
|
83
84
|
test_files:
|
85
|
+
- spec/parse_client_spec.rb
|
84
86
|
- spec/parse_object_spec.rb
|
85
87
|
- spec/parse_query_spec.rb
|
86
88
|
- spec/parse_user_spec.rb
|