Skip to content

Commit

Permalink
Added Time#whole_day/week/quarter/year as a way of generating ranges …
Browse files Browse the repository at this point in the history
…(example: Event.where(created_at: Time.now.whole_week)) [DHH]
  • Loading branch information
dhh committed Jun 13, 2011
1 parent b12c2e4 commit d6cc0e5
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
2 changes: 2 additions & 0 deletions activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*Rails 3.2.0 (unreleased)*

* Added Time#whole_day/week/quarter/year as a way of generating ranges (example: Event.where(created_at: Time.now.whole_week)) [DHH]

* Added instance_accessor: false as an option to Class#cattr_accessor and friends [DHH]

* Removed ActiveSupport::SecureRandom in favour of SecureRandom from the standard library [Jon Leighton]
Expand Down
27 changes: 26 additions & 1 deletion activesupport/lib/active_support/core_ext/time/calculations.rb
Expand Up @@ -226,7 +226,7 @@ def end_of_quarter
end
alias :at_end_of_quarter :end_of_quarter

# Returns a new Time representing the start of the year (1st of january, 0:00)
# Returns a new Time representing the start of the year (1st of january, 0:00)
def beginning_of_year
change(:month => 1, :day => 1, :hour => 0)
end
Expand All @@ -248,6 +248,31 @@ def tomorrow
advance(:days => 1)
end

# Returns a Range representing the whole day of the current time.
def whole_day
beginning_of_day..end_of_day
end

# Returns a Range representing the whole week of the current time.
def whole_week
beginning_of_week..end_of_week
end

# Returns a Range representing the whole month of the current time.
def whole_month
beginning_of_month..end_of_month
end

# Returns a Range representing the whole quarter of the current time.
def whole_quarter
beginning_of_quarter..end_of_quarter
end

# Returns a Range representing the whole year of the current time.
def whole_year
beginning_of_year..end_of_year
end

def plus_with_duration(other) #:nodoc:
if ActiveSupport::Duration === other
other.since(self)
Expand Down
20 changes: 20 additions & 0 deletions activesupport/test/core_ext/time_ext_test.rb
Expand Up @@ -767,6 +767,26 @@ def test_case_equality
assert_equal false, Time === DateTime.civil(2000)
end

def test_whole_day
assert_equal Time.local(2011,6,7,0,0,0)..Time.local(2011,6,7,23,59,59,999999.999), Time.local(2011,6,7,10,10,10).whole_day
end

def test_whole_week
assert_equal Time.local(2011,6,6,0,0,0)..Time.local(2011,6,12,23,59,59,999999.999), Time.local(2011,6,7,10,10,10).whole_week
end

def test_whole_month
assert_equal Time.local(2011,6,1,0,0,0)..Time.local(2011,6,30,23,59,59,999999.999), Time.local(2011,6,7,10,10,10).whole_month
end

def test_whole_quarter
assert_equal Time.local(2011,4,1,0,0,0)..Time.local(2011,6,30,23,59,59,999999.999), Time.local(2011,6,7,10,10,10).whole_quarter
end

def test_whole_year
assert_equal Time.local(2011,1,1,0,0,0)..Time.local(2011,12,31,23,59,59,999999.999), Time.local(2011,6,7,10,10,10).whole_year
end

protected
def with_env_tz(new_tz = 'US/Eastern')
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
Expand Down

4 comments on commit d6cc0e5

@dhh
Copy link
Member Author

@dhh dhh commented on d6cc0e5 Jun 13, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Renamed these to Time#all_* on suggestion from Pratik. Flows better.

@fxn
Copy link
Member

@fxn fxn commented on d6cc0e5 Jun 13, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to add these to the AS core extensions guide.

@lukaskonarovsky
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should not these be handy in Date as well?

@stefanoverna
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@daeltar +1

Please sign in to comment.