diff options
-rw-r--r-- | activemodel/lib/active_model/model.rb | 2 | ||||
-rw-r--r-- | activemodel/test/cases/model_test.rb | 25 |
2 files changed, 24 insertions, 3 deletions
diff --git a/activemodel/lib/active_model/model.rb b/activemodel/lib/active_model/model.rb index ee5bc9e4d8..5904d686e5 100644 --- a/activemodel/lib/active_model/model.rb +++ b/activemodel/lib/active_model/model.rb @@ -80,7 +80,7 @@ module ActiveModel self.public_send("#{attr}=", value) end if params - super + super(*params) end # Indicates if the model is persisted. Default is +false+. diff --git a/activemodel/test/cases/model_test.rb b/activemodel/test/cases/model_test.rb index 375f5907db..651d20b3cb 100644 --- a/activemodel/test/cases/model_test.rb +++ b/activemodel/test/cases/model_test.rb @@ -4,6 +4,10 @@ class ModelTest < ActiveModel::TestCase include ActiveModel::Lint::Tests module DefaultValue + def self.included(klass) + klass.class_eval { attr_accessor :hello } + end + def initialize(*args) @attr ||= 'default value' end @@ -15,13 +19,17 @@ class ModelTest < ActiveModel::TestCase attr_accessor :attr end + class SimpleModel + include ActiveModel::Model + end + def setup @model = BasicModel.new end def test_initialize_with_params object = BasicModel.new(attr: "value") - assert_equal object.attr, "value" + assert_equal "value", object.attr end def test_initialize_with_nil_or_empty_hash_params_does_not_explode @@ -39,6 +47,19 @@ class ModelTest < ActiveModel::TestCase def test_mixin_inclusion_chain object = BasicModel.new - assert_equal object.attr, 'default value' + assert_equal 'default value', object.attr + end + + def test_mixin_initializer_when_args_exist + object = BasicModel.new(hello: 'world') + assert_equal 'world', object.hello + end + + def test_mixin_initializer_when_args_dont_exist + assert_raises(NoMethodError) { SimpleModel.new(hello: 'world') } + end + + def test_mixin_when_no_ancestors + assert SimpleModel.new end end |