mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
f81c6bc040
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.
86 lines
1.8 KiB
Ruby
86 lines
1.8 KiB
Ruby
require 'abstract_unit'
|
|
|
|
class Comment
|
|
extend ActiveModel::Naming
|
|
include ActiveModel::Conversion
|
|
|
|
attr_reader :id
|
|
def to_key; id ? [id] : nil end
|
|
def save; @id = 1 end
|
|
def new_record?; @id.nil? end
|
|
def name
|
|
@id.nil? ? 'new comment' : "comment ##{@id}"
|
|
end
|
|
end
|
|
|
|
class Comment::Nested < Comment; end
|
|
|
|
class Test::Unit::TestCase
|
|
protected
|
|
def comments_url
|
|
'http://www.example.com/comments'
|
|
end
|
|
|
|
def comment_url(comment)
|
|
"http://www.example.com/comments/#{comment.id}"
|
|
end
|
|
end
|
|
|
|
|
|
class RecordIdentifierTest < Test::Unit::TestCase
|
|
include ActionController::RecordIdentifier
|
|
|
|
def setup
|
|
@klass = Comment
|
|
@record = @klass.new
|
|
@singular = 'comment'
|
|
@plural = 'comments'
|
|
end
|
|
|
|
def test_dom_id_with_new_record
|
|
assert_equal "new_#{@singular}", dom_id(@record)
|
|
end
|
|
|
|
def test_dom_id_with_new_record_and_prefix
|
|
assert_equal "custom_prefix_#{@singular}", dom_id(@record, :custom_prefix)
|
|
end
|
|
|
|
def test_dom_id_with_saved_record
|
|
@record.save
|
|
assert_equal "#{@singular}_1", dom_id(@record)
|
|
end
|
|
|
|
def test_dom_id_with_prefix
|
|
@record.save
|
|
assert_equal "edit_#{@singular}_1", dom_id(@record, :edit)
|
|
end
|
|
|
|
def test_dom_class
|
|
assert_equal @singular, dom_class(@record)
|
|
end
|
|
|
|
def test_dom_class_with_prefix
|
|
assert_equal "custom_prefix_#{@singular}", dom_class(@record, :custom_prefix)
|
|
end
|
|
|
|
def test_singular_class_name
|
|
assert_equal @singular, singular_class_name(@record)
|
|
end
|
|
|
|
def test_singular_class_name_for_class
|
|
assert_equal @singular, singular_class_name(@klass)
|
|
end
|
|
|
|
def test_plural_class_name
|
|
assert_equal @plural, plural_class_name(@record)
|
|
end
|
|
|
|
def test_plural_class_name_for_class
|
|
assert_equal @plural, plural_class_name(@klass)
|
|
end
|
|
|
|
private
|
|
def method_missing(method, *args)
|
|
RecordIdentifier.send(method, *args)
|
|
end
|
|
end
|