cal 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -10
- data/lib/cal.rb +1 -0
- data/lib/cal/monthly_calendar.rb +20 -9
- data/lib/cal/version.rb +1 -1
- data/lib/cal/year.rb +19 -0
- data/spec/cal/monthly_calendar_spec.rb +24 -0
- data/spec/cal/year_spec.rb +34 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -20,34 +20,31 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
+
See the Rails app [https://github.com/austinthecoder/cal-app](https://github.com/austinthecoder/cal-app) for an example.
|
24
|
+
|
23
25
|
### Rails example
|
24
26
|
|
25
27
|
``` ruby
|
26
28
|
# in the controller
|
27
|
-
- calendar = Cal::MonthlyCalendar.new
|
29
|
+
- calendar = Cal::MonthlyCalendar.new((params[:date] || Date.current), :start_week_on => :monday)
|
28
30
|
|
29
31
|
# in the view
|
30
32
|
%h3
|
31
33
|
= link_to 'Previous month', url_for(:date => calendar.previous.date)
|
32
34
|
|
|
33
|
-
= calendar.month
|
35
|
+
= "#{calendar.month} #{calendar.year}"
|
34
36
|
|
|
35
37
|
= link_to 'Next month', url_for(:date => calendar.next.date)
|
36
38
|
|
37
39
|
%table
|
38
40
|
%thead
|
39
41
|
%tr
|
40
|
-
|
41
|
-
|
42
|
-
%th Tuesday
|
43
|
-
%th Wednesday
|
44
|
-
%th Thursday
|
45
|
-
%th Friday
|
46
|
-
%th Saturday
|
42
|
+
- calendar.day_names.each do |name|
|
43
|
+
%th= name
|
47
44
|
%tbody
|
48
45
|
- calendar.weeks.each do |week|
|
49
46
|
%tr
|
50
|
-
- week.
|
47
|
+
- week.each do |day|
|
51
48
|
%td{:class => ('today' if day.today?)}
|
52
49
|
= day.number
|
53
50
|
```
|
data/lib/cal.rb
CHANGED
data/lib/cal/monthly_calendar.rb
CHANGED
@@ -4,13 +4,24 @@ require 'active_support/core_ext/string/conversions'
|
|
4
4
|
module Cal
|
5
5
|
class MonthlyCalendar
|
6
6
|
|
7
|
+
DAY_NAMES = {
|
8
|
+
:sunday => 0,
|
9
|
+
:monday => 1,
|
10
|
+
:tuesday => 2,
|
11
|
+
:wednesday => 3,
|
12
|
+
:thursday => 4,
|
13
|
+
:friday => 5,
|
14
|
+
:saturday => 6
|
15
|
+
}
|
16
|
+
|
7
17
|
def initialize(dateable, options = {})
|
8
|
-
options = options.reverse_merge :start_week_on => :sunday
|
9
18
|
@date = dateable.to_date
|
10
|
-
@
|
19
|
+
@start_week_on = options[:start_week_on] || :sunday
|
20
|
+
@month = Month.new self
|
21
|
+
@year = Year.new self
|
11
22
|
end
|
12
23
|
|
13
|
-
attr_reader :date
|
24
|
+
attr_reader :date, :month, :year
|
14
25
|
|
15
26
|
def ==(other)
|
16
27
|
other.is_a?(MonthlyCalendar) &&
|
@@ -18,16 +29,12 @@ module Cal
|
|
18
29
|
other.date.month == date.month
|
19
30
|
end
|
20
31
|
|
21
|
-
def month
|
22
|
-
@month ||= Month.new self
|
23
|
-
end
|
24
|
-
|
25
32
|
def first_day
|
26
|
-
@first_day ||= Day.new date.beginning_of_month.beginning_of_week(@
|
33
|
+
@first_day ||= Day.new date.beginning_of_month.beginning_of_week(@start_week_on), self
|
27
34
|
end
|
28
35
|
|
29
36
|
def last_day
|
30
|
-
@last_day ||= Day.new date.end_of_month.end_of_week(@
|
37
|
+
@last_day ||= Day.new date.end_of_month.end_of_week(@start_week_on), self
|
31
38
|
end
|
32
39
|
|
33
40
|
def days
|
@@ -46,5 +53,9 @@ module Cal
|
|
46
53
|
self.class.new date.next_month
|
47
54
|
end
|
48
55
|
|
56
|
+
def day_names
|
57
|
+
%w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday].rotate DAY_NAMES[@start_week_on]
|
58
|
+
end
|
59
|
+
|
49
60
|
end
|
50
61
|
end
|
data/lib/cal/version.rb
CHANGED
data/lib/cal/year.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module Cal
|
2
|
+
class Year
|
3
|
+
|
4
|
+
def initialize(calendar)
|
5
|
+
@calendar = calendar
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :calendar
|
9
|
+
|
10
|
+
def ==(other)
|
11
|
+
other.is_a?(Year) && other.calendar == calendar
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
calendar.date.strftime "%Y"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -54,6 +54,10 @@ describe Cal::MonthlyCalendar do
|
|
54
54
|
it { subject.month.should == Cal::Month.new(subject) }
|
55
55
|
end
|
56
56
|
|
57
|
+
describe "year" do
|
58
|
+
it { subject.year.should == Cal::Year.new(subject) }
|
59
|
+
end
|
60
|
+
|
57
61
|
describe "first_day" do
|
58
62
|
before { @date = Date.new 2012, 2, 23 }
|
59
63
|
|
@@ -136,4 +140,24 @@ describe Cal::MonthlyCalendar do
|
|
136
140
|
end
|
137
141
|
end
|
138
142
|
|
143
|
+
describe "day_names" do
|
144
|
+
it "defaults to sunday through saturday" do
|
145
|
+
subject.day_names.should == %w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday]
|
146
|
+
end
|
147
|
+
|
148
|
+
[
|
149
|
+
%w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday],
|
150
|
+
%w[Tuesday Wednesday Thursday Friday Saturday Sunday Monday],
|
151
|
+
%w[Wednesday Thursday Friday Saturday Sunday Monday Tuesday],
|
152
|
+
%w[Thursday Friday Saturday Sunday Monday Tuesday Wednesday],
|
153
|
+
%w[Friday Saturday Sunday Monday Tuesday Wednesday Thursday],
|
154
|
+
%w[Saturday Sunday Monday Tuesday Wednesday Thursday Friday]
|
155
|
+
].each do |day_names|
|
156
|
+
it "is #{day_names[0]} through #{day_names[6]} when the weekday is set to start on #{day_names[0]}" do
|
157
|
+
@options[:start_week_on] = day_names[0].downcase.to_sym
|
158
|
+
subject.day_names.should == day_names
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
139
163
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cal::Year do
|
4
|
+
|
5
|
+
subject { described_class.new @calendar }
|
6
|
+
|
7
|
+
before { @calendar = OpenStruct.new }
|
8
|
+
|
9
|
+
describe "==" do
|
10
|
+
it "is true with another year with the same calendar" do
|
11
|
+
(subject == described_class.new(@calendar)).should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
it "is false with another year with a different calendar" do
|
15
|
+
(subject == described_class.new(Object.new)).should be_false
|
16
|
+
end
|
17
|
+
|
18
|
+
it "is false with a non year" do
|
19
|
+
(subject == Object.new).should be_false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "calendar" do
|
24
|
+
it "is the given calendar" do
|
25
|
+
subject.calendar.should == @calendar
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "to_s" do
|
30
|
+
before { @calendar.date = Date.new 1983 }
|
31
|
+
it { subject.to_s.should == '1983' }
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -62,9 +62,11 @@ files:
|
|
62
62
|
- lib/cal/month.rb
|
63
63
|
- lib/cal/monthly_calendar.rb
|
64
64
|
- lib/cal/version.rb
|
65
|
+
- lib/cal/year.rb
|
65
66
|
- spec/cal/day_spec.rb
|
66
67
|
- spec/cal/month_spec.rb
|
67
68
|
- spec/cal/monthly_calendar_spec.rb
|
69
|
+
- spec/cal/year_spec.rb
|
68
70
|
- spec/spec_helper.rb
|
69
71
|
homepage: ''
|
70
72
|
licenses: []
|
@@ -94,4 +96,5 @@ test_files:
|
|
94
96
|
- spec/cal/day_spec.rb
|
95
97
|
- spec/cal/month_spec.rb
|
96
98
|
- spec/cal/monthly_calendar_spec.rb
|
99
|
+
- spec/cal/year_spec.rb
|
97
100
|
- spec/spec_helper.rb
|