Skip to content

Commit

Permalink
Make output of distance_of_time_in_words consistent
Browse files Browse the repository at this point in the history
This commit fixes the output of distance_of_time_in_words when
using integer or duration arguments. Previously a distance of
more than 30 seconds would be output as 'Less than 1 minute'
when using integer arguments and '1 minute' when using two
Time instances more than 30 seconds apart.

Cherry picked from 5fdd4cd
  • Loading branch information
pixeltrix committed Dec 4, 2012
1 parent 549da0d commit 18e1227
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
4 changes: 2 additions & 2 deletions actionpack/lib/action_view/helpers/date_helper.rb
Expand Up @@ -68,10 +68,10 @@ def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, o
options = {
:scope => :'datetime.distance_in_words',
}.merge!(options)

from_time = from_time.to_time if from_time.respond_to?(:to_time)
to_time = to_time.to_time if to_time.respond_to?(:to_time)
distance_in_minutes = (((to_time - from_time).abs)/60).round
distance_in_minutes = (((to_time - from_time).abs)/60.0).round
distance_in_seconds = ((to_time - from_time).abs).round

I18n.with_options :locale => options[:locale], :scope => options[:scope] do |locale|
Expand Down
21 changes: 19 additions & 2 deletions actionpack/test/template/date_helper_test.rb
Expand Up @@ -128,12 +128,29 @@ def test_distance_in_words_with_dates
end

def test_distance_in_words_with_integers
assert_equal "less than a minute", distance_of_time_in_words(59)
assert_equal "1 minute", distance_of_time_in_words(59)
assert_equal "about 1 hour", distance_of_time_in_words(60*60)
assert_equal "less than a minute", distance_of_time_in_words(0, 59)
assert_equal "1 minute", distance_of_time_in_words(0, 59)
assert_equal "about 1 hour", distance_of_time_in_words(60*60, 0)
end

def test_distance_in_words_with_times
assert_equal "1 minute", distance_of_time_in_words(30.seconds)
assert_equal "1 minute", distance_of_time_in_words(59.seconds)
assert_equal "2 minutes", distance_of_time_in_words(119.seconds)
assert_equal "2 minutes", distance_of_time_in_words(1.minute + 59.seconds)
assert_equal "3 minutes", distance_of_time_in_words(2.minute + 30.seconds)
assert_equal "44 minutes", distance_of_time_in_words(44.minutes + 29.seconds)
assert_equal "about 1 hour", distance_of_time_in_words(44.minutes + 30.seconds)
assert_equal "about 1 hour", distance_of_time_in_words(60.minutes)

# include seconds
assert_equal "half a minute", distance_of_time_in_words(39.seconds, 0, true)
assert_equal "less than a minute", distance_of_time_in_words(40.seconds, 0, true)
assert_equal "less than a minute", distance_of_time_in_words(59.seconds, 0, true)
assert_equal "1 minute", distance_of_time_in_words(60.seconds, 0, true)
end

def test_time_ago_in_words
assert_equal "about 1 year", time_ago_in_words(1.year.ago - 1.day)
end
Expand Down

0 comments on commit 18e1227

Please sign in to comment.