diff --git a/lib/couchrest/core/model.rb b/lib/couchrest/core/model.rb index 55b82af..69bc35a 100644 --- a/lib/couchrest/core/model.rb +++ b/lib/couchrest/core/model.rb @@ -440,15 +440,22 @@ module CouchRest end # Takes a hash as argument, and applies the values by using writer methods - # for each key. Raises a NoMethodError if the corresponding methods are - # missing. In case of error, no attributes are changed. - def update_attributes hash + # for each key. It doesn't save the document at the end. Raises a NoMethodError if the corresponding methods are + # missing. In case of error, no attributes are changed. + def update_attributes_without_saving hash hash.each do |k, v| raise NoMethodError, "#{k}= method not available, use key_accessor or key_writer :#{k}" unless self.respond_to?("#{k}=") end hash.each do |k, v| self.send("#{k}=",v) end + end + + # Takes a hash as argument, and applies the values by using writer methods + # for each key. Raises a NoMethodError if the corresponding methods are + # missing. In case of error, no attributes are changed. + def update_attributes hash + update_attributes_without_saving hash save end diff --git a/spec/couchrest/core/model_spec.rb b/spec/couchrest/core/model_spec.rb index 98efe74..e6f440f 100644 --- a/spec/couchrest/core/model_spec.rb +++ b/spec/couchrest/core/model_spec.rb @@ -135,7 +135,7 @@ describe CouchRest::Model do end end - describe "update attributes" do + describe "update attributes without saving" do before(:each) do a = Article.get "big-bad-danger" rescue nil a.destroy if a @@ -161,13 +161,21 @@ describe CouchRest::Model do @art['title'].should == "big bad danger" end + end + + describe "update attributes" do + before(:each) do + a = Article.get "big-bad-danger" rescue nil + a.destroy if a + @art = Article.new(:title => "big bad danger") + @art.save + end it "should save" do @art['title'].should == "big bad danger" @art.update_attributes('date' => Time.now, :title => "super danger") loaded = Article.get @art.id loaded['title'].should == "super danger" end - end describe "a model with template values" do