parelation 0.0.1 → 0.1.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/.gemfiles/4.2.gemfile +3 -0
- data/.travis.yml +2 -1
- data/LICENSE +1 -1
- data/README.md +15 -9
- data/lib/parelation.rb +1 -1
- data/lib/parelation/criteria.rb +2 -2
- data/lib/parelation/criteria/limit.rb +1 -2
- data/lib/parelation/criteria/offset.rb +1 -2
- data/lib/parelation/criteria/order.rb +1 -2
- data/lib/parelation/criteria/query.rb +1 -2
- data/lib/parelation/criteria/select.rb +1 -2
- data/lib/parelation/criteria/where.rb +2 -3
- data/lib/parelation/criteria/where/directional_query_applier.rb +52 -48
- data/lib/parelation/version.rb +1 -1
- data/parelation.gemspec +7 -8
- data/spec/lib/applier_spec.rb +3 -2
- data/spec/spec_helper.rb +2 -9
- data/spec/support/db.rb +3 -4
- data/spec/support/env.rb +0 -6
- metadata +32 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 909bd90faf2386e45af33c7f28586f14a5ae442c
|
4
|
+
data.tar.gz: d8792b67b2a9d034dbdfb17dadae325513de1c92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad4fd5fd7970aa0f453af670ed7875acaf0add58d8105b512d3da7d93d836a21316507d8e5c48f4aeeb6199a869d14b5cae5eef33b8f8ae97c7bcde0dca0e1d4
|
7
|
+
data.tar.gz: 5d8dc24b0bd2bb21b2a8b6cab208aec76523d7378bbdef3f465954eac496c8f2b09ed0a358a7c3ba88028ef06aa9a3ab63b276e88d64aa015f4c474e71019764
|
data/.travis.yml
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Parelation
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/parelation)
|
3
4
|
[](https://codeclimate.com/github/meskyanichi/parelation)
|
4
5
|
[](https://travis-ci.org/meskyanichi/parelation)
|
5
6
|
|
@@ -7,21 +8,21 @@ Parelation, for Rails/ActiveRecord 4.1.0+, allows you to query your ActiveRecord
|
|
7
8
|
|
8
9
|
This library was developed for- and extracted from [HireFire].
|
9
10
|
|
11
|
+
The documentation can be found on [RubyDoc].
|
12
|
+
|
10
13
|
### Compatibility
|
11
14
|
|
12
15
|
- Rails/ActiveRecord 4.1.0+
|
13
16
|
- Ruby (MRI) 2.0+
|
14
|
-
- Ruby (RBX) 2.2+
|
15
17
|
|
16
18
|
### Installation
|
17
19
|
|
18
|
-
|
20
|
+
Add the gem to your Gemfile and run `bundle`.
|
19
21
|
|
20
22
|
```rb
|
21
|
-
gem "parelation"
|
23
|
+
gem "parelation"
|
22
24
|
```
|
23
25
|
|
24
|
-
*This library won't be hosted on RubyGems.org until it's been tested more in development.*
|
25
26
|
|
26
27
|
### Example
|
27
28
|
|
@@ -241,7 +242,6 @@ This will tell client developers what parameter failed in the HTTP response. Thi
|
|
241
242
|
Contributions are welcome, but please conform to these requirements:
|
242
243
|
|
243
244
|
- Ruby (MRI) 2.0+
|
244
|
-
- Ruby (RBX) 2.2+
|
245
245
|
- ActiveRecord 4.1.0+
|
246
246
|
- 100% Spec Coverage
|
247
247
|
- Generated by when running the test suite
|
@@ -267,6 +267,12 @@ rspec spec
|
|
267
267
|
rubycritic lib
|
268
268
|
```
|
269
269
|
|
270
|
+
To run the local documentation server:
|
271
|
+
|
272
|
+
```
|
273
|
+
yard server --reload
|
274
|
+
```
|
275
|
+
|
270
276
|
Create a new branch and start hacking:
|
271
277
|
|
272
278
|
```
|
@@ -278,11 +284,11 @@ Submit a pull request.
|
|
278
284
|
|
279
285
|
### Author / License
|
280
286
|
|
281
|
-
|
282
|
-
Released under the MIT [License].
|
287
|
+
Released under the [MIT License] by [Michael van Rooijen].
|
283
288
|
|
284
|
-
[
|
289
|
+
[Michael van Rooijen]: https://twitter.com/meskyanichi
|
285
290
|
[HireFire]: http://hirefire.io
|
286
291
|
[Passing Specs]: https://travis-ci.org/meskyanichi/parelation
|
287
292
|
[Code Climate Score]: https://codeclimate.com/github/meskyanichi/parelation
|
288
|
-
[
|
293
|
+
[RubyDoc]: http://rubydoc.info/github/meskyanichi/parelation/master/frames
|
294
|
+
[MIT License]: https://github.com/meskyanichi/parelation/blob/master/LICENSE
|
data/lib/parelation.rb
CHANGED
data/lib/parelation/criteria.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
class Parelation::Criteria
|
2
2
|
|
3
3
|
# @return [ActiveRecord::Relation] the current criteria chain
|
4
4
|
#
|
@@ -14,7 +14,7 @@ module Parelation::Criteria
|
|
14
14
|
|
15
15
|
# @param chain [ActiveRecord::Relation]
|
16
16
|
# @param param [String]
|
17
|
-
# @param value [String,
|
17
|
+
# @param value [String, Array, Hash]
|
18
18
|
#
|
19
19
|
def initialize(chain, param, value)
|
20
20
|
@chain = chain
|
@@ -1,5 +1,4 @@
|
|
1
|
-
class Parelation::Criteria::Where
|
2
|
-
include Parelation::Criteria
|
1
|
+
class Parelation::Criteria::Where < Parelation::Criteria
|
3
2
|
|
4
3
|
require_relative "where/caster"
|
5
4
|
require_relative "where/directional_query_applier"
|
@@ -22,7 +21,7 @@ class Parelation::Criteria::Where
|
|
22
21
|
when "where_not"
|
23
22
|
chain.where.not(field => value)
|
24
23
|
when "where_gt", "where_gte", "where_lt", "where_lte"
|
25
|
-
DirectionalQueryApplier.new(param,
|
24
|
+
DirectionalQueryApplier.new(chain, param, field, value).apply
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -1,49 +1,53 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
chain.where(sql, key, value)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
# @return [String] the base SQL template to build queries on-top of
|
45
|
-
#
|
46
|
-
def sql
|
47
|
-
%Q{"#{chain.arel_table.name}".? #{OPERATOR_MAPPING[operator]} ?}
|
48
|
-
end
|
1
|
+
class Parelation::Criteria::Where::DirectionalQueryApplier
|
2
|
+
|
3
|
+
# @return [Hash] keyword to operator mappings
|
4
|
+
#
|
5
|
+
OPERATOR_MAPPING = {
|
6
|
+
"where_gt" => ">",
|
7
|
+
"where_gte" => ">=",
|
8
|
+
"where_lt" => "<",
|
9
|
+
"where_lte" => "<="
|
10
|
+
}
|
11
|
+
|
12
|
+
# @return [ActiveRecord::Relation]
|
13
|
+
#
|
14
|
+
attr_reader :chain
|
15
|
+
|
16
|
+
# @return [String]
|
17
|
+
#
|
18
|
+
attr_reader :operator
|
19
|
+
|
20
|
+
# @return [String]
|
21
|
+
#
|
22
|
+
attr_reader :field
|
23
|
+
|
24
|
+
# @return [String]
|
25
|
+
#
|
26
|
+
attr_reader :value
|
27
|
+
|
28
|
+
# @param chain [ActiveRecord::Relation] the chain to apply to
|
29
|
+
# @param operator [String] the named operator from the params
|
30
|
+
# @param field [String] the field to query on
|
31
|
+
# @param value [String] the value of the query
|
32
|
+
#
|
33
|
+
def initialize(chain, operator, field, value)
|
34
|
+
@chain = chain
|
35
|
+
@operator = operator
|
36
|
+
@field = field
|
37
|
+
@value = value
|
49
38
|
end
|
39
|
+
|
40
|
+
# @return [ActiveRecord::Relation] the chain with newly applied operations
|
41
|
+
#
|
42
|
+
def apply
|
43
|
+
chain.where(sql, field, value)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# @return [String] the base SQL template to build queries on-top of
|
49
|
+
#
|
50
|
+
def sql
|
51
|
+
%Q{"#{chain.arel_table.name}".? #{OPERATOR_MAPPING[operator]} ?}
|
52
|
+
end
|
53
|
+
end
|
data/lib/parelation/version.rb
CHANGED
data/parelation.gemspec
CHANGED
@@ -18,12 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
|
19
19
|
spec.add_dependency "activerecord", ">= 4.1.0"
|
20
20
|
spec.add_development_dependency "bundler"
|
21
|
-
spec.add_development_dependency "rake"
|
22
|
-
spec.add_development_dependency "rspec"
|
23
|
-
spec.add_development_dependency "
|
24
|
-
spec.add_development_dependency "
|
25
|
-
spec.add_development_dependency "
|
26
|
-
spec.add_development_dependency "
|
27
|
-
spec.add_development_dependency "
|
28
|
-
spec.add_development_dependency "yard"
|
21
|
+
spec.add_development_dependency "rake", "~> 10.4.2"
|
22
|
+
spec.add_development_dependency "rspec", "~> 3.1.0"
|
23
|
+
spec.add_development_dependency "sqlite3", "~> 1.3.10"
|
24
|
+
spec.add_development_dependency "database_cleaner", "~> 1.4.0"
|
25
|
+
spec.add_development_dependency "pry", "~> 0.10.1"
|
26
|
+
spec.add_development_dependency "simplecov", "~> 0.9.1"
|
27
|
+
spec.add_development_dependency "yard", "~> 0.8.7.6"
|
29
28
|
end
|
data/spec/lib/applier_spec.rb
CHANGED
@@ -22,8 +22,9 @@ describe Parelation::Applier do
|
|
22
22
|
"offset" => "100"
|
23
23
|
}
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
project = Project.create
|
26
|
+
criteria = klass.new(project.tickets, params).apply
|
27
|
+
ar_query = project.tickets
|
27
28
|
.select(:id, :name, :state, :message)
|
28
29
|
.where(state: ["open", "pending"])
|
29
30
|
.where.not(state: "closed")
|
data/spec/spec_helper.rb
CHANGED
@@ -8,13 +8,6 @@ SimpleCov.start
|
|
8
8
|
require "parelation"
|
9
9
|
|
10
10
|
RSpec.configure do |config|
|
11
|
-
config.
|
12
|
-
|
13
|
-
config.before do
|
14
|
-
DatabaseCleaner.start
|
15
|
-
end
|
16
|
-
|
17
|
-
config.after do
|
18
|
-
DatabaseCleaner.clean
|
19
|
-
end
|
11
|
+
config.before { DatabaseCleaner.start }
|
12
|
+
config.after { DatabaseCleaner.clean }
|
20
13
|
end
|
data/spec/support/db.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
ActiveRecord::Base
|
2
|
-
|
3
|
-
|
4
|
-
.establish_connection(adapter: "sqlite3", database: ":memory:")
|
1
|
+
ActiveRecord::Base.establish_connection(
|
2
|
+
adapter: "sqlite3", database: ":memory:"
|
3
|
+
)
|
5
4
|
|
6
5
|
class Schema < ActiveRecord::Migration
|
7
6
|
|
data/spec/support/env.rb
CHANGED
@@ -1,14 +1,8 @@
|
|
1
|
-
require "fileutils"
|
2
|
-
require "logger"
|
3
1
|
require "pry"
|
4
2
|
require "sqlite3"
|
5
3
|
require "active_record"
|
6
4
|
|
7
5
|
ROOT_PATH = File.expand_path("../../..", __FILE__)
|
8
6
|
SPEC_PATH = File.join(ROOT_PATH, "spec")
|
9
|
-
TMP_PATH = File.join(ROOT_PATH, "tmp")
|
10
|
-
LOG_PATH = File.join(TMP_PATH, "parelation.log")
|
11
|
-
|
12
|
-
FileUtils.mkdir_p(TMP_PATH)
|
13
7
|
|
14
8
|
require "#{SPEC_PATH}/support/db"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parelation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael van Rooijen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -42,114 +42,100 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 10.4.2
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 10.4.2
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.1.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: mocha
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
68
|
+
version: 3.1.0
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: sqlite3
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- - "
|
73
|
+
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
75
|
+
version: 1.3.10
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
82
|
+
version: 1.3.10
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: database_cleaner
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- - "
|
87
|
+
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 1.4.0
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- - "
|
94
|
+
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 1.4.0
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: pry
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- - "
|
101
|
+
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
103
|
+
version: 0.10.1
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- - "
|
108
|
+
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
110
|
+
version: 0.10.1
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: simplecov
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
|
-
- - "
|
115
|
+
- - "~>"
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
117
|
+
version: 0.9.1
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
|
-
- - "
|
122
|
+
- - "~>"
|
137
123
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
124
|
+
version: 0.9.1
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: yard
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
|
-
- - "
|
129
|
+
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
131
|
+
version: 0.8.7.6
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
|
-
- - "
|
136
|
+
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
138
|
+
version: 0.8.7.6
|
153
139
|
description:
|
154
140
|
email:
|
155
141
|
- michael@vanrooijen.io
|
@@ -158,6 +144,7 @@ extensions: []
|
|
158
144
|
extra_rdoc_files: []
|
159
145
|
files:
|
160
146
|
- ".gemfiles/4.1.gemfile"
|
147
|
+
- ".gemfiles/4.2.gemfile"
|
161
148
|
- ".gitignore"
|
162
149
|
- ".rspec"
|
163
150
|
- ".travis.yml"
|
@@ -213,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
200
|
version: '0'
|
214
201
|
requirements: []
|
215
202
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
203
|
+
rubygems_version: 2.4.5
|
217
204
|
signing_key:
|
218
205
|
specification_version: 4
|
219
206
|
summary: Translates HTTP parameters to ActiveRecord queries.
|