Introduce Date#all_day

Useful for queries like:

    Item.where(created_at: Date.current.all_day)

There was already a Time#all_day with the same behaviour, but for
queries like the above, Date is more convenient.
This commit is contained in:
Henrik Nyh 2016-05-09 16:06:19 +01:00
parent a0b3de3002
commit f005202972
3 changed files with 22 additions and 5 deletions

@ -294,6 +294,11 @@ def end_of_year
end
alias :at_end_of_year :end_of_year
# Returns a Range representing the whole day of the current date/time.
def all_day
beginning_of_day..end_of_day
end
# Returns a Range representing the whole week of the current date/time.
# Week starts on start_day, default is <tt>Date.week_start</tt> or <tt>config.week_start</tt> when set.
def all_week(start_day = Date.beginning_of_week)

@ -227,11 +227,6 @@ def end_of_minute
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
end
def plus_with_duration(other) #:nodoc:
if ActiveSupport::Duration === other
other.since(self)

@ -284,6 +284,23 @@ def test_end_of_day_when_zone_is_set
end
end
def test_all_day
beginning_of_day = Time.local(2011,6,7,0,0,0)
end_of_day = Time.local(2011,6,7,23,59,59,Rational(999999999, 1000))
assert_equal beginning_of_day..end_of_day, Date.new(2011,6,7).all_day
end
def test_all_day_when_zone_is_set
zone = ActiveSupport::TimeZone["Hawaii"]
with_env_tz "UTC" do
with_tz_default zone do
beginning_of_day = zone.local(2011,6,7,0,0,0)
end_of_day = zone.local(2011,6,7,23,59,59,Rational(999999999, 1000))
assert_equal beginning_of_day..end_of_day, Date.new(2011,6,7).all_day
end
end
end
def test_all_week
assert_equal Date.new(2011,6,6)..Date.new(2011,6,12), Date.new(2011,6,7).all_week
assert_equal Date.new(2011,6,5)..Date.new(2011,6,11), Date.new(2011,6,7).all_week(:sunday)