Last active
January 4, 2016 05:29
-
-
Save voidius/8575955 to your computer and use it in GitHub Desktop.
Ruby on Rails 'Date' object enhancements
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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