Added the method update_attributes_without_saving.
To understand the reason, say you have this: class Post < CouchRest::Model key_accessor :title, :body, :author, comments cast :author, :as => 'Author' cast :comments, :as => ['Comment'] end comment = post.comments.first I'd like to do comment.update_attributes_without_saving hash because otherwise, it would create a new document for comment, which I don't want in my particular use. I just want to update the internal comment in the post.
This commit is contained in:
parent
60c5994e43
commit
9399b27f3f
|
@ -456,15 +456,22 @@ module CouchRest
|
||||||
end
|
end
|
||||||
|
|
||||||
# Takes a hash as argument, and applies the values by using writer methods
|
# Takes a hash as argument, and applies the values by using writer methods
|
||||||
# for each key. Raises a NoMethodError if the corresponding methods are
|
# 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.
|
# missing. In case of error, no attributes are changed.
|
||||||
def update_attributes hash
|
def update_attributes_without_saving hash
|
||||||
hash.each do |k, v|
|
hash.each do |k, v|
|
||||||
raise NoMethodError, "#{k}= method not available, use key_accessor or key_writer :#{k}" unless self.respond_to?("#{k}=")
|
raise NoMethodError, "#{k}= method not available, use key_accessor or key_writer :#{k}" unless self.respond_to?("#{k}=")
|
||||||
end
|
end
|
||||||
hash.each do |k, v|
|
hash.each do |k, v|
|
||||||
self.send("#{k}=",v)
|
self.send("#{k}=",v)
|
||||||
end
|
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
|
save
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ describe CouchRest::Model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "update attributes" do
|
describe "update attributes without saving" do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
a = Article.get "big-bad-danger" rescue nil
|
a = Article.get "big-bad-danger" rescue nil
|
||||||
a.destroy if a
|
a.destroy if a
|
||||||
|
@ -160,13 +160,21 @@ describe CouchRest::Model do
|
||||||
@art['title'].should == "big bad danger"
|
@art['title'].should == "big bad danger"
|
||||||
end
|
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
|
it "should save" do
|
||||||
@art['title'].should == "big bad danger"
|
@art['title'].should == "big bad danger"
|
||||||
@art.update_attributes('date' => Time.now, :title => "super danger")
|
@art.update_attributes('date' => Time.now, :title => "super danger")
|
||||||
loaded = Article.get @art.id
|
loaded = Article.get @art.id
|
||||||
loaded['title'].should == "super danger"
|
loaded['title'].should == "super danger"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "a model with template values" do
|
describe "a model with template values" do
|
||||||
|
|
Loading…
Reference in a new issue