Merge pull request #83 from pezra/init-blocks

Init blocks
This commit is contained in:
Sam Lown 2011-06-01 02:37:47 -07:00
commit 84d7063608
2 changed files with 18 additions and 6 deletions

View file

@ -21,8 +21,8 @@ module CouchRest
# Creates the document in the db. Raises an exception # Creates the document in the db. Raises an exception
# if the document is not created properly. # if the document is not created properly.
def create! def create!(options = {})
self.class.fail_validate!(self) unless self.create self.class.fail_validate!(self) unless self.create(options)
end end
# Trigger the callbacks (before, after, around) # Trigger the callbacks (before, after, around)
@ -118,8 +118,8 @@ module CouchRest
# #
# ==== Returns # ==== Returns
# returns the reloaded document # returns the reloaded document
def create(attributes = {}) def create(attributes = {}, &block)
instance = new(attributes) instance = new(attributes, &block)
instance.create instance.create
instance instance
end end
@ -128,8 +128,8 @@ module CouchRest
# #
# ==== Returns # ==== Returns
# returns the reloaded document or raises an exception # returns the reloaded document or raises an exception
def create!(attributes = {}) def create!(attributes = {}, &block)
instance = new(attributes) instance = new(attributes, &block)
instance.create! instance.create!
instance instance
end end

View file

@ -81,6 +81,18 @@ describe "Model Persistence" do
article.should_not be_new article.should_not be_new
end end
it "yields new instance to block before saving (#create)" do
article = Article.create{|a| a.title = 'my create init block test'}
article.title.should == 'my create init block test'
article.should_not be_new
end
it "yields new instance to block before saving (#create!)" do
article = Article.create{|a| a.title = 'my create bang init block test'}
article.title.should == 'my create bang init block test'
article.should_not be_new
end
it "should trigger the create callbacks" do it "should trigger the create callbacks" do
doc = WithCallBacks.create(:name => 'my other test') doc = WithCallBacks.create(:name => 'my other test')
doc.run_before_create.should be_true doc.run_before_create.should be_true