Don't blank pad day of the month when formatting dates

We are currently using `%e` which adds a space before the result if the
digit is a single number. This leads to strings like `February  2, 2016`
which is undesireable. I've opted to replace with 0 padding instead of
removing the padding entirely, to preserve compatibility for those
relying on the fact that the width is constant, and to be consistent
with time formatting.

Fixes #25251.
This commit is contained in:
Sean Griffin 2016-06-02 11:44:20 -04:00
parent c587b63664
commit 2c5a8ba6f6
3 changed files with 21 additions and 3 deletions

@ -1,3 +1,10 @@
* `Date.to_s` doesn't produce too many spaces. For example, `to_s(:short)`
will now produce `01 Feb` instead of ` 1 Feb`.
Fixes #25251.
*Sean Griffin*
* Introduce Module#delegate_missing_to.
When building a decorator, a common pattern emerges:

@ -5,15 +5,15 @@
class Date
DATE_FORMATS = {
:short => '%e %b',
:long => '%B %e, %Y',
:short => '%d %b',
:long => '%B %d, %Y',
:db => '%Y-%m-%d',
:number => '%Y%m%d',
:long_ordinal => lambda { |date|
day_format = ActiveSupport::Inflector.ordinalize(date.day)
date.strftime("%B #{day_format}, %Y") # => "April 25th, 2007"
},
:rfc822 => '%e %b %Y',
:rfc822 => '%d %b %Y',
:iso8601 => lambda { |date| date.iso8601 }
}

@ -30,6 +30,17 @@ def test_to_s
assert_equal "2005-02-21", date.to_s(:iso8601)
end
def test_to_s_with_single_digit_day
date = Date.new(2005, 2, 1)
assert_equal "2005-02-01", date.to_s
assert_equal "01 Feb", date.to_s(:short)
assert_equal "February 01, 2005", date.to_s(:long)
assert_equal "February 1st, 2005", date.to_s(:long_ordinal)
assert_equal "2005-02-01", date.to_s(:db)
assert_equal "01 Feb 2005", date.to_s(:rfc822)
assert_equal "2005-02-01", date.to_s(:iso8601)
end
def test_readable_inspect
assert_equal "Mon, 21 Feb 2005", Date.new(2005, 2, 21).readable_inspect
assert_equal Date.new(2005, 2, 21).readable_inspect, Date.new(2005, 2, 21).inspect