diff options
-rw-r--r-- | activesupport/CHANGELOG | 2 | ||||
-rw-r--r-- | activesupport/lib/core_ext/fixnum_ext.rb | 18 | ||||
-rw-r--r-- | activesupport/test/core_ext/fixnum_ext_test.rb | 15 |
3 files changed, 30 insertions, 5 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 391447140d..6ac105bde1 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,3 +1,5 @@ +* Added Fixnum#ago/until, Fixnum#since/from_now #450 [bitsweat] + * Added that Inflector now accepts Symbols and Classes by calling .to_s on the word supplied * Added time unit extensions to Fixnum that'll return the period in seconds, like 2.days + 4.hours.
\ No newline at end of file diff --git a/activesupport/lib/core_ext/fixnum_ext.rb b/activesupport/lib/core_ext/fixnum_ext.rb index c7b875c021..14944df3bb 100644 --- a/activesupport/lib/core_ext/fixnum_ext.rb +++ b/activesupport/lib/core_ext/fixnum_ext.rb @@ -33,4 +33,20 @@ class Fixnum self * 365.days end alias :year :years -end
\ No newline at end of file + + # Reads best without arguments: 10.minutes.ago + def ago(time = Time.now) + time - self + end + + # Reads best with argument: 10.minutes.until(time) + alias :until :ago + + # Reads best with argument: 10.minutes.since(time) + def since(time = Time.now) + time + self + end + + # Reads best without arguments: 10.minutes.from_now + alias :from_now :since +end diff --git a/activesupport/test/core_ext/fixnum_ext_test.rb b/activesupport/test/core_ext/fixnum_ext_test.rb index 4014ad07d0..12ef69596d 100644 --- a/activesupport/test/core_ext/fixnum_ext_test.rb +++ b/activesupport/test/core_ext/fixnum_ext_test.rb @@ -2,15 +2,22 @@ require 'test/unit' require File.dirname(__FILE__) + '/../../lib/core_ext/fixnum_ext' class FixnumExtTest < Test::Unit::TestCase - def test_time_units - expected = { + def setup + @now = Time.now + @seconds = { 1.minute => 60, 10.minutes => 600, 1.hour + 15.minutes => 4500, 2.days + 4.hours + 30.minutes => 189000, 5.years + 1.month + 1.fortnight => 161481600 } + end - expected.each { |actual, expected| assert_equal expected, actual } + def test_time_units + @seconds.each do |actual, expected| + assert_equal expected, actual + assert_equal expected.since(@now), @now + actual + assert_equal expected.until(@now), @now - actual + end end -end
\ No newline at end of file +end |