dm-parse 0.2.3 → 0.3.0
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/Gemfile +1 -1
- data/Gemfile.lock +6 -3
- data/VERSION +1 -1
- data/dm-parse.gemspec +4 -6
- data/lib/dm-parse.rb +1 -2
- data/lib/parse/engine.rb +41 -38
- metadata +3 -5
- data/lib/parse/resource.rb +0 -56
- data/spec/resource_spec.rb +0 -5
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -27,8 +27,10 @@ GEM
|
|
27
27
|
rdoc
|
28
28
|
json (1.7.3)
|
29
29
|
multi_json (1.3.6)
|
30
|
-
|
31
|
-
|
30
|
+
parse-ruby-client (0.1.0)
|
31
|
+
patron
|
32
|
+
vcr
|
33
|
+
patron (0.4.18)
|
32
34
|
rake (0.9.2.2)
|
33
35
|
rdoc (3.12)
|
34
36
|
json (~> 1.4)
|
@@ -44,6 +46,7 @@ GEM
|
|
44
46
|
multi_json (~> 1.0)
|
45
47
|
simplecov-html (~> 0.5.3)
|
46
48
|
simplecov-html (0.5.3)
|
49
|
+
vcr (2.2.2)
|
47
50
|
yard (0.8.2.1)
|
48
51
|
|
49
52
|
PLATFORMS
|
@@ -56,7 +59,7 @@ DEPENDENCIES
|
|
56
59
|
dm-core (>= 1.2)
|
57
60
|
dm-validations (>= 1.2)
|
58
61
|
jeweler (>= 1.8.3)
|
59
|
-
|
62
|
+
parse-ruby-client (>= 0.0.8)
|
60
63
|
rdoc (>= 3.12)
|
61
64
|
rspec (>= 2.10.0)
|
62
65
|
simplecov (>= 0.6)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/dm-parse.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "dm-parse"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Zhi-Qiang Lei"]
|
@@ -34,7 +34,6 @@ Gem::Specification.new do |s|
|
|
34
34
|
"lib/is/parse.rb",
|
35
35
|
"lib/parse/engine.rb",
|
36
36
|
"lib/parse/query.rb",
|
37
|
-
"lib/parse/resource.rb",
|
38
37
|
"lib/property/parse_date.rb",
|
39
38
|
"lib/property/parse_file.rb",
|
40
39
|
"lib/property/parse_geo_point.rb",
|
@@ -48,7 +47,6 @@ Gem::Specification.new do |s|
|
|
48
47
|
"spec/parse_key_spec.rb",
|
49
48
|
"spec/parse_pointer_spec.rb",
|
50
49
|
"spec/query_spec.rb",
|
51
|
-
"spec/resource_spec.rb",
|
52
50
|
"spec/spec_helper.rb"
|
53
51
|
]
|
54
52
|
s.homepage = "https://github.com/siegfried/dm-parse"
|
@@ -64,7 +62,7 @@ Gem::Specification.new do |s|
|
|
64
62
|
s.add_runtime_dependency(%q<dm-core>, [">= 1.2"])
|
65
63
|
s.add_runtime_dependency(%q<dm-validations>, [">= 1.2"])
|
66
64
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.2"])
|
67
|
-
s.add_runtime_dependency(%q<
|
65
|
+
s.add_runtime_dependency(%q<parse-ruby-client>, [">= 0.0.8"])
|
68
66
|
s.add_development_dependency(%q<rspec>, [">= 2.10.0"])
|
69
67
|
s.add_development_dependency(%q<yard>, [">= 0.7"])
|
70
68
|
s.add_development_dependency(%q<rdoc>, [">= 3.12"])
|
@@ -76,7 +74,7 @@ Gem::Specification.new do |s|
|
|
76
74
|
s.add_dependency(%q<dm-core>, [">= 1.2"])
|
77
75
|
s.add_dependency(%q<dm-validations>, [">= 1.2"])
|
78
76
|
s.add_dependency(%q<activesupport>, [">= 3.2"])
|
79
|
-
s.add_dependency(%q<
|
77
|
+
s.add_dependency(%q<parse-ruby-client>, [">= 0.0.8"])
|
80
78
|
s.add_dependency(%q<rspec>, [">= 2.10.0"])
|
81
79
|
s.add_dependency(%q<yard>, [">= 0.7"])
|
82
80
|
s.add_dependency(%q<rdoc>, [">= 3.12"])
|
@@ -89,7 +87,7 @@ Gem::Specification.new do |s|
|
|
89
87
|
s.add_dependency(%q<dm-core>, [">= 1.2"])
|
90
88
|
s.add_dependency(%q<dm-validations>, [">= 1.2"])
|
91
89
|
s.add_dependency(%q<activesupport>, [">= 3.2"])
|
92
|
-
s.add_dependency(%q<
|
90
|
+
s.add_dependency(%q<parse-ruby-client>, [">= 0.0.8"])
|
93
91
|
s.add_dependency(%q<rspec>, [">= 2.10.0"])
|
94
92
|
s.add_dependency(%q<yard>, [">= 0.7"])
|
95
93
|
s.add_dependency(%q<rdoc>, [">= 3.12"])
|
data/lib/dm-parse.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
require "dm-core"
|
2
2
|
require "dm-validations"
|
3
3
|
require "active_support/all"
|
4
|
-
require "nestful"
|
5
4
|
require "collection"
|
5
|
+
require "parse-ruby-client"
|
6
6
|
require "property/parse_key"
|
7
7
|
require "property/parse_pointer"
|
8
8
|
require "property/parse_date"
|
9
9
|
require "property/parse_file"
|
10
10
|
require "property/parse_geo_point"
|
11
|
-
require "parse/resource"
|
12
11
|
require "parse/engine"
|
13
12
|
require "parse/query"
|
14
13
|
require "adapters/parse_adapter"
|
data/lib/parse/engine.rb
CHANGED
@@ -1,73 +1,76 @@
|
|
1
1
|
module DataMapper
|
2
|
+
|
3
|
+
module ::Parse
|
4
|
+
module Protocol
|
5
|
+
HEADER_MASTER_KEY = "X-Parse-Master-Key"
|
6
|
+
end
|
7
|
+
|
8
|
+
class Client
|
9
|
+
def initialize(data = {})
|
10
|
+
@host = data[:host] || Protocol::HOST
|
11
|
+
@app_id = data[:app_id]
|
12
|
+
@api_key = data[:api_key]
|
13
|
+
@session = Patron::Session.new
|
14
|
+
@session.timeout = 10
|
15
|
+
@session.connect_timeout = 10
|
16
|
+
|
17
|
+
@session.base_url = "https://#{host}"
|
18
|
+
@session.headers["Content-Type"] = "application/json"
|
19
|
+
@session.headers["Accept"] = "application/json"
|
20
|
+
@session.headers["User-Agent"] = "Parse for Ruby, 0.0"
|
21
|
+
@session.headers[Protocol::HEADER_APP_ID] = @app_id
|
22
|
+
|
23
|
+
key_type = data[:master] ? Protocol::HEADER_MASTER_KEY : Protocol::HEADER_API_KEY
|
24
|
+
@session.headers[key_type] = @api_key
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
2
29
|
module Parse
|
3
30
|
|
4
31
|
class Engine
|
5
32
|
|
6
|
-
|
7
|
-
VERSION = "1"
|
8
|
-
APP_ID_HEADER = "X-Parse-Application-Id"
|
9
|
-
API_KEY_HEADER = "X-Parse-REST-API-Key"
|
10
|
-
MASTER_KEY_HEADER = "X-Parse-Master-Key"
|
11
|
-
|
12
|
-
attr_reader :classes, :users, :login, :password_reset, :file_storage
|
33
|
+
attr_reader :client
|
13
34
|
|
14
35
|
def initialize(app_id, api_key, master)
|
15
|
-
@
|
16
|
-
@api_key = api_key
|
17
|
-
@master = master
|
18
|
-
@classes = build_parse_resource_for "classes"
|
19
|
-
@users = build_parse_resource_for "users"
|
20
|
-
@login = build_parse_resource_for "login"
|
21
|
-
@password_reset = build_parse_resource_for "requestPasswordReset"
|
22
|
-
@file_storage = build_parse_resource_for "files"
|
36
|
+
@client = ::Parse::Client.new app_id: app_id, api_key: api_key, master: master
|
23
37
|
end
|
24
38
|
|
25
39
|
def read(storage_name, params)
|
26
|
-
|
40
|
+
query = params.inject({}) do |result, (k, v)|
|
41
|
+
result.merge k.to_s => CGI.escape(v.to_s)
|
42
|
+
end
|
43
|
+
client.request uri_for(storage_name), :get, nil, query
|
27
44
|
end
|
28
45
|
|
29
46
|
def delete(storage_name, id)
|
30
|
-
|
47
|
+
client.delete uri_for(storage_name, id)
|
31
48
|
end
|
32
49
|
|
33
50
|
def create(storage_name, attributes)
|
34
|
-
|
51
|
+
client.post uri_for(storage_name), attributes.to_json
|
35
52
|
end
|
36
53
|
|
37
54
|
def update(storage_name, id, attributes)
|
38
|
-
|
55
|
+
client.put uri_for(storage_name, id), attributes.to_json
|
39
56
|
end
|
40
57
|
|
41
58
|
def sign_in(username, password)
|
42
|
-
|
59
|
+
client.request ::Parse::Protocol::USER_LOGIN_URI, :get, nil, { username: username, password: password }
|
43
60
|
end
|
44
61
|
|
45
62
|
def upload_file(filename, content, content_type)
|
46
|
-
|
47
|
-
storage.options[:headers]["Content-Type"] = content_type
|
48
|
-
storage.post body: content
|
63
|
+
client.post ::Parse::Protocol.file_uri(URI.escape(filename)), content
|
49
64
|
end
|
50
65
|
|
51
66
|
def request_password_reset(email)
|
52
|
-
|
67
|
+
client.post ::Parse::Protocol::PASSWORD_RESET_URI, {email: email}.to_json
|
53
68
|
end
|
54
69
|
|
55
70
|
private
|
56
71
|
|
57
|
-
def
|
58
|
-
storage_name == "_User" ?
|
59
|
-
end
|
60
|
-
|
61
|
-
def build_parse_resource_for(name)
|
62
|
-
Parse::Resource.new(HOST, format: :json, headers: key_headers)[VERSION][name]
|
63
|
-
end
|
64
|
-
|
65
|
-
def key_headers
|
66
|
-
key_type = @master ? MASTER_KEY_HEADER : API_KEY_HEADER
|
67
|
-
{
|
68
|
-
APP_ID_HEADER => @app_id,
|
69
|
-
key_type => @api_key
|
70
|
-
}
|
72
|
+
def uri_for(storage_name, id = nil)
|
73
|
+
storage_name == "_User" ? ::Parse::Protocol.user_uri(id) : ::Parse::Protocol.class_uri(storage_name, id)
|
71
74
|
end
|
72
75
|
|
73
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-parse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.2'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: parse-ruby-client
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -212,7 +212,6 @@ files:
|
|
212
212
|
- lib/is/parse.rb
|
213
213
|
- lib/parse/engine.rb
|
214
214
|
- lib/parse/query.rb
|
215
|
-
- lib/parse/resource.rb
|
216
215
|
- lib/property/parse_date.rb
|
217
216
|
- lib/property/parse_file.rb
|
218
217
|
- lib/property/parse_geo_point.rb
|
@@ -226,7 +225,6 @@ files:
|
|
226
225
|
- spec/parse_key_spec.rb
|
227
226
|
- spec/parse_pointer_spec.rb
|
228
227
|
- spec/query_spec.rb
|
229
|
-
- spec/resource_spec.rb
|
230
228
|
- spec/spec_helper.rb
|
231
229
|
homepage: https://github.com/siegfried/dm-parse
|
232
230
|
licenses:
|
@@ -243,7 +241,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
241
|
version: '0'
|
244
242
|
segments:
|
245
243
|
- 0
|
246
|
-
hash:
|
244
|
+
hash: 1440756048767751093
|
247
245
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
246
|
none: false
|
249
247
|
requirements:
|
data/lib/parse/resource.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Parse
|
3
|
-
# Read the body to get detail of Parse error
|
4
|
-
class Connection < ::Nestful::Connection
|
5
|
-
def handle_response(response)
|
6
|
-
response.read_body if (400...500).include? response.code.to_i
|
7
|
-
super
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
::Nestful::Request.class_eval do
|
12
|
-
def connection
|
13
|
-
conn = Connection.new(uri, format)
|
14
|
-
conn.proxy = proxy if proxy
|
15
|
-
conn.user = user if user
|
16
|
-
conn.password = password if password
|
17
|
-
conn.auth_type = auth_type if auth_type
|
18
|
-
conn.timeout = timeout if timeout
|
19
|
-
conn.ssl_options = ssl_options if ssl_options
|
20
|
-
conn
|
21
|
-
end
|
22
|
-
end # This is a workaround. Mixin for Connection does not work somehow.
|
23
|
-
|
24
|
-
module ParseError
|
25
|
-
def to_s
|
26
|
-
error = JSON.parse(response.body)["error"]
|
27
|
-
super + " Response Parse Error = #{error}"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
::Nestful::BadRequest.send :include, ParseError
|
32
|
-
::Nestful::UnauthorizedAccess.send :include, ParseError
|
33
|
-
::Nestful::ForbiddenAccess.send :include, ParseError
|
34
|
-
::Nestful::ResourceNotFound.send :include, ParseError
|
35
|
-
::Nestful::MethodNotAllowed.send :include, ParseError
|
36
|
-
::Nestful::ResourceConflict.send :include, ParseError
|
37
|
-
::Nestful::ResourceGone.send :include, ParseError
|
38
|
-
::Nestful::ResourceInvalid.send :include, ParseError
|
39
|
-
|
40
|
-
class Resource < ::Nestful::Resource
|
41
|
-
attr_reader :options
|
42
|
-
|
43
|
-
def ==(resource)
|
44
|
-
url == resource.url && options == resource.options
|
45
|
-
end
|
46
|
-
|
47
|
-
def delete(options = {})
|
48
|
-
Nestful.delete(url, options.merge(@options))
|
49
|
-
end
|
50
|
-
|
51
|
-
def put(options = {})
|
52
|
-
Nestful.put(url, options.merge(@options))
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|