ransack_mongo 1.0.0 → 1.0.1
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 +1 -1
- data/README.md +6 -1
- data/lib/ransack_mongo/mongo_adapter.rb +15 -1
- data/lib/ransack_mongo/predicate.rb +1 -1
- data/lib/ransack_mongo/version.rb +1 -1
- data/spec/ransack_mongo/mongo_adapter_spec.rb +28 -0
- data/spec/ransack_mongo/query_spec.rb +9 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f59a6372320405705331f828b7b8c102194349bd
|
4
|
+
data.tar.gz: d90c418ebbe503e5a72d730a0a8d4b195f7a1578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40ab45814d16df9f6e54cf752f7592ed3e011c80400053752e7d43734e13477a8060feb1f6e2dadd7eda856715be8a3274ca8efe94deac0187d7f56a52420271
|
7
|
+
data.tar.gz: b15d057641b2ab958e701daeed9b4572776c192e2af34c2462e377f0a0e845daf382ad9b25dce6180726b5219eac2221daf09cbdc45010b5dcfd6c37fda5a7bb
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -40,7 +40,10 @@ def index
|
|
40
40
|
selector = RansackMongo::Query.parse(params[:q])
|
41
41
|
|
42
42
|
# Mongo Ruby Driver
|
43
|
-
@customers = db
|
43
|
+
@customers = db['customers'].find(selector)
|
44
|
+
|
45
|
+
# Moped
|
46
|
+
@customers = session[:customers].find(selector)
|
44
47
|
|
45
48
|
# Mongoid
|
46
49
|
@customers = Customer.where(selector)
|
@@ -53,6 +56,8 @@ end
|
|
53
56
|
* not_eq
|
54
57
|
* cont
|
55
58
|
* in
|
59
|
+
* start
|
60
|
+
* mstart
|
56
61
|
* gt
|
57
62
|
* lt
|
58
63
|
* gteq
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RansackMongo
|
2
2
|
class MongoAdapter
|
3
|
-
PREDICATES = %w[eq not_eq cont in gt lt gteq lteq]
|
3
|
+
PREDICATES = %w[eq not_eq cont in start mstart gt lt gteq lteq]
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@query = {}
|
@@ -26,6 +26,20 @@ module RansackMongo
|
|
26
26
|
@query[attr] = { '$in' => value }
|
27
27
|
end
|
28
28
|
|
29
|
+
def start_matcher(attr, value)
|
30
|
+
@query[attr] = { '$in' => [/^#{value}/] }
|
31
|
+
end
|
32
|
+
|
33
|
+
def mstart_matcher(attr, value)
|
34
|
+
values = value.split(",").map do |current|
|
35
|
+
if (current = current.strip).length > 0
|
36
|
+
/^#{current}/i
|
37
|
+
end
|
38
|
+
end.compact
|
39
|
+
|
40
|
+
@query[attr] = { '$in' => values }
|
41
|
+
end
|
42
|
+
|
29
43
|
def gt_matcher(attr, value)
|
30
44
|
append_sizeable_matcher('$gt', attr, value)
|
31
45
|
end
|
@@ -34,6 +34,34 @@ module RansackMongo
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
describe '#start' do
|
38
|
+
it 'returns the matcher' do
|
39
|
+
subject.start_matcher('object_ref', 'Bruno')
|
40
|
+
|
41
|
+
expect(subject.to_query).to eq("object_ref" => { "$in" => [/^Bruno/] })
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#mstart' do
|
46
|
+
it 'returns the matcher' do
|
47
|
+
subject.mstart_matcher('name', 'Pablo, Bruno,Dude')
|
48
|
+
|
49
|
+
expect(subject.to_query).to eq("name" => { "$in" => [/^Pablo/i, /^Bruno/i, /^Dude/i] })
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'cleans up the input' do
|
53
|
+
subject.mstart_matcher('name', ',, , ,Pablo,,,, ,, , , ,')
|
54
|
+
|
55
|
+
expect(subject.to_query).to eq("name" => { "$in" => [/^Pablo/i] })
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'accepts single values' do
|
59
|
+
subject.mstart_matcher('name', 'Pablo')
|
60
|
+
|
61
|
+
expect(subject.to_query).to eq("name" => { "$in" => [/^Pablo/i] })
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
37
65
|
context 'when combine gt lt gteq and lteq' do
|
38
66
|
it 'returns all matchers' do
|
39
67
|
subject.gt_matcher('count', '1')
|
@@ -19,7 +19,7 @@ module RansackMongo
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
describe '
|
22
|
+
describe '.parse' do
|
23
23
|
context 'when not implement matcher' do
|
24
24
|
it 'raises proper exception' do
|
25
25
|
params = { 'name_foo' => 'Pablo' }
|
@@ -32,7 +32,7 @@ module RansackMongo
|
|
32
32
|
end
|
33
33
|
|
34
34
|
context 'when MongoAdapter' do
|
35
|
-
describe '
|
35
|
+
describe '.parse!' do
|
36
36
|
it 'raises exception when query evaluates to an empty hash' do
|
37
37
|
params = { 'name' => 'Pablo' }
|
38
38
|
expect { described_class.parse!(params) }.to raise_error(MatcherNotFound)
|
@@ -45,13 +45,19 @@ module RansackMongo
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
describe '
|
48
|
+
describe '.parse' do
|
49
49
|
it 'returns the query' do
|
50
50
|
params = { 'name_eq' => 'Pablo', 'fullname_cont' => 'Cantero' }
|
51
51
|
|
52
52
|
expect(described_class.parse(params)).to eq('name' => 'Pablo', 'fullname' => /Cantero/i)
|
53
53
|
end
|
54
54
|
|
55
|
+
context 'when nil query' do
|
56
|
+
it 'returns an empty query' do
|
57
|
+
expect(described_class.parse(nil)).to eq({})
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
55
61
|
context 'when or' do
|
56
62
|
it 'returns the query' do
|
57
63
|
params = { 'name_or_fullname_eq' => 'Pablo' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ransack_mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Cantero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|