aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJavan Makhmali <javan@javan.us>2013-11-14 15:02:05 -0500
committerJavan Makhmali <javan@javan.us>2013-11-14 15:35:53 -0500
commit633100b9e5ab0ca634c86eb56bc2da4f3b33e8c4 (patch)
tree6d3d9a14e89292da97ba0407fcea67d9e34509ab
parent84961dc5df86c70504bdcdc218799e9f848a7a00 (diff)
downloadrails-633100b9e5ab0ca634c86eb56bc2da4f3b33e8c4.tar.gz
rails-633100b9e5ab0ca634c86eb56bc2da4f3b33e8c4.tar.bz2
rails-633100b9e5ab0ca634c86eb56bc2da4f3b33e8c4.zip
Addendum to #12891
* Fix incorrectly named tests * Restore Object#to_param behavior * Ensure param is derived from a squished and truncated string
-rw-r--r--activerecord/lib/active_record/integration.rb16
-rw-r--r--activerecord/test/cases/integration_test.rb20
2 files changed, 28 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/integration.rb b/activerecord/lib/active_record/integration.rb
index f881fa74b2..951db5b756 100644
--- a/activerecord/lib/active_record/integration.rb
+++ b/activerecord/lib/active_record/integration.rb
@@ -86,12 +86,16 @@ module ActiveRecord
#
# params[:id] # => "123-fancy-pants"
# User.find(params[:id]).id # => 123
- def to_param(method_name)
- define_method :to_param do
- if (default = super()) && (result = send(method_name).to_s).present?
- "#{default}-#{result.truncate(20, separator: /\s/, omission: nil).parameterize}"
- else
- default
+ def to_param(method_name = nil)
+ if method_name.nil?
+ super()
+ else
+ define_method :to_param do
+ if (default = super()) && (result = send(method_name).to_s).present?
+ "#{default}-#{result.squish.truncate(20, separator: /\s/, omission: nil).parameterize}"
+ else
+ default
+ end
end
end
end
diff --git a/activerecord/test/cases/integration_test.rb b/activerecord/test/cases/integration_test.rb
index 1f62433ea2..8097f6e36e 100644
--- a/activerecord/test/cases/integration_test.rb
+++ b/activerecord/test/cases/integration_test.rb
@@ -28,7 +28,19 @@ class IntegrationTest < ActiveRecord::TestCase
assert_equal '4-flamboyant-software', firm.to_param
end
- def to_param_class_method_uses_default_if_blank
+ def test_to_param_class_method_truncates
+ firm = Firm.find(4)
+ firm.name = 'a ' * 100
+ assert_equal '4-a-a-a-a-a-a-a-a-a', firm.to_param
+ end
+
+ def test_to_param_class_method_squishes
+ firm = Firm.find(4)
+ firm.name = "ab \n" * 100
+ assert_equal '4-ab-ab-ab-ab-ab-ab', firm.to_param
+ end
+
+ def test_to_param_class_method_uses_default_if_blank
firm = Firm.find(4)
firm.name = nil
assert_equal '4', firm.to_param
@@ -36,11 +48,15 @@ class IntegrationTest < ActiveRecord::TestCase
assert_equal '4', firm.to_param
end
- def to_param_class_method_uses_default_if_not_persisted
+ def test_to_param_class_method_uses_default_if_not_persisted
firm = Firm.new(name: 'Fancy Shirts')
assert_equal nil, firm.to_param
end
+ def test_to_param_with_no_arguments
+ assert_equal 'Firm', Firm.to_param
+ end
+
def test_cache_key_for_existing_record_is_not_timezone_dependent
utc_key = Developer.first.cache_key