This project is archived and is in readonly mode.

distance_of_time_in_words displays Rational instead of integer
Reported by Corey | January 28th, 2010 @ 05:26 PM
When using the mathn ruby standard library, either directly or indirectly, the display of distance_of_time_in_words for time distances of one year or greater shows a Rational number instead of an integer.
For example:
$ script/console
Loading development environment (Rails 2.3.5)
>> from_time = Time.now
=> Thu Jan 28 09:11:53 -0800 2010
>> helper.distance_of_time_in_words(from_time, from_time + 1.year + 3.days)
=> "about 1 year"
>> require 'mathn'
=> ["Prime"]
>> helper.distance_of_time_in_words(from_time, from_time + 1.year + 3.days)
=> "about 368/365 years"
>>
I think that if line 92 in rails/actionpack/lib/action_view/helpers/date_helper.rb uses the round method on the result of the division for the distance_in_years value the display will be as expected.
Comments and changes to this ticket
-
Rohit Arondekar October 7th, 2010 @ 11:37 AM
- State changed from new to stale
- Importance changed from to Low
Marking ticket as stale. If this is still an issue please leave a comment with suggested changes, creating a patch with tests, rebasing an existing patch or just confirming the issue on a latest release or master/branches.
-
Corey October 8th, 2010 @ 02:59 AM
From the latest 2.3.x release:
$ script/console Loading development environment (Rails 2.3.9) >> from_time = Time.now => Thu Oct 07 18:20:30 -0700 2010 >> helper.distance_of_time_in_words(from_time, from_time + 1.year + 3.days) => "about 1 year" >> require 'mathn' => ["Prime"] >> helper.distance_of_time_in_words(from_time, from_time + 1.year + 3.days) => "about 368/365 years" >>
From the latest Rails release:
$ rails console Loading development environment (Rails 3.0.0) >> from_time = Time.now => Thu Oct 07 18:28:08 -0700 2010 >> helper.distance_of_time_in_words(from_time, from_time + 1.year + 3.days) => "about 1 year" >> require 'mathn' => ["Prime"] >> helper.distance_of_time_in_words(from_time, from_time + 1.year + 3.days) => "about 368/365 years" >>
I wanted to add a test case that would illustrate the problem. However, as it turned out requiring 'mathn' in the date_helper_test.rb also had it loaded for all of the tests that run after it and some of those then also failed. I don't know how to sandbox the loading of 'mathn' in the test suite so that other tests aren't affected.
However, for Fixnums the methods / and div give the same result, and that changing from / to div ensures that mathn's Rationals are not returned. I've created a patch from 2-3-stable which does that for distance_of_time_in_words and attached it.
-
Rohit Arondekar October 8th, 2010 @ 03:07 AM
- State changed from stale to open
Wait, so mathn is redefining '/'? I think then it's the gems fault and not Rails. I mean Rails shouldn't change because of this. Still, opening ticket to get a consensus on this issue. Thanks for the reply!
-
Corey October 8th, 2010 @ 03:34 AM
Unfortunately, in my application I'm not loading 'mathn' directly, some gem I just happen to use is loading it. Everything was ok for me with until this change to the DateHelper.
Just for reference, here's the Ruby issue related to mathn's behavior.
-
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>