diff options
Diffstat (limited to 'activemodel')
| -rw-r--r-- | activemodel/lib/active_model/conversion.rb | 9 | ||||
| -rw-r--r-- | activemodel/lib/active_model/lint.rb | 1 | ||||
| -rw-r--r-- | activemodel/test/cases/mass_assignment_security_test.rb | 6 |
3 files changed, 10 insertions, 6 deletions
diff --git a/activemodel/lib/active_model/conversion.rb b/activemodel/lib/active_model/conversion.rb index b998a59e81..ae0ab93e97 100644 --- a/activemodel/lib/active_model/conversion.rb +++ b/activemodel/lib/active_model/conversion.rb @@ -33,8 +33,11 @@ module ActiveModel self end - # Returns an Enumerable of all (primary) key attributes or nil if - # persisted? is false + # Returns an Enumerable of all key attributes if any is set, regardless + # if the object is persisted or not. + # + # Note the default implementation uses persisted? just because all objects + # in Ruby 1.8.x responds to :id. def to_key persisted? ? [id] : nil end @@ -42,7 +45,7 @@ module ActiveModel # Returns a string representing the object's key suitable for use in URLs, # or nil if persisted? is false def to_param - to_key ? to_key.join('-') : nil + persisted? ? to_key.join('-') : nil end end end diff --git a/activemodel/lib/active_model/lint.rb b/activemodel/lib/active_model/lint.rb index 26eb4a3c41..d7a6da48ca 100644 --- a/activemodel/lib/active_model/lint.rb +++ b/activemodel/lib/active_model/lint.rb @@ -38,6 +38,7 @@ module ActiveModel # not persisted?, then to_param should always return nil. def test_to_param assert model.respond_to?(:to_param), "The model should respond to to_param" + def model.to_key() [1] end def model.persisted?() false end assert model.to_param.nil? end diff --git a/activemodel/test/cases/mass_assignment_security_test.rb b/activemodel/test/cases/mass_assignment_security_test.rb index c25b0fdf00..f84e55e8d9 100644 --- a/activemodel/test/cases/mass_assignment_security_test.rb +++ b/activemodel/test/cases/mass_assignment_security_test.rb @@ -25,13 +25,13 @@ class MassAssignmentSecurityTest < ActiveModel::TestCase end def test_mass_assignment_protection_inheritance - assert LoosePerson.accessible_attributes.blank? + assert_blank LoosePerson.accessible_attributes assert_equal Set.new([ 'credit_rating', 'administrator']), LoosePerson.protected_attributes - assert LooseDescendant.accessible_attributes.blank? + assert_blank LooseDescendant.accessible_attributes assert_equal Set.new([ 'credit_rating', 'administrator', 'phone_number']), LooseDescendant.protected_attributes - assert LooseDescendantSecond.accessible_attributes.blank? + assert_blank LooseDescendantSecond.accessible_attributes assert_equal Set.new([ 'credit_rating', 'administrator', 'phone_number', 'name']), LooseDescendantSecond.protected_attributes, 'Running attr_protected twice in one class should merge the protections' |
