dm-parse 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,94 @@
1
+ # dm-parse
2
+
3
+ A DataMapper extension for [Parse](https://parse.com/), include an adapter and some types for Parse.
4
+
5
+ ## Installation
6
+
7
+ Include in your `Gemfile`:
8
+
9
+ ```ruby
10
+ gem "dm-parse"
11
+ ```
12
+
13
+ Or just gem install:
14
+
15
+ ```bash
16
+ gem install dm-parse
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ To setup the adapter:
22
+
23
+ ```ruby
24
+ DataMapper.setup(:default, adapter: :parse, app_id: "your-id", api_key: "your-rest-api-key")
25
+ ```
26
+
27
+ To setup with Master Key:
28
+
29
+ ```ruby
30
+ DataMapper.setup(:default, adapter: :parse, app_id: "your-id", api_key: "your-master-key", master: true)
31
+ ```
32
+
33
+ To define model for parse, use `is :parse`:
34
+
35
+ ```ruby
36
+ class Article
37
+ include DataMapper::Resource
38
+
39
+ is :parse # it defines id, created_at and updated_at for you
40
+
41
+ property :title, String
42
+ property :body, Text
43
+ property :rank, Integer
44
+ property :closed_at, ParseDate # Date type for Parse
45
+
46
+ has n, :comments
47
+ end
48
+
49
+ class Comment
50
+ include DataMapper::Resource
51
+
52
+ is :parse
53
+
54
+ property :body, Text
55
+
56
+ belongs_to :article
57
+ end
58
+ ```
59
+
60
+ To define a user model, use `is :parse_user`:
61
+
62
+ ```ruby
63
+ class User
64
+ include DataMapper::Resource
65
+
66
+ # more than :parse, it also defines username, password and email.
67
+ # it also sets the default storage_names to "_User"
68
+ is :parse_user
69
+ storage_names[:master] = "_User"
70
+ end
71
+ ```
72
+
73
+ By this, you can use `User.authenticate(username, password)` to sign in, and use `User.request_password_reset(email)` to reset password.
74
+
75
+ ## Special properties for Parse
76
+ * ParseKey: the property for objectId, `is :parse` will define it for you.
77
+ * ParsePointer: the pointer, you just need to give it objectId value.
78
+ * ParseDate: the date, use it like you use DateTime.
79
+ * ParseFile: the file, just give it file url.
80
+
81
+ ## Contributing to dm-parse
82
+
83
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
84
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
85
+ * Fork the project.
86
+ * Start a feature/bugfix branch.
87
+ * Commit and push until you are happy with your contribution.
88
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
89
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
90
+
91
+ ## Copyright
92
+
93
+ Copyright (c) 2012 Zhi-Qiang Lei. See LICENSE.txt for
94
+ further details.
data/Rakefile CHANGED
@@ -22,10 +22,6 @@ Jeweler::Tasks.new do |gem|
22
22
  gem.email = "zhiqiang.lei@gmail.com"
23
23
  gem.authors = ["Zhi-Qiang Lei"]
24
24
  # dependencies defined in Gemfile
25
- gem.add_dependency "dm-core", ">= 1.2"
26
- gem.add_dependency "dm-validations", ">= 1.2"
27
- gem.add_dependency "activesupport", ">= 3.2"
28
- gem.add_dependency "nestful", ">= 0.0.8"
29
25
  end
30
26
  Jeweler::RubygemsDotOrgTasks.new
31
27
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/dm-parse.gemspec ADDED
@@ -0,0 +1,101 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "dm-parse"
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Zhi-Qiang Lei"]
12
+ s.date = "2012-06-28"
13
+ s.description = "An extension to make DataMapper working on Parse.com"
14
+ s.email = "zhiqiang.lei@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ ".rspec",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "dm-parse.gemspec",
31
+ "lib/adapters/parse_adapter.rb",
32
+ "lib/collection.rb",
33
+ "lib/dm-parse.rb",
34
+ "lib/is/parse.rb",
35
+ "lib/parse/query.rb",
36
+ "lib/parse/resource.rb",
37
+ "lib/property/parse_date.rb",
38
+ "lib/property/parse_file.rb",
39
+ "lib/property/parse_geo_point.rb",
40
+ "lib/property/parse_key.rb",
41
+ "lib/property/parse_pointer.rb",
42
+ "spec/integration_spec.rb",
43
+ "spec/parse_adapter_spec.rb",
44
+ "spec/parse_date_spec.rb",
45
+ "spec/parse_file_spec.rb",
46
+ "spec/parse_geo_point_spec.rb",
47
+ "spec/parse_key_spec.rb",
48
+ "spec/parse_pointer_spec.rb",
49
+ "spec/query_spec.rb",
50
+ "spec/resource_spec.rb",
51
+ "spec/spec_helper.rb"
52
+ ]
53
+ s.homepage = "https://github.com/siegfried/dm-parse"
54
+ s.licenses = ["MIT"]
55
+ s.require_paths = ["lib"]
56
+ s.rubygems_version = "1.8.24"
57
+ s.summary = "An extension to make DataMapper working on Parse.com"
58
+
59
+ if s.respond_to? :specification_version then
60
+ s.specification_version = 3
61
+
62
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
63
+ s.add_runtime_dependency(%q<dm-core>, [">= 1.2"])
64
+ s.add_runtime_dependency(%q<dm-validations>, [">= 1.2"])
65
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.2"])
66
+ s.add_runtime_dependency(%q<nestful>, [">= 0.0.8"])
67
+ s.add_development_dependency(%q<rspec>, [">= 2.10.0"])
68
+ s.add_development_dependency(%q<yard>, [">= 0.7"])
69
+ s.add_development_dependency(%q<rdoc>, [">= 3.12"])
70
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
71
+ s.add_development_dependency(%q<jeweler>, [">= 1.8.3"])
72
+ s.add_development_dependency(%q<simplecov>, [">= 0.6"])
73
+ s.add_development_dependency(%q<debugger>, [">= 1.1"])
74
+ else
75
+ s.add_dependency(%q<dm-core>, [">= 1.2"])
76
+ s.add_dependency(%q<dm-validations>, [">= 1.2"])
77
+ s.add_dependency(%q<activesupport>, [">= 3.2"])
78
+ s.add_dependency(%q<nestful>, [">= 0.0.8"])
79
+ s.add_dependency(%q<rspec>, [">= 2.10.0"])
80
+ s.add_dependency(%q<yard>, [">= 0.7"])
81
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
82
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
83
+ s.add_dependency(%q<jeweler>, [">= 1.8.3"])
84
+ s.add_dependency(%q<simplecov>, [">= 0.6"])
85
+ s.add_dependency(%q<debugger>, [">= 1.1"])
86
+ end
87
+ else
88
+ s.add_dependency(%q<dm-core>, [">= 1.2"])
89
+ s.add_dependency(%q<dm-validations>, [">= 1.2"])
90
+ s.add_dependency(%q<activesupport>, [">= 3.2"])
91
+ s.add_dependency(%q<nestful>, [">= 0.0.8"])
92
+ s.add_dependency(%q<rspec>, [">= 2.10.0"])
93
+ s.add_dependency(%q<yard>, [">= 0.7"])
94
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
95
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
96
+ s.add_dependency(%q<jeweler>, [">= 1.8.3"])
97
+ s.add_dependency(%q<simplecov>, [">= 0.6"])
98
+ s.add_dependency(%q<debugger>, [">= 1.1"])
99
+ end
100
+ end
101
+
data/lib/dm-parse.rb CHANGED
@@ -6,6 +6,8 @@ require "collection"
6
6
  require "property/parse_key"
7
7
  require "property/parse_pointer"
8
8
  require "property/parse_date"
9
+ require "property/parse_file"
10
+ require "property/parse_geo_point"
9
11
  require "parse/resource"
10
12
  require "parse/query"
11
13
  require "adapters/parse_adapter"
@@ -0,0 +1,17 @@
1
+ module DataMapper
2
+ class Property
3
+
4
+ class ParseFile < Object
5
+
6
+ def dump(value)
7
+ value && {"__type" => "File", "name" => value.to_s}
8
+ end
9
+
10
+ def load(value)
11
+ value && value["name"].to_s
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module DataMapper
2
+ class Property
3
+
4
+ class ParseGeoPoint < Object
5
+
6
+ def dump(value)
7
+ value && {"__type" => "GeoPoint", "latitude" => value["lat"].to_f, "longitude" => value["lng"].to_f}
8
+ end
9
+
10
+ def load(value)
11
+ value && {"lat" => value["latitude"], "lng" => value["longitude"]}
12
+ end
13
+
14
+ def valid?(value)
15
+ return false if value && (value["lat"].nil? || value["lng"].nil?)
16
+ super
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe DataMapper::Property::ParseFile do
4
+ subject { property }
5
+
6
+ let(:property) { Article.properties[:attachment] }
7
+
8
+ describe "#dump" do
9
+ subject { property.dump value }
10
+
11
+ let(:value) { "http://a.cn/a.png" }
12
+
13
+ it { should eq("__type" => "File", "name" => value) }
14
+
15
+ context "when value is nil" do
16
+ let(:value) { nil }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+
22
+ describe "#load" do
23
+ subject { property.load value }
24
+
25
+ let(:value) { { "__type" => "File", "name" => "http://a.cn/a.png" } }
26
+
27
+ it { should eq(value["name"]) }
28
+
29
+ context "when value is nil" do
30
+ let(:value) { nil }
31
+
32
+ it { should be_nil }
33
+ end
34
+ end
35
+
36
+ describe "#valid?" do
37
+ subject { property.valid? value }
38
+
39
+ let(:value) { "http://a.cn/a.png" }
40
+
41
+ it { should be_true }
42
+ end
43
+ end
@@ -0,0 +1,63 @@
1
+ require "spec_helper"
2
+
3
+ describe DataMapper::Property::ParseGeoPoint do
4
+ subject { property }
5
+
6
+ let(:property) { User.properties[:location] }
7
+
8
+ describe "#dump" do
9
+ subject { property.dump value }
10
+
11
+ let(:value) { { "lat" => "20", "lng" => "50" } }
12
+
13
+ it { should eq("__type" => "GeoPoint", "latitude" => value["lat"].to_f, "longitude" => value["lng"].to_f) }
14
+
15
+ context "when value is nil" do
16
+ let(:value) { nil }
17
+
18
+ it { should be_nil }
19
+ end
20
+ end
21
+
22
+ describe "#load" do
23
+ subject { property.load value }
24
+
25
+ let(:value) { { "__type" => "GeoPoint", "latitude" => 20.0, "longitude" => 50.0 } }
26
+
27
+ it { should eq("lat" => value["latitude"], "lng" => value["longitude"]) }
28
+
29
+ context "when value is nil" do
30
+ let(:value) { nil }
31
+
32
+ it { should be_nil }
33
+ end
34
+ end
35
+
36
+ describe "#valid?" do
37
+ subject { property.valid? value }
38
+
39
+ let(:value) { { "lat" => lat, "lng" => lng } }
40
+ let(:lat) { "20.0" }
41
+ let(:lng) { "50.0" }
42
+
43
+ it { should be_true }
44
+
45
+ context "when lat is nil" do
46
+ let(:lat) { nil }
47
+
48
+ it { should be_false }
49
+ end
50
+
51
+ context "when lng is nil" do
52
+ let(:lng) { nil }
53
+
54
+ it { should be_false }
55
+ end
56
+
57
+ context "when value is nil" do
58
+ let(:value) { nil }
59
+
60
+ it { should be_true }
61
+ end
62
+ end
63
+ end
data/spec/spec_helper.rb CHANGED
@@ -29,6 +29,7 @@ class User
29
29
 
30
30
  is :parse_user
31
31
  storage_names[:master] = "_User"
32
+ property :location, ParseGeoPoint
32
33
  end
33
34
 
34
35
  class Article
@@ -40,6 +41,7 @@ class Article
40
41
  property :body, Text
41
42
  property :rank, Integer
42
43
  property :closed_at, ParseDate
44
+ property :attachment, ParseFile
43
45
 
44
46
  has n, :comments
45
47
  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.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -187,76 +187,13 @@ dependencies:
187
187
  - - ! '>='
188
188
  - !ruby/object:Gem::Version
189
189
  version: '1.1'
190
- - !ruby/object:Gem::Dependency
191
- name: dm-core
192
- requirement: !ruby/object:Gem::Requirement
193
- none: false
194
- requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: '1.2'
198
- type: :runtime
199
- prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - ! '>='
204
- - !ruby/object:Gem::Version
205
- version: '1.2'
206
- - !ruby/object:Gem::Dependency
207
- name: dm-validations
208
- requirement: !ruby/object:Gem::Requirement
209
- none: false
210
- requirements:
211
- - - ! '>='
212
- - !ruby/object:Gem::Version
213
- version: '1.2'
214
- type: :runtime
215
- prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ! '>='
220
- - !ruby/object:Gem::Version
221
- version: '1.2'
222
- - !ruby/object:Gem::Dependency
223
- name: activesupport
224
- requirement: !ruby/object:Gem::Requirement
225
- none: false
226
- requirements:
227
- - - ! '>='
228
- - !ruby/object:Gem::Version
229
- version: '3.2'
230
- type: :runtime
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
- requirements:
235
- - - ! '>='
236
- - !ruby/object:Gem::Version
237
- version: '3.2'
238
- - !ruby/object:Gem::Dependency
239
- name: nestful
240
- requirement: !ruby/object:Gem::Requirement
241
- none: false
242
- requirements:
243
- - - ! '>='
244
- - !ruby/object:Gem::Version
245
- version: 0.0.8
246
- type: :runtime
247
- prerelease: false
248
- version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
- requirements:
251
- - - ! '>='
252
- - !ruby/object:Gem::Version
253
- version: 0.0.8
254
190
  description: An extension to make DataMapper working on Parse.com
255
191
  email: zhiqiang.lei@gmail.com
256
192
  executables: []
257
193
  extensions: []
258
194
  extra_rdoc_files:
259
195
  - LICENSE.txt
196
+ - README.md
260
197
  - README.rdoc
261
198
  files:
262
199
  - .document
@@ -264,9 +201,11 @@ files:
264
201
  - Gemfile
265
202
  - Gemfile.lock
266
203
  - LICENSE.txt
204
+ - README.md
267
205
  - README.rdoc
268
206
  - Rakefile
269
207
  - VERSION
208
+ - dm-parse.gemspec
270
209
  - lib/adapters/parse_adapter.rb
271
210
  - lib/collection.rb
272
211
  - lib/dm-parse.rb
@@ -274,11 +213,15 @@ files:
274
213
  - lib/parse/query.rb
275
214
  - lib/parse/resource.rb
276
215
  - lib/property/parse_date.rb
216
+ - lib/property/parse_file.rb
217
+ - lib/property/parse_geo_point.rb
277
218
  - lib/property/parse_key.rb
278
219
  - lib/property/parse_pointer.rb
279
220
  - spec/integration_spec.rb
280
221
  - spec/parse_adapter_spec.rb
281
222
  - spec/parse_date_spec.rb
223
+ - spec/parse_file_spec.rb
224
+ - spec/parse_geo_point_spec.rb
282
225
  - spec/parse_key_spec.rb
283
226
  - spec/parse_pointer_spec.rb
284
227
  - spec/query_spec.rb
@@ -299,7 +242,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
299
242
  version: '0'
300
243
  segments:
301
244
  - 0
302
- hash: -2371305649373377207
245
+ hash: -458598293042877060
303
246
  required_rubygems_version: !ruby/object:Gem::Requirement
304
247
  none: false
305
248
  requirements: