add method 'last' to simplify queries

This commit is contained in:
Lucas Renan 2010-12-31 18:59:57 -02:00
parent 92a10dbfc9
commit 3a1b271558
4 changed files with 34 additions and 0 deletions

View file

@ -75,6 +75,12 @@ module CouchRest
doc doc
end end
def last(opts = {})
doc = @klass.last({:database => @database}.merge(opts))
doc.database = @database if doc && doc.respond_to?(:database)
doc
end
def get(id) def get(id)
doc = @klass.get(id, @database) doc = @klass.get(id, @database)
doc.database = @database if doc && doc.respond_to?(:database) doc.database = @database if doc && doc.respond_to?(:database)

View file

@ -38,6 +38,22 @@ module CouchRest
first_instance.empty? ? nil : first_instance.first first_instance.empty? ? nil : first_instance.first
end end
# Load the last document that have the model_type_key's field equal to
# the name of the current class.
# It's similar to method first, just adds :descending => true
#
# ==== Returns
# Object:: The last object instance available
# or
# Nil:: if no instances available
#
# ==== Parameters
# opts<Hash>::
# View options, see <tt>CouchRest::Database#view</tt> options for more info.
def last(opts = {})
first(opts.merge!(:descending => true))
end
# Load a document from the database by id # Load a document from the database by id
# No exceptions will be raised if the document isn't found # No exceptions will be raised if the document isn't found
# #

View file

@ -87,6 +87,12 @@ describe "Proxy Class" do
u = @us.first u = @us.first
u.title.should =~ /\A...\z/ u.title.should =~ /\A...\z/
end end
it "should get last" do
u = @us.last
u.title.should == "aaa"
end
it "should set database on first retreived document" do it "should set database on first retreived document" do
u = @us.first u = @us.first
u.database.should === DB u.database.should === DB

View file

@ -273,6 +273,12 @@ describe "Model views" do
u = Unattached.first :database=>@db u = Unattached.first :database=>@db
u.title.should =~ /\A...\z/ u.title.should =~ /\A...\z/
end end
it "should get last" do
u = Unattached.last :database=>@db
u.title.should == "aaa"
end
it "should barf on all_design_doc_versions if no database given" do it "should barf on all_design_doc_versions if no database given" do
lambda{Unattached.all_design_doc_versions}.should raise_error lambda{Unattached.all_design_doc_versions}.should raise_error
end end