Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added beginning_of_minute support to core_ext calculations for Time a…

…nd DateTime
  • Loading branch information...
commit 6f380d37788a562c13d0d68b1d3f28f8a6f4b3ec 1 parent 3893979
@gaganawhad gaganawhad authored
View
4 activesupport/CHANGELOG.md
@@ -1,5 +1,9 @@
## Rails 4.0.0 (unreleased) ##
+* Added beginning_of_minute support to core_ext calculations for Time and DateTime
+
+ *Gagan Awhad*
+
* Add `:nsec` date format.
*Jamie Gaskins*
View
12 activesupport/lib/active_support/core_ext/date_time/calculations.rb
@@ -123,6 +123,18 @@ def end_of_hour
change(:min => 59, :sec => 59)
end
alias :at_end_of_hour :end_of_hour
+
+ # Returns a new DateTime representing the start of the hour (hh:mm:00).
+ def beginning_of_minute
@eval
eval added a note

The comment should state minute not hour.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ change(:sec => 0)
+ end
+ alias :at_beginning_of_minute :beginning_of_minute
+
+ # Returns a new DateTime representing the end of the minute (hh:mm:59).
+ def end_of_minute
+ change(:sec => 59)
+ end
+ alias :at_end_of_minute :end_of_minute
# Adjusts DateTime to UTC by adding its offset value; offset is set to 0.
#
View
15 activesupport/lib/active_support/core_ext/time/calculations.rb
@@ -188,6 +188,21 @@ def end_of_hour
end
alias :at_end_of_hour :end_of_hour
+ # Returns a new Time representing the start of the hour (x:xx:00)
+ def beginning_of_minute
@eval
eval added a note

Here as well: the comment should state minute not hour.

@eval
eval added a note

Somewhat hard to write a failing test for this, right? ;)
Let's ask @fxn

Yes, another PR or wait the cross merge with docrails to just update in there, both are ok.

@eval
eval added a note

Thanks. I opened #9384

Thanks @eval

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ change(:sec => 0)
+ end
+ alias :at_beginning_of_minute :beginning_of_minute
+
+ # Returns a new Time representing the end of the hour, x:59:59.999999 (.999999999 in ruby1.9)
+ def end_of_minute
+ change(
+ :sec => 59,
+ :usec => Rational(999999999, 1000)
+ )
+ end
+ alias :at_end_of_minute :end_of_minute
+
# Returns a Range representing the whole day of the current time.
def all_day
beginning_of_day..end_of_day
View
8 activesupport/test/core_ext/date_time_ext_test.rb
@@ -88,6 +88,14 @@ def test_end_of_hour
assert_equal DateTime.civil(2005,2,4,19,59,59), DateTime.civil(2005,2,4,19,30,10).end_of_hour
end
+ def test_beginning_of_minute
+ assert_equal DateTime.civil(2005,2,4,19,30,0), DateTime.civil(2005,2,4,19,30,10).beginning_of_minute
+ end
+
+ def test_end_of_minute
+ assert_equal DateTime.civil(2005,2,4,19,30,59), DateTime.civil(2005,2,4,19,30,10).end_of_minute
+ end
+
def test_end_of_month
assert_equal DateTime.civil(2005,3,31,23,59,59), DateTime.civil(2005,3,20,10,10,10).end_of_month
assert_equal DateTime.civil(2005,2,28,23,59,59), DateTime.civil(2005,2,20,10,10,10).end_of_month
View
8 activesupport/test/core_ext/time_ext_test.rb
@@ -121,6 +121,10 @@ def test_beginning_of_hour
assert_equal Time.local(2005,2,4,19,0,0), Time.local(2005,2,4,19,30,10).beginning_of_hour
end
+ def test_beginning_of_minute
+ assert_equal Time.local(2005,2,4,19,30,0), Time.local(2005,2,4,19,30,10).beginning_of_minute
+ end
+
def test_end_of_day
assert_equal Time.local(2007,8,12,23,59,59,Rational(999999999, 1000)), Time.local(2007,8,12,10,10,10).end_of_day
with_env_tz 'US/Eastern' do
@@ -137,6 +141,10 @@ def test_end_of_hour
assert_equal Time.local(2005,2,4,19,59,59,Rational(999999999, 1000)), Time.local(2005,2,4,19,30,10).end_of_hour
end
+ def test_end_of_minute
+ assert_equal Time.local(2005,2,4,19,30,59,Rational(999999999, 1000)), Time.local(2005,2,4,19,30,10).end_of_minute
+ end
+
def test_last_year
assert_equal Time.local(2004,6,5,10), Time.local(2005,6,5,10,0,0).last_year
end
View
14 activesupport/test/core_ext/time_with_zone_test.rb
@@ -539,6 +539,20 @@ def test_end_of_hour
assert_equal "Fri, 31 Dec 1999 19:59:59 EST -05:00", twz.end_of_hour.inspect
end
+ def test_beginning_of_minute
+ utc = Time.utc(2000, 1, 1, 0, 30, 10)
+ twz = ActiveSupport::TimeWithZone.new(utc, @time_zone)
+ assert_equal "Fri, 31 Dec 1999 19:30:10 EST -05:00", twz.inspect
+ assert_equal "Fri, 31 Dec 1999 19:00:00 EST -05:00", twz.beginning_of_hour.inspect
+ end
+
+ def test_end_of_minute
+ utc = Time.utc(2000, 1, 1, 0, 30, 10)
+ twz = ActiveSupport::TimeWithZone.new(utc, @time_zone)
+ assert_equal "Fri, 31 Dec 1999 19:30:10 EST -05:00", twz.inspect
+ assert_equal "Fri, 31 Dec 1999 19:30:59 EST -05:00", twz.end_of_minute.inspect
+ end
+
def test_since
assert_equal "Fri, 31 Dec 1999 19:00:01 EST -05:00", @twz.since(1).inspect
end

3 comments on commit 6f380d3

@fxn
Owner

Hey, the Active Support core extensions guide should have been updated by this patch.

@gaganawhad

Got it! I will do that. Thanks for getting my attention on it.

@gaganawhad

Added to the guide in this commit: rails/docrails@f7a0a95

Please sign in to comment.
Something went wrong with that request. Please try again.