Skip to content

Commit b6b3708

Browse files
author
Sean Cribbs
committed
Add support for and indexes in Document::find_by_index.
1 parent 7bb82f3 commit b6b3708

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

lib/ripple/indexes.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def indexes_for_persistence(prefix = '')
5454
end
5555
end
5656
end
57-
57+
5858
# Add this document's indexes
5959
self.class.indexes.each do |key, index|
6060
if index.block
@@ -78,13 +78,17 @@ def update_robject
7878
end
7979

8080
module ClassMethods
81-
# Search for a document using an indexed column
82-
# @param [Symbol] name of the index
81+
# Search for a document using an indexed column
82+
# @param [Symbol] name of the index
8383
# @param [String, Integer, Range] query to search for
8484
def find_by_index(index_name, query)
85-
idx = self.indexes[index_name]
86-
raise ArgumentError, t('index_undefined', :property => index_name, :type => self.name) if idx.nil?
87-
self.find(Ripple.client.get_index(self.bucket.name, idx.index_key, query))
85+
if ["$bucket", "$key"].include?(index_name.to_s)
86+
self.find(Ripple.client.get_index(self.bucket.name, index_name.to_s, query))
87+
else
88+
idx = self.indexes[index_name]
89+
raise ArgumentError, t('index_undefined', :property => index_name, :type => self.name) if idx.nil?
90+
self.find(Ripple.client.get_index(self.bucket.name, idx.index_key, query))
91+
end
8892
end
8993
end
9094
end

spec/integration/ripple/indexes_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@
3232
Indexer.find_by_index(:age, 10..20).should == []
3333
end
3434

35+
it "should find by the special $bucket index" do
36+
Indexer.find_by_index('$bucket', Indexer.bucket.name).should =~ [@bob, @sally, @mary]
37+
end
38+
39+
it "should find by the special $key index" do
40+
Indexer.find_by_index('$key', @bob.key..@bob.key.succ).should =~ [@bob]
41+
end
42+
3543
it "should raise an error when the requested index doesn't exist" do
3644
lambda { Indexer.find_by_index(:hair, 'blonde') }.should raise_error(ArgumentError)
3745
end

0 commit comments

Comments
 (0)