Browse files

Merge pull request #12200 from dchelimsky/simplify-duration-inspect-e…

…ven-more

Reduce Duration#inspect to a single series of transformations
  • Loading branch information...
2 parents 1fa76a2 + b16b08e commit bca623bc5342007216ec9757c5192fef455e8a65 @rafaelfranca rafaelfranca committed Sep 11, 2013
Showing with 7 additions and 6 deletions.
  1. +4 −6 activesupport/lib/active_support/duration.rb
  2. +3 −0 activesupport/test/core_ext/duration_test.rb
View
10 activesupport/lib/active_support/duration.rb
@@ -70,12 +70,10 @@ def ago(time = ::Time.current)
alias :until :ago
def inspect #:nodoc:
- val_for = parts.inject(::Hash.new(0)) { |h,(l,r)| h[l] += r; h }
- [:years, :months, :days, :minutes, :seconds].
- select {|unit| val_for[unit].nonzero?}.
- 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}"}.
+ parts.
+ reduce(::Hash.new(0)) { |h,(l,r)| h[l] += r; h }.
+ sort_by {|unit, _ | [:years, :months, :days, :minutes, :seconds].index(unit)}.
+ map {|unit, val| "#{val} #{val == 1 ? unit.to_s.chop : unit.to_s}"}.
to_sentence(:locale => :en)
end
View
3 activesupport/test/core_ext/duration_test.rb
@@ -27,6 +27,7 @@ def test_threequals
def test_equals
assert 1.day == 1.day
assert 1.day == 1.day.to_i
+ assert 1.day.to_i == 1.day
assert !(1.day == 'foo')
end
@@ -37,6 +38,8 @@ def test_inspect
assert_equal '6 months and -2 days', (6.months - 2.days).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 + 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 '14 days', 1.fortnight.inspect
end

0 comments on commit bca623b

Please sign in to comment.