mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #12200 from dchelimsky/simplify-duration-inspect-even-more
Reduce Duration#inspect to a single series of transformations
This commit is contained in:
commit
bca623bc53
2 changed files with 7 additions and 6 deletions
|
@ -70,11 +70,9 @@ module ActiveSupport
|
||||||
alias :until :ago
|
alias :until :ago
|
||||||
|
|
||||||
def inspect #:nodoc:
|
def inspect #:nodoc:
|
||||||
val_for = parts.inject(::Hash.new(0)) { |h,(l,r)| h[l] += r; h }
|
parts.
|
||||||
[:years, :months, :days, :minutes, :seconds].
|
reduce(::Hash.new(0)) { |h,(l,r)| h[l] += r; h }.
|
||||||
select {|unit| val_for[unit].nonzero?}.
|
sort_by {|unit, _ | [:years, :months, :days, :minutes, :seconds].index(unit)}.
|
||||||
tap {|units| units << :seconds if units.empty?}.
|
|
||||||
map {|unit| [unit, val_for[unit]]}.
|
|
||||||
map {|unit, val| "#{val} #{val == 1 ? unit.to_s.chop : unit.to_s}"}.
|
map {|unit, val| "#{val} #{val == 1 ? unit.to_s.chop : unit.to_s}"}.
|
||||||
to_sentence(:locale => :en)
|
to_sentence(:locale => :en)
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,6 +27,7 @@ class DurationTest < ActiveSupport::TestCase
|
||||||
def test_equals
|
def test_equals
|
||||||
assert 1.day == 1.day
|
assert 1.day == 1.day
|
||||||
assert 1.day == 1.day.to_i
|
assert 1.day == 1.day.to_i
|
||||||
|
assert 1.day.to_i == 1.day
|
||||||
assert !(1.day == 'foo')
|
assert !(1.day == 'foo')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -37,6 +38,8 @@ class DurationTest < ActiveSupport::TestCase
|
||||||
assert_equal '6 months and -2 days', (6.months - 2.days).inspect
|
assert_equal '6 months and -2 days', (6.months - 2.days).inspect
|
||||||
assert_equal '10 seconds', 10.seconds.inspect
|
assert_equal '10 seconds', 10.seconds.inspect
|
||||||
assert_equal '10 years, 2 months, and 1 day', (10.years + 2.months + 1.day).inspect
|
assert_equal '10 years, 2 months, and 1 day', (10.years + 2.months + 1.day).inspect
|
||||||
|
assert_equal '10 years, 2 months, and 1 day', (10.years + 1.month + 1.day + 1.month).inspect
|
||||||
|
assert_equal '10 years, 2 months, and 1 day', (1.day + 10.years + 2.months).inspect
|
||||||
assert_equal '7 days', 1.week.inspect
|
assert_equal '7 days', 1.week.inspect
|
||||||
assert_equal '14 days', 1.fortnight.inspect
|
assert_equal '14 days', 1.fortnight.inspect
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue