diff options
author | snusnu <gamsnjaga@gmail.com> | 2010-02-21 03:05:28 +0100 |
---|---|---|
committer | Yehuda Katz <yehudakatz@YK.local> | 2010-02-20 20:17:29 -0800 |
commit | f81c6bc0404ba2a03eed0ec6c08bbac45661305f (patch) | |
tree | 6c6d892fb444687556ba001c189e0d6e533cddb7 /activemodel/lib/active_model/lint.rb | |
parent | fed72b5842e5e8604917602a15c126d48cf12fde (diff) | |
download | rails-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/active_model/lint.rb')
-rw-r--r-- | activemodel/lib/active_model/lint.rb | 18 |
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 |