Skip to content

Instantly share code, notes, and snippets.

@voidius
Last active January 4, 2016 05:29
Show Gist options
  • Save voidius/8575955 to your computer and use it in GitHub Desktop.
Save voidius/8575955 to your computer and use it in GitHub Desktop.
Ruby on Rails 'Date' object enhancements
class Date
def beginning_of_halfyear
beginning_of_month.change(:month => [7, 1].detect { |m| m <= self.month })
end
def end_of_halfyear
beginning_of_month.change(:month => [6, 12].detect { |m| m >= self.month }).end_of_month
end
# def beginning_of_month?
# def beginning_of_week?
# def beginning_of_quarter?
# def beginning_of_halfyear?
# def beginning_of_year?
# def end_of_month?
# def end_of_week?
# def end_of_quarter?
# def end_of_halfyear?
# def end_of_year?
%w(week month quarter halfyear year).each do |period|
define_method "beginning_of_#{period}?" do
self == self.send("beginning_of_#{period}")
end
define_method "end_of_#{period}?" do
self == self.send("end_of_#{period}")
end
end
end
require 'spec_helper'
describe Date do
describe "#beginning_of_week?" do
it "returns true if today is first day of a week" do
Timecop.freeze Time.parse("Mon, 29 Oct 2001")
Date.today.beginning_of_week?.should be_true
end
it "returns false if today is not first day of a week" do
Timecop.freeze Time.parse("Tue, 30 Oct 2001")
Date.today.beginning_of_week?.should_not be_true
end
end
describe "#beginning_of_month?" do
it "returns true if today is first day of a month" do
Timecop.freeze Time.parse("Thu, 1 Nov 2001")
Date.today.beginning_of_month?.should be_true
end
it "returns false if today is not first day of a month" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.beginning_of_month?.should_not be_true
end
end
describe "#beginning_of_quarter?" do
it "returns true if today is first day of a quarter" do
Timecop.freeze Time.parse("Thu, 1 Oct 2001")
Date.today.beginning_of_quarter?.should be_true
end
it "returns false if today is not first day of a quarter" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.beginning_of_quarter?.should_not be_true
end
end
describe "#beginning_of_halfyear?" do
it "returns true if today is first day of a halfyear" do
Timecop.freeze Time.parse("Sun, 01 Jul 2001")
Date.today.beginning_of_halfyear?.should be_true
end
it "returns false if today is not first day of a halfyear" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.beginning_of_halfyear?.should_not be_true
end
end
describe "#beginning_of_year?" do
it "returns true if today is first day of a year" do
Timecop.freeze Time.parse("Thu, 1 Jan 2001")
Date.today.beginning_of_year?.should be_true
end
it "returns false if today is not first day of a year" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.beginning_of_year?.should_not be_true
end
end
describe "#end_of_week?" do
it "returns true if today is last day of a week" do
Timecop.freeze Time.parse("Sun, 04 Nov 2001")
Date.today.end_of_week?.should be_true
end
it "returns false if today is not last day of a week" do
Timecop.freeze Time.parse("Tue, 30 Oct 2001")
Date.today.end_of_week?.should_not be_true
end
end
describe "#end_of_month?" do
it "returns true if today is last day of a month" do
Timecop.freeze Time.parse("Thu, 30 Nov 2001")
Date.today.end_of_month?.should be_true
end
it "returns false if today is not last day of a month" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.end_of_month?.should_not be_true
end
end
describe "#end_of_quarter?" do
it "returns true if today is last day of a quarter" do
Timecop.freeze Time.parse("Thu, 31 Dec 2001")
Date.today.end_of_quarter?.should be_true
end
it "returns false if today is not last day of a quarter" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.end_of_quarter?.should_not be_true
end
end
describe "#end_of_halfyear?" do
it "returns true if today is last day of a halfyear" do
Timecop.freeze Time.parse("Sun, 30 Jun 2001")
Date.today.end_of_halfyear?.should be_true
end
it "returns false if today is not last day of a halfyear" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.end_of_halfyear?.should_not be_true
end
end
describe "#end_of_year?" do
it "returns true if today is first day of a year" do
Timecop.freeze Time.parse("Thu, 31 Dec 2001")
Date.today.end_of_year?.should be_true
end
it "returns false if today is not first day of a year" do
Timecop.freeze Time.parse("Thu, 13 Nov 2001")
Date.today.end_of_year?.should_not be_true
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment