paraphrase 0.9.0 → 0.10.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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/Appraisals +12 -18
- data/CHANGELOG.md +13 -1
- data/README.md +53 -11
- data/gemfiles/3.1.gemfile +3 -3
- data/gemfiles/3.1.gemfile.lock +47 -42
- data/gemfiles/3.2.gemfile +3 -3
- data/gemfiles/3.2.gemfile.lock +36 -32
- data/gemfiles/4.0.gemfile +3 -3
- data/gemfiles/4.0.gemfile.lock +38 -36
- data/gemfiles/4.1.gemfile +3 -3
- data/gemfiles/4.1.gemfile.lock +35 -31
- data/lib/paraphrase.rb +14 -3
- data/lib/paraphrase/active_model.rb +1 -0
- data/lib/paraphrase/mapping.rb +28 -0
- data/lib/paraphrase/{params.rb → params_filter.rb} +10 -4
- data/lib/paraphrase/query.rb +64 -41
- data/lib/paraphrase/rails.rb +2 -0
- data/lib/paraphrase/repository.rb +36 -0
- data/lib/paraphrase/syntax.rb +12 -2
- data/lib/paraphrase/version.rb +1 -1
- data/paraphrase.gemspec +5 -5
- data/spec/paraphrase/query_spec.rb +39 -10
- data/spec/paraphrase/syntax_spec.rb +1 -1
- data/spec/spec_helper.rb +7 -8
- metadata +15 -19
- data/gemfiles/3.0.gemfile +0 -9
- data/gemfiles/3.0.gemfile.lock +0 -100
- data/lib/paraphrase/errors.rb +0 -3
- data/lib/paraphrase/scope.rb +0 -56
- data/spec/paraphrase/scope_spec.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7eee455eab9622de9d86136dfe8d1b5b766373e1
|
4
|
+
data.tar.gz: fbba2474e3febdd44f4937347cdf14888de70125
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 146a851d81c039939c2ba35688aaf55e01bc85bf2d3608a1d5441668aee600e37d46cc03aa8eb51b672e77de9fe1704829b239b3e3dd4f44222a3ad1cfc35711
|
7
|
+
data.tar.gz: d383c9f1d43cd46e979618feb616c34dcc1acd58fdb70b51c9438cf313aef93540f132422712b6f8f6e2ac240dbe259bb9cf65235cb02cb0c7c248beac681e5f
|
data/.travis.yml
CHANGED
@@ -3,8 +3,8 @@ rvm:
|
|
3
3
|
- 2.0.0
|
4
4
|
- 2.1.1
|
5
5
|
- jruby-19mode
|
6
|
+
- rbx-2
|
6
7
|
gemfile:
|
7
|
-
- gemfiles/3.0.gemfile
|
8
8
|
- gemfiles/3.1.gemfile
|
9
9
|
- gemfiles/3.2.gemfile
|
10
10
|
- gemfiles/4.0.gemfile
|
@@ -15,3 +15,6 @@ env:
|
|
15
15
|
global:
|
16
16
|
# Code Climate coverage reporting
|
17
17
|
- secure: "VylP1haJogwCq04GRrM3hVfNT4YJiZ4RJoklOQLgqPMRalOCzVPOIRoTz3qpVbdQHf3l18VhVDrDbu2W2qfBKJq7/anIuYYgPd0uRAGliZD4h5B2PgQDqvPeTEftj/g3IYDh6PvZCuhgnxMdldmSnxd9WAjAnkLtjoiLgE6elCE="
|
18
|
+
matrix:
|
19
|
+
allow_failures:
|
20
|
+
- rvm: rbx-2
|
data/Appraisals
CHANGED
@@ -1,29 +1,23 @@
|
|
1
|
-
appraise '3.0' do
|
2
|
-
gem 'activerecord', '~> 3.0'
|
3
|
-
gem 'activesupport', '~> 3.0'
|
4
|
-
gem 'actionpack', '~> 3.0'
|
5
|
-
end
|
6
|
-
|
7
1
|
appraise '3.1' do
|
8
|
-
gem 'activerecord', '~> 3.1'
|
9
|
-
gem 'activesupport', '~> 3.1'
|
10
|
-
gem 'actionpack', '~> 3.1'
|
2
|
+
gem 'activerecord', '~> 3.1.0'
|
3
|
+
gem 'activesupport', '~> 3.1.0'
|
4
|
+
gem 'actionpack', '~> 3.1.0'
|
11
5
|
end
|
12
6
|
|
13
7
|
appraise '3.2' do
|
14
|
-
gem 'activerecord', '~> 3.2'
|
15
|
-
gem 'activesupport', '~> 3.2'
|
16
|
-
gem 'actionpack', '~> 3.2'
|
8
|
+
gem 'activerecord', '~> 3.2.0'
|
9
|
+
gem 'activesupport', '~> 3.2.0'
|
10
|
+
gem 'actionpack', '~> 3.2.0'
|
17
11
|
end
|
18
12
|
|
19
13
|
appraise '4.0' do
|
20
|
-
gem 'activerecord', '~> 4.0'
|
21
|
-
gem 'activesupport', '~> 4.0'
|
22
|
-
gem 'actionpack', '~> 4.0'
|
14
|
+
gem 'activerecord', '~> 4.0.0'
|
15
|
+
gem 'activesupport', '~> 4.0.0'
|
16
|
+
gem 'actionpack', '~> 4.0.0'
|
23
17
|
end
|
24
18
|
|
25
19
|
appraise '4.1' do
|
26
|
-
gem 'activerecord', '~> 4.1'
|
27
|
-
gem 'activesupport', '~> 4.1'
|
28
|
-
gem 'actionpack', '~> 4.1'
|
20
|
+
gem 'activerecord', '~> 4.1.0'
|
21
|
+
gem 'activesupport', '~> 4.1.0'
|
22
|
+
gem 'actionpack', '~> 4.1.0'
|
29
23
|
end
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,16 @@
|
|
1
|
-
##
|
1
|
+
## Next Release
|
2
|
+
|
3
|
+
* Add convenience class-level API for pre-processing query params
|
4
|
+
* Pre-process params and then scrub them from
|
5
|
+
* Rename `Scope` to the more appropriate `Mapping`
|
6
|
+
* Mark `Mapping` and `ActiveModel` classes as private API
|
7
|
+
* Add ability to define scopes in the `Query` subclass via `Paraphrase::Repository`
|
8
|
+
(see README)
|
9
|
+
* Refactor `Query.source` to be a regular class attribute
|
10
|
+
* Require `Paraphrase::Query` be initialized with an `ActiveRecord::Relation`
|
11
|
+
instance. Ensure this happens in `Paraphrase::Syntax`.
|
12
|
+
|
13
|
+
## 0.9.0 / 5-2-2014
|
2
14
|
|
3
15
|
* Define methods to process query params on a subclass of `Paraphrase::Params`
|
4
16
|
that also handles filtering blank query params.
|
data/README.md
CHANGED
@@ -42,7 +42,7 @@ symbol to the `source` method.
|
|
42
42
|
# app/queries/admin_post_query.rb
|
43
43
|
class AdminPostQuery < Paraphrase::Query
|
44
44
|
# This needs the source specific since it will look for an `AdminPost` model.
|
45
|
-
source :Post
|
45
|
+
self.source = :Post
|
46
46
|
end
|
47
47
|
```
|
48
48
|
|
@@ -196,23 +196,26 @@ Post.paraphrase(published: '1').to_sql
|
|
196
196
|
|
197
197
|
### Pre-processing Query Params
|
198
198
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
class.
|
199
|
+
To pre-process a query param, such as an ISO formatted date, you can either use
|
200
|
+
the `param` class method or re-open the `ParamsFilter` class that is defined
|
201
|
+
when inheriting from `Paraphrase::Query`. Using the `param` class method
|
202
|
+
defines the equivalent method on the `ParamsFilter` class.
|
203
|
+
|
204
|
+
In the method, you have access to the `params` attribute that represents the
|
205
|
+
original, unprocessed params.
|
203
206
|
|
204
207
|
```ruby
|
205
208
|
class PostQuery < Paraphrase::Query
|
206
209
|
map :start_date, :end_date, to: :published_within
|
207
210
|
|
208
|
-
class
|
211
|
+
class ParamsFilter
|
209
212
|
def start_date
|
210
|
-
|
213
|
+
Time.zone.parse(params[:start_date]) rescue nil
|
211
214
|
end
|
215
|
+
end
|
212
216
|
|
213
|
-
|
214
|
-
|
215
|
-
end
|
217
|
+
param :end_date do
|
218
|
+
Time.zone.parse(params[:end_date]) rescue nil
|
216
219
|
end
|
217
220
|
end
|
218
221
|
|
@@ -230,9 +233,48 @@ In the above example, if either `:start_date` or `:end_date` are incorrectly
|
|
230
233
|
formatted, the `pubished_within` scope will not be applied because the values
|
231
234
|
are will be `nil`.
|
232
235
|
|
236
|
+
### Define scopes on the `Query` class
|
237
|
+
|
238
|
+
If your model is cluttered with scopes that aren't general-purpose, and only
|
239
|
+
used by your query class, you can define them in the query class. You can
|
240
|
+
define scopes by re-opening the `Repository` class defined on inheritance from
|
241
|
+
`Paraphrase::Query`. There is also the `scope` class method that serves as a
|
242
|
+
proxy for defining methods on the `Repository` class.
|
243
|
+
|
244
|
+
In the method, you have to call the scope on the `relation` property of the
|
245
|
+
`Repository` instance.
|
246
|
+
|
247
|
+
```ruby
|
248
|
+
class PostQuery < Paraphrase::Query
|
249
|
+
map :title, to: :titled
|
250
|
+
map :authors, to: :by_users
|
251
|
+
map :is_published, to: :published
|
252
|
+
|
253
|
+
scope :by_users do |authors|
|
254
|
+
relation.joins(:user).where(users: { name: authors })
|
255
|
+
end
|
256
|
+
|
257
|
+
# OR
|
258
|
+
# class Repository
|
259
|
+
# def by_users(authors)
|
260
|
+
# relation.joins(:user).where(users: { name: authors })
|
261
|
+
# end
|
262
|
+
# end
|
263
|
+
end
|
264
|
+
|
265
|
+
class Post < ActiveRecord::Base
|
266
|
+
end
|
267
|
+
|
268
|
+
Post.paraphrase(authors: ['Robert', 'Susie']).to_sql
|
269
|
+
# => SELECT "posts".* FROM "posts"
|
270
|
+
# INNER JOIN "users" ON "users"."id" = "posts"."user_id"
|
271
|
+
# WHERE "users"."name" IN ('Robert', 'Susie')
|
272
|
+
```
|
273
|
+
|
233
274
|
### Using with `FormBuilder`
|
234
275
|
|
235
|
-
The `Paraphrase::Query` class implements the `ActiveModel` API required for use
|
276
|
+
The `Paraphrase::Query` class implements the `ActiveModel` API required for use
|
277
|
+
with form builders.
|
236
278
|
|
237
279
|
```ruby
|
238
280
|
class PostQuery < Paraphrase::Query
|
data/gemfiles/3.1.gemfile
CHANGED
data/gemfiles/3.1.gemfile.lock
CHANGED
@@ -1,39 +1,40 @@
|
|
1
1
|
PATH
|
2
|
-
remote:
|
2
|
+
remote: ../
|
3
3
|
specs:
|
4
|
-
paraphrase (0.
|
5
|
-
activemodel (>= 3.
|
6
|
-
activerecord (>= 3.
|
7
|
-
activesupport (>= 3.
|
4
|
+
paraphrase (0.10.0)
|
5
|
+
activemodel (>= 3.1, < 4.2)
|
6
|
+
activerecord (>= 3.1, < 4.2)
|
7
|
+
activesupport (>= 3.1, < 4.2)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
actionpack (3.
|
13
|
-
activemodel (= 3.
|
14
|
-
activesupport (= 3.
|
12
|
+
actionpack (3.1.12)
|
13
|
+
activemodel (= 3.1.12)
|
14
|
+
activesupport (= 3.1.12)
|
15
15
|
builder (~> 3.0.0)
|
16
16
|
erubis (~> 2.7.0)
|
17
|
-
|
18
|
-
rack (~> 1.
|
17
|
+
i18n (~> 0.6)
|
18
|
+
rack (~> 1.3.6)
|
19
19
|
rack-cache (~> 1.2)
|
20
|
+
rack-mount (~> 0.8.2)
|
20
21
|
rack-test (~> 0.6.1)
|
21
|
-
sprockets (~> 2.
|
22
|
-
activemodel (3.
|
23
|
-
activesupport (= 3.
|
22
|
+
sprockets (~> 2.0.4)
|
23
|
+
activemodel (3.1.12)
|
24
|
+
activesupport (= 3.1.12)
|
24
25
|
builder (~> 3.0.0)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
i18n (~> 0.6)
|
27
|
+
activerecord (3.1.12)
|
28
|
+
activemodel (= 3.1.12)
|
29
|
+
activesupport (= 3.1.12)
|
30
|
+
arel (~> 2.2.3)
|
29
31
|
tzinfo (~> 0.3.29)
|
30
|
-
activesupport (3.
|
31
|
-
i18n (~> 0.6, >= 0.6.4)
|
32
|
+
activesupport (3.1.12)
|
32
33
|
multi_json (~> 1.0)
|
33
34
|
appraisal (0.5.2)
|
34
35
|
bundler
|
35
36
|
rake
|
36
|
-
arel (
|
37
|
+
arel (2.2.3)
|
37
38
|
builder (3.0.4)
|
38
39
|
codeclimate-test-reporter (0.3.0)
|
39
40
|
simplecov (>= 0.7.1, < 1.0.0)
|
@@ -43,51 +44,55 @@ GEM
|
|
43
44
|
erubis (2.7.0)
|
44
45
|
hike (1.2.3)
|
45
46
|
i18n (0.6.9)
|
46
|
-
journey (1.0.4)
|
47
47
|
method_source (0.8.2)
|
48
|
-
multi_json (1.
|
49
|
-
pry (0.9.12.
|
48
|
+
multi_json (1.10.1)
|
49
|
+
pry (0.9.12.6)
|
50
50
|
coderay (~> 1.0)
|
51
51
|
method_source (~> 0.8)
|
52
52
|
slop (~> 3.4)
|
53
|
-
rack (1.
|
53
|
+
rack (1.3.10)
|
54
54
|
rack-cache (1.2)
|
55
55
|
rack (>= 0.4)
|
56
|
+
rack-mount (0.8.3)
|
57
|
+
rack (>= 1.0.0)
|
56
58
|
rack-test (0.6.2)
|
57
59
|
rack (>= 1.0)
|
58
60
|
rake (0.9.6)
|
59
61
|
redcarpet (2.1.1)
|
60
|
-
rspec (
|
61
|
-
rspec-core (~>
|
62
|
-
rspec-expectations (~>
|
63
|
-
rspec-mocks (~>
|
64
|
-
rspec-core (
|
65
|
-
|
66
|
-
|
67
|
-
|
62
|
+
rspec (3.0.0)
|
63
|
+
rspec-core (~> 3.0.0)
|
64
|
+
rspec-expectations (~> 3.0.0)
|
65
|
+
rspec-mocks (~> 3.0.0)
|
66
|
+
rspec-core (3.0.0)
|
67
|
+
rspec-support (~> 3.0.0)
|
68
|
+
rspec-expectations (3.0.0)
|
69
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
70
|
+
rspec-support (~> 3.0.0)
|
71
|
+
rspec-mocks (3.0.0)
|
72
|
+
rspec-support (~> 3.0.0)
|
73
|
+
rspec-support (3.0.0)
|
68
74
|
simplecov (0.8.2)
|
69
75
|
docile (~> 1.1.0)
|
70
76
|
multi_json
|
71
77
|
simplecov-html (~> 0.8.0)
|
72
78
|
simplecov-html (0.8.0)
|
73
|
-
slop (3.
|
74
|
-
sprockets (2.
|
79
|
+
slop (3.5.0)
|
80
|
+
sprockets (2.0.4)
|
75
81
|
hike (~> 1.2)
|
76
|
-
multi_json (~> 1.0)
|
77
82
|
rack (~> 1.0)
|
78
83
|
tilt (~> 1.1, != 1.3.0)
|
79
|
-
sqlite3 (1.3.
|
84
|
+
sqlite3 (1.3.9)
|
80
85
|
tilt (1.4.1)
|
81
|
-
tzinfo (0.3.
|
82
|
-
yard (0.8.7.
|
86
|
+
tzinfo (0.3.39)
|
87
|
+
yard (0.8.7.4)
|
83
88
|
|
84
89
|
PLATFORMS
|
85
90
|
ruby
|
86
91
|
|
87
92
|
DEPENDENCIES
|
88
|
-
actionpack (~> 3.1)
|
89
|
-
activerecord (~> 3.1)
|
90
|
-
activesupport (~> 3.1)
|
93
|
+
actionpack (~> 3.1.0)
|
94
|
+
activerecord (~> 3.1.0)
|
95
|
+
activesupport (~> 3.1.0)
|
91
96
|
appraisal (~> 0.4)
|
92
97
|
bundler (~> 1.0)
|
93
98
|
codeclimate-test-reporter (~> 0.3)
|
@@ -95,6 +100,6 @@ DEPENDENCIES
|
|
95
100
|
pry (~> 0.9)
|
96
101
|
rake (~> 0.9.2)
|
97
102
|
redcarpet (~> 2.1.1)
|
98
|
-
rspec (~>
|
103
|
+
rspec (~> 3.0)
|
99
104
|
sqlite3 (~> 1.3.6)
|
100
105
|
yard (~> 0.7)
|
data/gemfiles/3.2.gemfile
CHANGED
data/gemfiles/3.2.gemfile.lock
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
PATH
|
2
|
-
remote:
|
2
|
+
remote: ../
|
3
3
|
specs:
|
4
|
-
paraphrase (0.
|
5
|
-
activemodel (>= 3.
|
6
|
-
activerecord (>= 3.
|
7
|
-
activesupport (>= 3.
|
4
|
+
paraphrase (0.10.0)
|
5
|
+
activemodel (>= 3.1, < 4.2)
|
6
|
+
activerecord (>= 3.1, < 4.2)
|
7
|
+
activesupport (>= 3.1, < 4.2)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
actionpack (3.2.
|
13
|
-
activemodel (= 3.2.
|
14
|
-
activesupport (= 3.2.
|
12
|
+
actionpack (3.2.18)
|
13
|
+
activemodel (= 3.2.18)
|
14
|
+
activesupport (= 3.2.18)
|
15
15
|
builder (~> 3.0.0)
|
16
16
|
erubis (~> 2.7.0)
|
17
17
|
journey (~> 1.0.4)
|
@@ -19,15 +19,15 @@ GEM
|
|
19
19
|
rack-cache (~> 1.2)
|
20
20
|
rack-test (~> 0.6.1)
|
21
21
|
sprockets (~> 2.2.1)
|
22
|
-
activemodel (3.2.
|
23
|
-
activesupport (= 3.2.
|
22
|
+
activemodel (3.2.18)
|
23
|
+
activesupport (= 3.2.18)
|
24
24
|
builder (~> 3.0.0)
|
25
|
-
activerecord (3.2.
|
26
|
-
activemodel (= 3.2.
|
27
|
-
activesupport (= 3.2.
|
25
|
+
activerecord (3.2.18)
|
26
|
+
activemodel (= 3.2.18)
|
27
|
+
activesupport (= 3.2.18)
|
28
28
|
arel (~> 3.0.2)
|
29
29
|
tzinfo (~> 0.3.29)
|
30
|
-
activesupport (3.2.
|
30
|
+
activesupport (3.2.18)
|
31
31
|
i18n (~> 0.6, >= 0.6.4)
|
32
32
|
multi_json (~> 1.0)
|
33
33
|
appraisal (0.5.2)
|
@@ -45,8 +45,8 @@ GEM
|
|
45
45
|
i18n (0.6.9)
|
46
46
|
journey (1.0.4)
|
47
47
|
method_source (0.8.2)
|
48
|
-
multi_json (1.
|
49
|
-
pry (0.9.12.
|
48
|
+
multi_json (1.10.1)
|
49
|
+
pry (0.9.12.6)
|
50
50
|
coderay (~> 1.0)
|
51
51
|
method_source (~> 0.8)
|
52
52
|
slop (~> 3.4)
|
@@ -57,37 +57,41 @@ GEM
|
|
57
57
|
rack (>= 1.0)
|
58
58
|
rake (0.9.6)
|
59
59
|
redcarpet (2.1.1)
|
60
|
-
rspec (
|
61
|
-
rspec-core (~>
|
62
|
-
rspec-expectations (~>
|
63
|
-
rspec-mocks (~>
|
64
|
-
rspec-core (
|
65
|
-
|
66
|
-
|
67
|
-
|
60
|
+
rspec (3.0.0)
|
61
|
+
rspec-core (~> 3.0.0)
|
62
|
+
rspec-expectations (~> 3.0.0)
|
63
|
+
rspec-mocks (~> 3.0.0)
|
64
|
+
rspec-core (3.0.0)
|
65
|
+
rspec-support (~> 3.0.0)
|
66
|
+
rspec-expectations (3.0.0)
|
67
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
68
|
+
rspec-support (~> 3.0.0)
|
69
|
+
rspec-mocks (3.0.0)
|
70
|
+
rspec-support (~> 3.0.0)
|
71
|
+
rspec-support (3.0.0)
|
68
72
|
simplecov (0.8.2)
|
69
73
|
docile (~> 1.1.0)
|
70
74
|
multi_json
|
71
75
|
simplecov-html (~> 0.8.0)
|
72
76
|
simplecov-html (0.8.0)
|
73
|
-
slop (3.
|
77
|
+
slop (3.5.0)
|
74
78
|
sprockets (2.2.2)
|
75
79
|
hike (~> 1.2)
|
76
80
|
multi_json (~> 1.0)
|
77
81
|
rack (~> 1.0)
|
78
82
|
tilt (~> 1.1, != 1.3.0)
|
79
|
-
sqlite3 (1.3.
|
83
|
+
sqlite3 (1.3.9)
|
80
84
|
tilt (1.4.1)
|
81
|
-
tzinfo (0.3.
|
82
|
-
yard (0.8.7.
|
85
|
+
tzinfo (0.3.39)
|
86
|
+
yard (0.8.7.4)
|
83
87
|
|
84
88
|
PLATFORMS
|
85
89
|
ruby
|
86
90
|
|
87
91
|
DEPENDENCIES
|
88
|
-
actionpack (~> 3.2)
|
89
|
-
activerecord (~> 3.2)
|
90
|
-
activesupport (~> 3.2)
|
92
|
+
actionpack (~> 3.2.0)
|
93
|
+
activerecord (~> 3.2.0)
|
94
|
+
activesupport (~> 3.2.0)
|
91
95
|
appraisal (~> 0.4)
|
92
96
|
bundler (~> 1.0)
|
93
97
|
codeclimate-test-reporter (~> 0.3)
|
@@ -95,6 +99,6 @@ DEPENDENCIES
|
|
95
99
|
pry (~> 0.9)
|
96
100
|
rake (~> 0.9.2)
|
97
101
|
redcarpet (~> 2.1.1)
|
98
|
-
rspec (~>
|
102
|
+
rspec (~> 3.0)
|
99
103
|
sqlite3 (~> 1.3.6)
|
100
104
|
yard (~> 0.7)
|