ripplr 0.0.7.beta → 0.0.8.beta
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 +2 -1
- data/lib/ripplr.rb +1 -0
- data/lib/ripplr/criteria.rb +27 -1
- data/lib/ripplr/null_object.rb +20 -0
- data/lib/ripplr/version.rb +1 -1
- data/spec/ripplr/criteria_spec.rb +39 -3
- data/spec/support/models/person.rb +2 -0
- metadata +2 -1
data/README.md
CHANGED
|
@@ -33,6 +33,7 @@ And then create, index and search for your documents like so:
|
|
|
33
33
|
```ruby
|
|
34
34
|
todays_wod = Wod.create :description => 'Lawnmower 8x35lbs. Sqt Jumps 10x. Lunge Twist 20x10lbs ...', :performed_at = Time.now
|
|
35
35
|
todays_wod.index #add the index for your document
|
|
36
|
-
Wod.
|
|
36
|
+
criteria = Wod.where(:description => "jumps") # Builds a criteria object
|
|
37
|
+
# Iterating over a criteria object, calling count(size, or length), or calling to_a executes the search
|
|
37
38
|
```
|
|
38
39
|
|
data/lib/ripplr.rb
CHANGED
data/lib/ripplr/criteria.rb
CHANGED
|
@@ -11,6 +11,21 @@ module Ripplr
|
|
|
11
11
|
self
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
def order_by(field)
|
|
15
|
+
@order_by_field = @target.queryable_field(field)
|
|
16
|
+
self
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def ascending
|
|
20
|
+
@order_by_direction = " asc"
|
|
21
|
+
self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def descending
|
|
25
|
+
@order_by_direction = " desc"
|
|
26
|
+
self
|
|
27
|
+
end
|
|
28
|
+
|
|
14
29
|
def each(&block)
|
|
15
30
|
results.each do |result|
|
|
16
31
|
yield result
|
|
@@ -30,7 +45,7 @@ module Ripplr
|
|
|
30
45
|
def execute
|
|
31
46
|
return @target.list if condition.nil?
|
|
32
47
|
|
|
33
|
-
@indexer.search @target, query
|
|
48
|
+
@indexer.search @target, query, options
|
|
34
49
|
end
|
|
35
50
|
|
|
36
51
|
def conditions
|
|
@@ -43,6 +58,17 @@ module Ripplr
|
|
|
43
58
|
@results
|
|
44
59
|
end
|
|
45
60
|
|
|
61
|
+
def options
|
|
62
|
+
Maybe(ordering) { Hash.new }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def ordering
|
|
66
|
+
return NullObject.new if @order_by_field.nil?
|
|
67
|
+
sort = { :sort => "#{@order_by_field.to_s}" }
|
|
68
|
+
sort[:sort] += @order_by_direction unless @order_by_direction.nil?
|
|
69
|
+
sort
|
|
70
|
+
end
|
|
71
|
+
|
|
46
72
|
def condition
|
|
47
73
|
@condition
|
|
48
74
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class NullObject
|
|
2
|
+
def initialize
|
|
3
|
+
@origin = caller.first ### SETS ORIGIN FOR INSPECT INFO
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def method_missing(*args, &block)
|
|
7
|
+
self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def nil?; true; end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def Maybe(value)
|
|
15
|
+
if value.nil? then
|
|
16
|
+
block_given? ? yield : NullObject.new
|
|
17
|
+
else
|
|
18
|
+
value
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/ripplr/version.rb
CHANGED
|
@@ -10,14 +10,14 @@ describe Ripplr::Criteria do
|
|
|
10
10
|
|
|
11
11
|
describe "searching with a query against a field" do
|
|
12
12
|
Given (:indexer) { mock }
|
|
13
|
-
Given { indexer.should_receive(:search).with(Person,"first_name_text: \"skrillex\"").and_return ["Awesome"] }
|
|
13
|
+
Given { indexer.should_receive(:search).with(Person,"first_name_text: \"skrillex\"", {}).and_return ["Awesome"] }
|
|
14
14
|
When (:results) { Ripplr::Criteria.new(Person, indexer).where(:first_name => "skrillex").execute }
|
|
15
15
|
Then { results.should == ["Awesome"] }
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
describe "searching with a query against a different field" do
|
|
19
19
|
Given (:indexer) { mock }
|
|
20
|
-
Given { indexer.should_receive(:search).with(Person,"last_name_text: \"Auerbach\"").and_return ["Dan"] }
|
|
20
|
+
Given { indexer.should_receive(:search).with(Person,"last_name_text: \"Auerbach\"", {}).and_return ["Dan"] }
|
|
21
21
|
When (:results) { Ripplr::Criteria.new(Person, indexer).where(:last_name => "Auerbach").execute }
|
|
22
22
|
Then { results.should == ["Dan"] }
|
|
23
23
|
end
|
|
@@ -29,7 +29,7 @@ describe Ripplr::Criteria do
|
|
|
29
29
|
describe "treating a criteria object like a collection executes the query" do
|
|
30
30
|
Given (:criteria) { Ripplr::Criteria.new(Person, indexer).where(:first_name => "Dan") }
|
|
31
31
|
Given (:indexer) { mock }
|
|
32
|
-
Given { indexer.should_receive(:search).with(Person,"first_name_text: \"Dan\"").once.and_return(["Dan"]) }
|
|
32
|
+
Given { indexer.should_receive(:search).with(Person,"first_name_text: \"Dan\"", {}).once.and_return(["Dan"]) }
|
|
33
33
|
|
|
34
34
|
context "by calling #each" do
|
|
35
35
|
Given (:iterated) { Array.new }
|
|
@@ -61,4 +61,40 @@ describe Ripplr::Criteria do
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
+
describe "adding a sort to a query" do
|
|
65
|
+
Given (:indexer) { mock }
|
|
66
|
+
Given (:criteria) { Ripplr::Criteria.new(Person, indexer).where(:first_name => 'Patrick') }
|
|
67
|
+
|
|
68
|
+
describe "is reflective" do
|
|
69
|
+
Then { criteria.order_by(:last_name).should == criteria }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "when sorting by a queryable field" do
|
|
73
|
+
Given { indexer.should_receive(:search).with(Person, "first_name_text: \"Patrick\"", :sort => "created_at_dt").and_return [1,2,3] }
|
|
74
|
+
When(:result) { criteria.order_by(:created_at) }
|
|
75
|
+
Then { criteria.execute.should == [1,2,3] }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
context "when sorting by a non queryable field" do
|
|
79
|
+
Then { expect { criteria.order_by(:junk_field) }.to raise_error RuntimeError }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context "when sorting in descending order" do
|
|
83
|
+
Given { indexer.should_receive(:search).with(Person, "first_name_text: \"Patrick\"", :sort => "created_at_dt desc").and_return [3,2,1] }
|
|
84
|
+
When(:result) { criteria.order_by(:created_at).descending }
|
|
85
|
+
Then { criteria.execute.should == [3,2,1] }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context "when sorting in ascending order (force default)" do
|
|
89
|
+
Given { indexer.should_receive(:search).with(Person, "first_name_text: \"Patrick\"", :sort => "created_at_dt asc").and_return [1,2,3] }
|
|
90
|
+
When(:result) { criteria.order_by(:created_at).ascending }
|
|
91
|
+
Then { criteria.execute.should == [1,2,3] }
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context "when trying to confuse the sort direction" do
|
|
95
|
+
Given { indexer.should_receive(:search).with(Person, "first_name_text: \"Patrick\"", :sort => "created_at_dt desc").and_return [3,2,1] }
|
|
96
|
+
When(:result) { criteria.order_by(:created_at).ascending.descending }
|
|
97
|
+
Then { criteria.execute.should == [3,2,1] }
|
|
98
|
+
end
|
|
99
|
+
end
|
|
64
100
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ripplr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.8.beta
|
|
5
5
|
prerelease: 6
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -79,6 +79,7 @@ files:
|
|
|
79
79
|
- lib/ripplr/indexers/ripple.rb
|
|
80
80
|
- lib/ripplr/indexers.rb
|
|
81
81
|
- lib/ripplr/locale/en.yml
|
|
82
|
+
- lib/ripplr/null_object.rb
|
|
82
83
|
- lib/ripplr/query_field.rb
|
|
83
84
|
- lib/ripplr/queryable.rb
|
|
84
85
|
- lib/ripplr/translation.rb
|