diff options
author | Eugene Gilburg <eugene.gilburg@gmail.com> | 2015-01-23 14:36:43 -0800 |
---|---|---|
committer | Eugene Gilburg <eugene.gilburg@gmail.com> | 2015-01-23 14:42:47 -0800 |
commit | 5bdb42159ec461d678652319da14b4a59bfafd27 (patch) | |
tree | 6b45ce49afbceb3297ca6eb2a559ad8d461a9ddf | |
parent | 8c83bd0732fc526e69cd5c348cb9d9842ae60c99 (diff) | |
download | rails-5bdb42159ec461d678652319da14b4a59bfafd27.tar.gz rails-5bdb42159ec461d678652319da14b4a59bfafd27.tar.bz2 rails-5bdb42159ec461d678652319da14b4a59bfafd27.zip |
use attribute assignment module logic during active model initialization
-rw-r--r-- | activemodel/CHANGELOG.md | 11 | ||||
-rw-r--r-- | activemodel/lib/active_model/model.rb | 7 | ||||
-rw-r--r-- | activemodel/test/cases/model_test.rb | 4 |
3 files changed, 17 insertions, 5 deletions
diff --git a/activemodel/CHANGELOG.md b/activemodel/CHANGELOG.md index 9cebb680fc..77386e5e41 100644 --- a/activemodel/CHANGELOG.md +++ b/activemodel/CHANGELOG.md @@ -1,3 +1,14 @@ +* Assigning an unknown attribute key to an `ActiveModel` instance during initialization + will now raise `ActiveModel::AttributeAssignment::UnknownAttributeError` instead of + `NoMethodError` + + ```ruby + User.new(foo: 'some value') + # => ActiveModel::AttributeAssignment::UnknownAttributeError: unknown attribute 'foo' for User. + ``` + + *Eugene Gilburg* + * Extracted `ActiveRecord::AttributeAssignment` to `ActiveModel::AttributeAssignment` allowing to use it for any object as an includable module diff --git a/activemodel/lib/active_model/model.rb b/activemodel/lib/active_model/model.rb index d51d6ddcc9..dac8d549a7 100644 --- a/activemodel/lib/active_model/model.rb +++ b/activemodel/lib/active_model/model.rb @@ -57,6 +57,7 @@ module ActiveModel # (see below). module Model extend ActiveSupport::Concern + include ActiveModel::AttributeAssignment include ActiveModel::Validations include ActiveModel::Conversion @@ -75,10 +76,8 @@ module ActiveModel # person = Person.new(name: 'bob', age: '18') # person.name # => "bob" # person.age # => "18" - def initialize(params={}) - params.each do |attr, value| - self.public_send("#{attr}=", value) - end if params + def initialize(attributes={}) + assign_attributes(attributes) if attributes super() end diff --git a/activemodel/test/cases/model_test.rb b/activemodel/test/cases/model_test.rb index ee0fa26546..9a8d873ec9 100644 --- a/activemodel/test/cases/model_test.rb +++ b/activemodel/test/cases/model_test.rb @@ -70,6 +70,8 @@ class ModelTest < ActiveModel::TestCase end def test_mixin_initializer_when_args_dont_exist - assert_raises(NoMethodError) { SimpleModel.new(hello: 'world') } + assert_raises(ActiveModel::AttributeAssignment::UnknownAttributeError) do + SimpleModel.new(hello: 'world') + end end end |