From f28cce1f0a3d88cc099e2c152d57a2944ec702fc Mon Sep 17 00:00:00 2001 From: Peter Williams Date: Mon, 23 May 2011 11:02:08 -0600 Subject: [PATCH] Implement #get! and #find! class methods --- lib/couchrest/model/class_proxy.rb | 9 +++++++- lib/couchrest/model/document_queries.rb | 5 ++++- lib/couchrest/model/errors.rb | 2 ++ spec/couchrest/class_proxy_spec.rb | 29 +++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lib/couchrest/model/class_proxy.rb b/lib/couchrest/model/class_proxy.rb index 3f988b1..16887a3 100644 --- a/lib/couchrest/model/class_proxy.rb +++ b/lib/couchrest/model/class_proxy.rb @@ -87,7 +87,14 @@ module CouchRest doc end alias :find :get - + + def get!(id) + doc = @klass.get!(id, @database) + doc.database = @database if doc && doc.respond_to?(:database) + doc + end + alias :find! :get! + # Views def has_view?(view) diff --git a/lib/couchrest/model/document_queries.rb b/lib/couchrest/model/document_queries.rb index af1083d..839674b 100644 --- a/lib/couchrest/model/document_queries.rb +++ b/lib/couchrest/model/document_queries.rb @@ -86,9 +86,12 @@ module CouchRest # id:: Document ID # db:: optional option to pass a custom database to use def get!(id, db = database) - raise "Missing or empty document ID" if id.to_s.empty? + raise CouchRest::Model::DocumentNotFound if id.blank? + doc = db.get id build_from_database(doc) + rescue RestClient::ResourceNotFound + raise CouchRest::Model::DocumentNotFound end alias :find! :get! diff --git a/lib/couchrest/model/errors.rb b/lib/couchrest/model/errors.rb index 7f14fca..45d8b2f 100644 --- a/lib/couchrest/model/errors.rb +++ b/lib/couchrest/model/errors.rb @@ -19,5 +19,7 @@ module CouchRest end end end + + class DocumentNotFound < Errors::CouchRestModelError; end end end diff --git a/spec/couchrest/class_proxy_spec.rb b/spec/couchrest/class_proxy_spec.rb index f274ca9..1572d8d 100644 --- a/spec/couchrest/class_proxy_spec.rb +++ b/spec/couchrest/class_proxy_spec.rb @@ -123,6 +123,35 @@ describe "Proxy Class" do u.respond_to?(:database).should be_false end end + + describe "#get!" do + it "raises exception when passed a nil" do + expect { @us.get!(nil)}.to raise_error(CouchRest::Model::DocumentNotFound) + end + + it "raises exception when passed an empty string " do + expect { @us.get!("")}.to raise_error(CouchRest::Model::DocumentNotFound) + end + + it "raises exception when document with provided id does not exist" do + expect { @us.get!("thisisnotreallyadocumentid")}.to raise_error(CouchRest::Model::DocumentNotFound) + end + end + + describe "#find!" do + it "raises exception when passed a nil" do + expect { @us.find!(nil)}.to raise_error(CouchRest::Model::DocumentNotFound) + end + + it "raises exception when passed an empty string " do + expect { @us.find!("")}.to raise_error(CouchRest::Model::DocumentNotFound) + end + + it "raises exception when document with provided id does not exist" do + expect { @us.find!("thisisnotreallyadocumentid")}.to raise_error(CouchRest::Model::DocumentNotFound) + end + end + # Sam Lown 2010-04-07 # Removed as unclear why this should happen as before my changes # this happend by accident, not explicitly.