Merge pull request #12653 from releu/short_arrays_in_inspect

Short arrays in record.inspect
This commit is contained in:
Yves Senn 2013-10-30 00:50:36 -07:00
commit 609bc40904
3 changed files with 19 additions and 3 deletions

@ -1,3 +1,7 @@
* ActiveRecord::Base#attribute_for_inspect now truncates long arrays (more than 10 elements)
*Jan Bernacki*
* Allow for the name of the schema_migrations table to be configured.
*Jerad Phelps*

@ -245,9 +245,10 @@ def attributes
# Returns an <tt>#inspect</tt>-like string for the value of the
# attribute +attr_name+. String attributes are truncated upto 50
# characters, and Date and Time attributes are returned in the
# <tt>:db</tt> format. Other attributes return the value of
# <tt>#inspect</tt> without modification.
# characters, Date and Time attributes are returned in the
# <tt>:db</tt> format, Array attributes are truncated upto 10 values.
# Other attributes return the value of <tt>#inspect</tt> without
# modification.
#
# person = Person.create!(name: 'David Heinemeier Hansson ' * 3)
#
@ -256,6 +257,9 @@ def attributes
#
# person.attribute_for_inspect(:created_at)
# # => "\"2012-10-22 00:15:07\""
#
# person.attribute_for_inspect(:tag_ids)
# # => "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...]"
def attribute_for_inspect(attr_name)
value = read_attribute(attr_name)
@ -263,6 +267,9 @@ def attribute_for_inspect(attr_name)
"#{value[0, 50]}...".inspect
elsif value.is_a?(Date) || value.is_a?(Time)
%("#{value.to_s(:db)}")
elsif value.is_a?(Array) && value.size > 10
inspected = value.first(10).inspect
%(#{inspected[0...-1]}, ...])
else
value.inspect
end

@ -113,6 +113,11 @@ def test_insert_fixture
assert_equal(PgArray.last.tags, tag_values)
end
def test_attribute_for_inspect_for_array_field
record = PgArray.new { |a| a.ratings = (1..11).to_a }
assert_equal("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...]", record.attribute_for_inspect(:ratings))
end
private
def assert_cycle field, array
# test creation