aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorSantiago Pastorino <santiago@wyeworks.com>2011-07-25 07:20:38 -0700
committerSantiago Pastorino <santiago@wyeworks.com>2011-07-25 07:20:38 -0700
commit64affc9384e9e8845b0204b94c003265442bc3e2 (patch)
tree3621b556f01e3ed95a20abd89cf8c469b186e382 /activerecord
parent14c0f0ee12f87970744e8373b996cb64d7ed37f7 (diff)
parentf5e4d13270dbce2bb880ef6529da68aaee017910 (diff)
downloadrails-64affc9384e9e8845b0204b94c003265442bc3e2.tar.gz
rails-64affc9384e9e8845b0204b94c003265442bc3e2.tar.bz2
rails-64affc9384e9e8845b0204b94c003265442bc3e2.zip
Merge pull request #2236 from cldwalker/after_initialize
Fix after_initialize and Base.create edge case
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/base.rb3
-rw-r--r--activerecord/test/cases/base_test.rb13
-rw-r--r--activerecord/test/models/bulb.rb5
3 files changed, 19 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index 2c162a6fc8..4136868b39 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -504,8 +504,7 @@ module ActiveRecord #:nodoc:
if attributes.is_a?(Array)
attributes.collect { |attr| create(attr, options, &block) }
else
- object = new(attributes, options)
- yield(object) if block_given?
+ object = new(attributes, options, &block)
object.save
object
end
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 8b4e7dd799..f2f5b73626 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -21,6 +21,7 @@ require 'models/parrot'
require 'models/person'
require 'models/edge'
require 'models/joke'
+require 'models/bulb'
require 'rexml/document'
require 'active_support/core_ext/exception'
@@ -260,6 +261,18 @@ class BasicsTest < ActiveRecord::TestCase
end
end
+ def test_create_after_initialize_without_block
+ cb = CustomBulb.create(:name => 'Dude')
+ assert_equal('Dude', cb.name)
+ assert_equal(true, cb.frickinawesome)
+ end
+
+ def test_create_after_initialize_with_block
+ cb = CustomBulb.create {|c| c.name = 'Dude' }
+ assert_equal('Dude', cb.name)
+ assert_equal(true, cb.frickinawesome)
+ end
+
def test_load
topics = Topic.find(:all, :order => 'id')
assert_equal(4, topics.size)
diff --git a/activerecord/test/models/bulb.rb b/activerecord/test/models/bulb.rb
index efb98b66e7..888afc7604 100644
--- a/activerecord/test/models/bulb.rb
+++ b/activerecord/test/models/bulb.rb
@@ -33,4 +33,9 @@ class Bulb < ActiveRecord::Base
end
class CustomBulb < Bulb
+ after_initialize :set_awesomeness
+
+ def set_awesomeness
+ self.frickinawesome = true if name == 'Dude'
+ end
end