cal 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cal.rb +1 -0
- data/lib/cal/day.rb +11 -1
- data/lib/cal/monthly_calendar.rb +10 -18
- data/lib/cal/version.rb +1 -1
- data/spec/cal/day_spec.rb +17 -0
- data/spec/cal/monthly_calendar_spec.rb +23 -14
- metadata +1 -1
data/lib/cal.rb
CHANGED
data/lib/cal/day.rb
CHANGED
@@ -3,6 +3,8 @@ require 'active_support/core_ext/module/delegation'
|
|
3
3
|
module Cal
|
4
4
|
class Day
|
5
5
|
|
6
|
+
include Comparable
|
7
|
+
|
6
8
|
def initialize(date, calendar)
|
7
9
|
@date = date
|
8
10
|
@calendar = calendar
|
@@ -13,7 +15,15 @@ module Cal
|
|
13
15
|
delegate :today?, :to => :date
|
14
16
|
|
15
17
|
def ==(other)
|
16
|
-
other.is_a?(Day) &&
|
18
|
+
other.is_a?(Day) && calendar == other.calendar && date == other.date
|
19
|
+
end
|
20
|
+
|
21
|
+
def <=>(other)
|
22
|
+
date <=> other.date
|
23
|
+
end
|
24
|
+
|
25
|
+
def succ
|
26
|
+
self.class.new date.tomorrow, calendar
|
17
27
|
end
|
18
28
|
|
19
29
|
def number
|
data/lib/cal/monthly_calendar.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'active_support/time'
|
2
1
|
require 'active_support/core_ext/array/grouping'
|
3
2
|
require 'active_support/core_ext/string/conversions'
|
4
3
|
|
@@ -21,12 +20,20 @@ module Cal
|
|
21
20
|
@month ||= Month.new self
|
22
21
|
end
|
23
22
|
|
23
|
+
def first_day
|
24
|
+
@first_day ||= Day.new date.beginning_of_month.beginning_of_week(:sunday), self
|
25
|
+
end
|
26
|
+
|
27
|
+
def last_day
|
28
|
+
@last_day ||= Day.new date.end_of_month.end_of_week(:sunday), self
|
29
|
+
end
|
30
|
+
|
24
31
|
def days
|
25
|
-
@days ||=
|
32
|
+
@days ||= first_day..last_day
|
26
33
|
end
|
27
34
|
|
28
35
|
def weeks
|
29
|
-
@weeks ||= days.in_groups_of 7
|
36
|
+
@weeks ||= days.to_a.in_groups_of 7
|
30
37
|
end
|
31
38
|
|
32
39
|
def previous
|
@@ -37,20 +44,5 @@ module Cal
|
|
37
44
|
self.class.new date.next_month
|
38
45
|
end
|
39
46
|
|
40
|
-
private
|
41
|
-
|
42
|
-
# TODO: simplify/improve this
|
43
|
-
def dates
|
44
|
-
[].tap do |dates|
|
45
|
-
day = date.beginning_of_month.beginning_of_week :sunday
|
46
|
-
last_day = date.end_of_month.end_of_week :sunday
|
47
|
-
|
48
|
-
while day <= last_day
|
49
|
-
dates << day
|
50
|
-
day = day.tomorrow
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
47
|
end
|
56
48
|
end
|
data/lib/cal/version.rb
CHANGED
data/spec/cal/day_spec.rb
CHANGED
@@ -9,6 +9,8 @@ describe Cal::Day do
|
|
9
9
|
@calendar = OpenStruct.new :current_day => Date.new(2012, 1, 5)
|
10
10
|
end
|
11
11
|
|
12
|
+
it { should be_a(Comparable) }
|
13
|
+
|
12
14
|
describe "==" do
|
13
15
|
it "is true with another day with the same calendar and date" do
|
14
16
|
subject.should == described_class.new(@date, @calendar)
|
@@ -43,4 +45,19 @@ describe Cal::Day do
|
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
48
|
+
describe "<=>" do
|
49
|
+
it "is the result of comparing the dates" do
|
50
|
+
other_date = Date.new 2012, 2, 15
|
51
|
+
result = Object.new
|
52
|
+
subject.date.stub(:<=>) { |obj| result if obj == other_date }
|
53
|
+
(subject <=> described_class.new(other_date, Object.new)).should == result
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "succ" do
|
58
|
+
it "is the next day" do
|
59
|
+
subject.succ.should == described_class.new(Date.new(2012, 1, 16), @calendar)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
46
63
|
end
|
@@ -51,29 +51,38 @@ describe Cal::MonthlyCalendar do
|
|
51
51
|
it { subject.month.should == Cal::Month.new(subject) }
|
52
52
|
end
|
53
53
|
|
54
|
-
describe "
|
55
|
-
it "is
|
54
|
+
describe "first_day" do
|
55
|
+
it "is the first viewable day on the calendar" do
|
56
56
|
@date = Date.new 2012, 2, 23
|
57
|
+
subject.first_day.should == Cal::Day.new(Date.new(2012, 1, 29), subject)
|
58
|
+
end
|
59
|
+
end
|
57
60
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
describe "last_day" do
|
62
|
+
it "is the last viewable day on the calendar" do
|
63
|
+
@date = Date.new 2012, 2, 23
|
64
|
+
subject.last_day.should == Cal::Day.new(Date.new(2012, 3, 3), subject)
|
65
|
+
end
|
66
|
+
end
|
61
67
|
|
62
|
-
|
63
|
-
|
64
|
-
|
68
|
+
describe "days" do
|
69
|
+
it "is a range of all the viewable days" do
|
70
|
+
@date = Date.new 2012, 2, 23
|
71
|
+
first_day = Cal::Day.new Date.new(2012, 1, 29), subject
|
72
|
+
last_day = Cal::Day.new Date.new(2012, 3, 3), subject
|
73
|
+
subject.days.should == (first_day..last_day)
|
65
74
|
end
|
66
75
|
end
|
67
76
|
|
68
77
|
describe "weeks" do
|
69
|
-
it "
|
78
|
+
it "an array of the days in groups of 7" do
|
70
79
|
@date = Date.parse "2012-02-23"
|
71
80
|
subject.weeks.should == [
|
72
|
-
%w[01-29 01-30 01-31 02-01 02-02 02-03 02-04].map { |s| Cal::Day.new
|
73
|
-
%w[02-05 02-06 02-07 02-08 02-09 02-10 02-11].map { |s| Cal::Day.new
|
74
|
-
%w[02-12 02-13 02-14 02-15 02-16 02-17 02-18].map { |s| Cal::Day.new
|
75
|
-
%w[02-19 02-20 02-21 02-22 02-23 02-24 02-25].map { |s| Cal::Day.new
|
76
|
-
%w[02-26 02-27 02-28 02-29 03-01 03-02 03-03].map { |s| Cal::Day.new
|
81
|
+
%w[01-29 01-30 01-31 02-01 02-02 02-03 02-04].map { |s| Cal::Day.new Date.parse("2012-#{s}"), subject },
|
82
|
+
%w[02-05 02-06 02-07 02-08 02-09 02-10 02-11].map { |s| Cal::Day.new Date.parse("2012-#{s}"), subject },
|
83
|
+
%w[02-12 02-13 02-14 02-15 02-16 02-17 02-18].map { |s| Cal::Day.new Date.parse("2012-#{s}"), subject },
|
84
|
+
%w[02-19 02-20 02-21 02-22 02-23 02-24 02-25].map { |s| Cal::Day.new Date.parse("2012-#{s}"), subject },
|
85
|
+
%w[02-26 02-27 02-28 02-29 03-01 03-02 03-03].map { |s| Cal::Day.new Date.parse("2012-#{s}"), subject }
|
77
86
|
]
|
78
87
|
end
|
79
88
|
end
|