parse_resource 1.6.1 → 1.6.2
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 +49 -42
- data/VERSION +1 -1
- data/lib/base.rb +6 -6
- data/lib/parse_resource.rb +1 -1
- data/lib/{criteria.rb → query.rb} +15 -23
- data/parse_resource.gemspec +4 -4
- data/test/test_parse_resource.rb +21 -0
- data/test/test_query.rb +13 -0
- metadata +24 -24
- data/lib/examples/post.rb +0 -11
data/README.md
CHANGED
@@ -44,7 +44,7 @@ Installation
|
|
44
44
|
Include in your `Gemfile`:
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
gem "parse_resource", "~> 1.6.
|
47
|
+
gem "parse_resource", "~> 1.6.1"
|
48
48
|
```
|
49
49
|
|
50
50
|
Or just gem install:
|
@@ -92,61 +92,68 @@ class Post < ParseResource::Base
|
|
92
92
|
end
|
93
93
|
```
|
94
94
|
|
95
|
-
If you are using version `1.5.11` or earlier, subclass to just `ParseResource
|
95
|
+
If you are using version `1.5.11` or earlier, subclass to just `ParseResource`--or just update to the most recent version.
|
96
96
|
|
97
97
|
Creating, updating, and deleting:
|
98
98
|
|
99
99
|
```ruby
|
100
100
|
p = Post.new
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
p.errors
|
105
|
-
|
106
|
-
p.
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
p.author = "Alan deLevie"
|
111
|
-
=> "Alan deLevie"
|
101
|
+
|
102
|
+
# validations
|
103
|
+
p.valid? #=> false
|
104
|
+
p.errors #=> #<ActiveModel::Errors:0xab71998 ... @messages={:title=>["can't be blank"]}>
|
105
|
+
p.title = "Introducing ParseResource" #=> "Introducing ParseResource"
|
106
|
+
p.valid? #=> true
|
107
|
+
|
108
|
+
# setting more attributes, then saving
|
109
|
+
p.author = "Alan deLevie"
|
112
110
|
p.body = "Ipso Lorem"
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
p.id
|
117
|
-
|
118
|
-
p.
|
119
|
-
|
120
|
-
|
121
|
-
=> "2011-09-19T01:32:04.973Z"
|
111
|
+
p.save #=> #<Post:0xab74864 ... >
|
112
|
+
|
113
|
+
# checking the id generated by Parse's servers
|
114
|
+
p.id #=> "QARfXUILgY"
|
115
|
+
p.updated_at #=> nil
|
116
|
+
p.created_at #=> "2011-09-19T01:32:04.973Z" # does anybody want this to be a DateTime object? Let me know.
|
117
|
+
|
118
|
+
# updating
|
122
119
|
p.title = "[Update] Introducing ParseResource"
|
123
|
-
=> "[Update] Introducing ParseResource"
|
124
120
|
p.save
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
p.destroy
|
129
|
-
|
130
|
-
p.title
|
131
|
-
=> nil
|
121
|
+
p.updated_at #=> "2011-09-19T01:32:37.930Z" # more magic from Parse's servers
|
122
|
+
|
123
|
+
# destroying an object
|
124
|
+
p.destroy #=> nil
|
125
|
+
p.title #=> nil
|
132
126
|
```
|
133
127
|
|
134
128
|
Finding:
|
135
129
|
|
136
130
|
```ruby
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
131
|
+
posts = Post.where(:author => "Arrington")
|
132
|
+
# the query is lazy loaded
|
133
|
+
# nothing gets sent to the Parse server until you run #all, #count, or any Array method on the query
|
134
|
+
# (e.g. #first, #each, or #map)
|
135
|
+
|
136
|
+
posts.each do |post|
|
137
|
+
"#{post.title}, by #{post.author}"
|
138
|
+
end
|
139
|
+
|
140
|
+
posts.map {|p| p.title} #=> ["Unpaid blogger", "Uncrunched"]
|
141
|
+
|
147
142
|
id = "DjiH4Qffke"
|
148
|
-
p = Post.find(id)
|
149
|
-
|
143
|
+
p = Post.find(id) #simple find by id
|
144
|
+
|
145
|
+
#you can chain method calls, just like in ActiveRecord
|
146
|
+
Post.where(:param1 => "foo").where(:param2 => "bar").all
|
147
|
+
|
148
|
+
#destroy all objects
|
149
|
+
Post.destroy_all
|
150
|
+
|
151
|
+
#limit the query
|
152
|
+
posts = Post.limit(5).where(:foo => "bar")
|
153
|
+
posts.length #=> 5
|
154
|
+
|
155
|
+
#get a count
|
156
|
+
Post.where(:bar => "foo").count #=> 1337
|
150
157
|
```
|
151
158
|
|
152
159
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.2
|
data/lib/base.rb
CHANGED
@@ -5,7 +5,7 @@ require "erb"
|
|
5
5
|
require "rest-client"
|
6
6
|
require "json"
|
7
7
|
require "active_support/hash_with_indifferent_access"
|
8
|
-
require "
|
8
|
+
require "query"
|
9
9
|
|
10
10
|
module ParseResource
|
11
11
|
|
@@ -127,32 +127,32 @@ module ParseResource
|
|
127
127
|
# Find a ParseResource::Base object by chaining #where method calls.
|
128
128
|
#
|
129
129
|
def where(*args)
|
130
|
-
|
130
|
+
Query.new(self).where(*args)
|
131
131
|
end
|
132
132
|
|
133
133
|
# Add this at the end of a method chain to get the count of objects, instead of an Array of objects
|
134
134
|
def count
|
135
135
|
#https://www.parse.com/docs/rest#queries-counting
|
136
|
-
|
136
|
+
Query.new(self).count(1)
|
137
137
|
end
|
138
138
|
|
139
139
|
# Find all ParseResource::Base objects for that model.
|
140
140
|
#
|
141
141
|
# @return [Array] an `Array` of objects that subclass `ParseResource`.
|
142
142
|
def all
|
143
|
-
|
143
|
+
Query.new(self).all
|
144
144
|
end
|
145
145
|
|
146
146
|
# Find the first object. Fairly random, not based on any specific condition.
|
147
147
|
#
|
148
148
|
def first
|
149
|
-
|
149
|
+
Query.new(self).limit(1).first
|
150
150
|
end
|
151
151
|
|
152
152
|
# Limits the number of objects returned
|
153
153
|
#
|
154
154
|
def limit(n)
|
155
|
-
|
155
|
+
Query.new(self).limit(n)
|
156
156
|
end
|
157
157
|
|
158
158
|
# Create a ParseResource::Base object.
|
data/lib/parse_resource.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class
|
1
|
+
class Query
|
2
2
|
|
3
3
|
def initialize(klass)
|
4
4
|
@klass = klass
|
@@ -30,25 +30,7 @@ class Criteria
|
|
30
30
|
all
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
# resp = @klass.resource.get(:params => {:where => criteria[:conditions].to_json})
|
35
|
-
# results = JSON.parse(resp)['results']
|
36
|
-
# results.map {|r| @klass.model_name.constantize.new(r, false)}.each(&block)
|
37
|
-
#end
|
38
|
-
|
39
|
-
#def first
|
40
|
-
# resp = @klass.resource.get(:params => {:where => criteria[:conditions].to_json})
|
41
|
-
# results = JSON.parse(resp)['results']
|
42
|
-
# results.map {|r| @klass.model_name.constantize.new(r, false)}.first
|
43
|
-
#end
|
44
|
-
|
45
|
-
#def length
|
46
|
-
# resp = @klass.resource.get(:params => {:where => criteria[:conditions].to_json})
|
47
|
-
# results = JSON.parse(resp)['results']
|
48
|
-
# results.length
|
49
|
-
#end
|
50
|
-
|
51
|
-
def all
|
33
|
+
def execute
|
52
34
|
params = {}
|
53
35
|
params.merge!({:where => criteria[:conditions].to_json}) if criteria[:conditions]
|
54
36
|
params.merge!({:limit => criteria[:limit].to_json}) if criteria[:limit]
|
@@ -66,14 +48,24 @@ class Criteria
|
|
66
48
|
end
|
67
49
|
end
|
68
50
|
|
69
|
-
def
|
51
|
+
def all
|
52
|
+
execute
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_missing(meth, *args, &block)
|
70
56
|
if Array.method_defined?(meth)
|
71
|
-
all.send(meth)
|
57
|
+
all.send(meth, *args, &block)
|
72
58
|
else
|
73
59
|
super
|
74
60
|
end
|
75
61
|
end
|
76
62
|
|
77
|
-
|
63
|
+
def respond_to?(meth)
|
64
|
+
if Array.method_defined?(meth)
|
65
|
+
true
|
66
|
+
else
|
67
|
+
super
|
68
|
+
end
|
69
|
+
end
|
78
70
|
|
79
71
|
end
|
data/parse_resource.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "parse_resource"
|
8
|
-
s.version = "1.6.
|
8
|
+
s.version = "1.6.2"
|
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"]
|
@@ -25,9 +25,8 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"lib/base.rb",
|
28
|
-
"lib/criteria.rb",
|
29
|
-
"lib/examples/post.rb",
|
30
28
|
"lib/parse_resource.rb",
|
29
|
+
"lib/query.rb",
|
31
30
|
"parse_resource.gemspec",
|
32
31
|
"rdoc/ParseResource.html",
|
33
32
|
"rdoc/created.rid",
|
@@ -36,7 +35,8 @@ Gem::Specification.new do |s|
|
|
36
35
|
"rdoc/rdoc.css",
|
37
36
|
"test/active_model_lint_test.rb",
|
38
37
|
"test/helper.rb",
|
39
|
-
"test/test_parse_resource.rb"
|
38
|
+
"test/test_parse_resource.rb",
|
39
|
+
"test/test_query.rb"
|
40
40
|
]
|
41
41
|
s.homepage = "http://github.com/adelevie/parse_resource"
|
42
42
|
s.licenses = ["MIT"]
|
data/test/test_parse_resource.rb
CHANGED
@@ -133,6 +133,26 @@ class TestParseResource < Test::Unit::TestCase
|
|
133
133
|
assert @post.attributes['createdAt']
|
134
134
|
end
|
135
135
|
|
136
|
+
def test_each
|
137
|
+
Post.destroy_all
|
138
|
+
4.times do |i|
|
139
|
+
Post.create(:title => "each", :author => i.to_s)
|
140
|
+
end
|
141
|
+
posts = Post.where(:title => "each")
|
142
|
+
posts.each do |p|
|
143
|
+
assert_equal p.title, "each"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_map
|
148
|
+
Post.destroy_all
|
149
|
+
4.times do |i|
|
150
|
+
Post.create(:title => "map", :author => i.to_s)
|
151
|
+
end
|
152
|
+
posts = Post.where(:title => "map")
|
153
|
+
assert_equal posts.map {|p| p}.class, Array
|
154
|
+
end
|
155
|
+
|
136
156
|
def test_id
|
137
157
|
@post = Post.create(:title => "testing id")
|
138
158
|
assert @post.respond_to?(:id)
|
@@ -168,6 +188,7 @@ class TestParseResource < Test::Unit::TestCase
|
|
168
188
|
p = Post.create(:title => "hello1234567890abc!")
|
169
189
|
id = p.id
|
170
190
|
p.destroy
|
191
|
+
assert_equal p.title, nil
|
171
192
|
assert_equal 0, Post.where(:title => "hello1234567890abc!", :objectId => id).length
|
172
193
|
end
|
173
194
|
|
data/test/test_query.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'parse_resource'
|
3
|
+
|
4
|
+
class TestQuery < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_respond_to
|
7
|
+
q = Query.new(self).where(:foo => "bar")
|
8
|
+
assert_equal q.respond_to?(:length), true
|
9
|
+
assert_equal q.respond_to?(:[]), true
|
10
|
+
assert_equal q.respond_to?(:map), true
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parse_resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-09 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &83699820 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *83699820
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &83699170 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *83699170
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activemodel
|
38
|
-
requirement: &
|
38
|
+
requirement: &83698030 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *83698030
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &83697660 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *83697660
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &83697230 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *83697230
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &83696570 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *83696570
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: reek
|
82
|
-
requirement: &
|
82
|
+
requirement: &83695740 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.2.8
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *83695740
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rest-client
|
93
|
-
requirement: &
|
93
|
+
requirement: &83694910 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *83694910
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: activesupport
|
104
|
-
requirement: &
|
104
|
+
requirement: &83694410 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *83694410
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: activemodel
|
115
|
-
requirement: &
|
115
|
+
requirement: &83693630 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *83693630
|
124
124
|
description: ''
|
125
125
|
email: adelevie@gmail.com
|
126
126
|
executables: []
|
@@ -137,9 +137,8 @@ files:
|
|
137
137
|
- Rakefile
|
138
138
|
- VERSION
|
139
139
|
- lib/base.rb
|
140
|
-
- lib/criteria.rb
|
141
|
-
- lib/examples/post.rb
|
142
140
|
- lib/parse_resource.rb
|
141
|
+
- lib/query.rb
|
143
142
|
- parse_resource.gemspec
|
144
143
|
- rdoc/ParseResource.html
|
145
144
|
- rdoc/created.rid
|
@@ -149,6 +148,7 @@ files:
|
|
149
148
|
- test/active_model_lint_test.rb
|
150
149
|
- test/helper.rb
|
151
150
|
- test/test_parse_resource.rb
|
151
|
+
- test/test_query.rb
|
152
152
|
homepage: http://github.com/adelevie/parse_resource
|
153
153
|
licenses:
|
154
154
|
- MIT
|
@@ -164,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
164
|
version: '0'
|
165
165
|
segments:
|
166
166
|
- 0
|
167
|
-
hash: -
|
167
|
+
hash: -629305873
|
168
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
169
|
none: false
|
170
170
|
requirements:
|
data/lib/examples/post.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'parse_resource'
|
3
|
-
|
4
|
-
path = "parse_resource.yml"
|
5
|
-
settings = YAML.load(ERB.new(File.new(path).read).result)['test']
|
6
|
-
|
7
|
-
ParseResource.load!(settings['app_id'], settings['master_key'])
|
8
|
-
|
9
|
-
class Post < ParseResource
|
10
|
-
fields :title, :author, :body
|
11
|
-
end
|