Skip to content

Commit

Permalink
Add i18n scope to disance_of_time_in_words.
Browse files Browse the repository at this point in the history
This is a backport of rails#7997.
  • Loading branch information
steveklabnik committed Nov 26, 2012
1 parent 5167665 commit 1a876f6
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
3 changes: 2 additions & 1 deletion actionpack/CHANGELOG.md
@@ -1,7 +1,8 @@
## Rails 3.2.10 (unreleased) ##

* Fix side effect of `url_for` changing the `:controller` string option. [Backport #6003]
* Add i18n scope to disance_of_time_in_words. [Backport #7997] *Steve Klabnik*

* Fix side effect of `url_for` changing the `:controller` string option. [Backport #6003]
Before:

controller = '/projects'
Expand Down
10 changes: 7 additions & 3 deletions actionpack/lib/action_view/helpers/date_helper.rb
Expand Up @@ -65,12 +65,16 @@ module DateHelper
# distance_of_time_in_words(Time.now, Time.now) # => less than a minute
#
def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, options = {})
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_seconds = ((to_time - from_time).abs).round

I18n.with_options :locale => options[:locale], :scope => :'datetime.distance_in_words' do |locale|
I18n.with_options :locale => options[:locale], :scope => options[:scope] do |locale|
case distance_in_minutes
when 0..1
return distance_in_minutes == 0 ?
Expand Down Expand Up @@ -129,8 +133,8 @@ def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, o
# from_time = Time.now - 3.days - 14.minutes - 25.seconds
# time_ago_in_words(from_time) # => 3 days
#
def time_ago_in_words(from_time, include_seconds = false)
distance_of_time_in_words(from_time, Time.now, include_seconds)
def time_ago_in_words(from_time, include_seconds = false, options = {})
distance_of_time_in_words(from_time, Time.now, include_seconds, options)
end

alias_method :distance_of_time_in_words_to_now, :time_ago_in_words
Expand Down
15 changes: 12 additions & 3 deletions actionpack/test/template/date_helper_i18n_test.rb
Expand Up @@ -36,16 +36,25 @@ def test_distance_of_time_in_words_calls_i18n
end
end

def assert_distance_of_time_in_words_translates_key(passed, expected)
def test_distance_of_time_in_words_calls_i18n_with_custom_scope
{
[30.days, false] => [:'about_x_months', 1],
[60.days, false] => [:'x_months', 2],
}.each do |passed, expected|
assert_distance_of_time_in_words_translates_key(passed, expected, {:scope => :'datetime.distance_in_words_ago'})
end
end

def assert_distance_of_time_in_words_translates_key(passed, expected, options = {})
diff, include_seconds = *passed
key, count = *expected
to = @from + diff

options = {:locale => 'en', :scope => :'datetime.distance_in_words'}
options = {:locale => 'en', :scope => :'datetime.distance_in_words'}.merge(options)
options[:count] = count if count

I18n.expects(:t).with(key, options)
distance_of_time_in_words(@from, to, include_seconds, :locale => 'en')
distance_of_time_in_words(@from, to, include_seconds, options)
end

def test_distance_of_time_pluralizations
Expand Down

0 comments on commit 1a876f6

Please sign in to comment.