aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib
diff options
context:
space:
mode:
authorsnusnu <gamsnjaga@gmail.com>2010-02-21 03:05:28 +0100
committerYehuda Katz <yehudakatz@YK.local>2010-02-20 20:17:29 -0800
commitf81c6bc0404ba2a03eed0ec6c08bbac45661305f (patch)
tree6c6d892fb444687556ba001c189e0d6e533cddb7 /activemodel/lib
parentfed72b5842e5e8604917602a15c126d48cf12fde (diff)
downloadrails-f81c6bc0404ba2a03eed0ec6c08bbac45661305f.tar.gz
rails-f81c6bc0404ba2a03eed0ec6c08bbac45661305f.tar.bz2
rails-f81c6bc0404ba2a03eed0ec6c08bbac45661305f.zip
AMo #key is now #to_key and CI is probably happy
Obviously #key is a too common name to be included in the AMo interface, #to_key fits better and also relates nicely to #to_param. Thx wycats, koz and josevalim for the suggestion. AR's #to_key implementation now takes customized primary keys into account and there's a testcase for that too. The #to_param AMo lint makes no assumptions on how the method behaves in the presence of composite primary keys. It leaves the decision wether to provide a default, or to raise and thus signal to the user that implementing this method will need his special attention, up to the implementers. All AMo cares about is that #to_param is implemented and returns nil in case of a new_record?. The default CompliantObject used in lint_test provides a naive default implementation that just joins all key attributes with '-'. The #to_key default implementation in lint_test's CompliantObject now returns [id] instead of [1]. This was previously causing the (wrong) tests I added for AR's #to_key implementation to pass. The #to_key tests added with this patch should be better. The CI failure was caused by my lack of knowledge about the test:isolated task. The tests for the record_identifier code in action_controller are using fake non AR models and I forgot to stub the #to_key method over there. This issue didn't come up when running the test task, only test:isolated revealed it. This patch fixes that. All tests pass isolated or not, well, apart from one previously unpended test in action_controller that is unrelated to my patch.
Diffstat (limited to 'activemodel/lib')
-rw-r--r--activemodel/lib/active_model/lint.rb18
1 files changed, 12 insertions, 6 deletions
diff --git a/activemodel/lib/active_model/lint.rb b/activemodel/lib/active_model/lint.rb
index c97286e61c..98413ac9fb 100644
--- a/activemodel/lib/active_model/lint.rb
+++ b/activemodel/lib/active_model/lint.rb
@@ -14,22 +14,28 @@ module ActiveModel
module Lint
module Tests
- # == Responds to <tt>key</tt>
+ # == Responds to <tt>to_key</tt>
#
# Returns an Enumerable of all (primary) key attributes
# or nil if model.new_record? is true
- def test_key
- assert model.respond_to?(:key), "The model should respond to key"
+ def test_to_key
+ assert model.respond_to?(:to_key), "The model should respond to to_key"
def model.new_record?() true end
- assert model.key.nil?
+ assert model.to_key.nil?
def model.new_record?() false end
- assert model.key.respond_to?(:each)
+ assert model.to_key.respond_to?(:each)
end
# == Responds to <tt>to_param</tt>
#
# Returns a string representing the object's key suitable for use in URLs
- # or nil if model.new_record? is true
+ # or nil if model.new_record? is true.
+ #
+ # Implementers can decide to either raise an exception or provide a default
+ # in case the record uses a composite primary key. There are no tests for this
+ # behavior in lint because it doesn't make sense to force any of the possible
+ # implementation strategies on the implementer. However, if the resource is
+ # a new_record?, 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.new_record?() true end