cal 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 448f52e733440c6f89a21075c476e96848eb7dfb
4
+ data.tar.gz: 3e02e40c42d4f3444c7792f5d0476b5bdf9fecd2
5
+ SHA512:
6
+ metadata.gz: 4ed601f9a089ae1809ea588166b71fee311a8bb27e63c2845420cc2beb1fafdf3798111ab72051feaf5d03372532c7e117014f71580a094c72f7b499a418f30b
7
+ data.tar.gz: f6b66ca1dec81bc922dcac0b6527b0b48bba101e3c6a245873c1e8d1836a14024613fb6b90328673444af3eaf9ff7d41dbd7e050411fa4740745292930f5ee1a
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .rspec
6
+ .ruby-version
6
7
  .yardoc
7
8
  Gemfile.lock
8
9
  InstalledFiles
data/cal.gemspec CHANGED
@@ -17,5 +17,5 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "activesupport", ">= 2"
19
19
 
20
- gem.add_development_dependency "rspec", "~> 2.10.0"
20
+ gem.add_development_dependency "rspec", "~> 2.11.0"
21
21
  end
data/lib/cal.rb CHANGED
@@ -1,17 +1,7 @@
1
- require "cal/version"
2
- require 'active_support/time'
1
+ require 'cal/monthly_calendar'
3
2
 
4
3
  module Cal
5
-
6
- autoload :MonthlyCalendar, 'cal/monthly_calendar'
7
- autoload :Day, 'cal/day'
8
- autoload :Month, 'cal/month'
9
- autoload :DayName, 'cal/day_name'
10
-
11
- class << self
12
- def new_monthly_calendar(*args)
13
- MonthlyCalendar.new *args
14
- end
4
+ def self.new_monthly_calendar(*args)
5
+ MonthlyCalendar.new *args
15
6
  end
16
-
17
- end
7
+ end
data/lib/cal/day.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'active_support/core_ext/module/delegation'
2
+ require 'active_support/time'
2
3
 
3
4
  module Cal
4
5
  class Day
5
-
6
6
  include Comparable
7
7
 
8
8
  def initialize(date, calendar)
@@ -29,6 +29,5 @@ module Cal
29
29
  def number
30
30
  date.day
31
31
  end
32
-
33
32
  end
34
33
  end
data/lib/cal/day_name.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Cal
2
2
  class DayName
3
-
4
3
  class << self
5
4
  def all(options = {})
6
5
  if options[:start_on]
@@ -38,7 +37,7 @@ module Cal
38
37
  @saturday ||= new :saturday, 'Saturday', 7
39
38
  end
40
39
 
41
- private
40
+ private
42
41
 
43
42
  def sunday_to_saturday
44
43
  @sunday_to_saturday ||= [sunday, monday, tuesday, wednesday, thursday, friday, saturday]
@@ -68,6 +67,5 @@ module Cal
68
67
  day_name.position == (position > 1 ? position - 1 : 7)
69
68
  end
70
69
  end
71
-
72
70
  end
73
71
  end
data/lib/cal/month.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Cal
2
2
  class Month
3
-
4
3
  include Comparable
5
4
 
6
5
  def initialize(year, number)
@@ -32,11 +31,10 @@ module Cal
32
31
  self
33
32
  end
34
33
 
35
- private
34
+ private
36
35
 
37
36
  def date
38
37
  @date ||= Date.new year, number
39
38
  end
40
-
41
39
  end
42
40
  end
@@ -1,28 +1,14 @@
1
1
  require 'active_support/core_ext/array/grouping'
2
2
  require 'active_support/core_ext/string/conversions'
3
+ require 'active_support/time'
4
+ require 'cal/day'
5
+ require 'cal/day_name'
6
+ require 'cal/month'
3
7
 
4
8
  module Cal
5
9
  class MonthlyCalendar
6
-
7
10
  include Comparable
8
11
 
9
- class << self
10
- def from_month(month, options = {})
11
- month = month.to_month
12
- new month.year, month.number, options
13
- end
14
-
15
- def from_param(param, options = {})
16
- year, month_number = if param.present?
17
- param.split '-'
18
- else
19
- now = Date.current
20
- [now.year, now.month]
21
- end
22
- new year, month_number, options
23
- end
24
- end
25
-
26
12
  def initialize(year, month_number, options = {})
27
13
  @start_week_on = options[:start_week_on] || :sunday
28
14
  @month = Month.new year, month_number
@@ -33,7 +19,7 @@ module Cal
33
19
  delegate :year, :to => :month
34
20
 
35
21
  def <=>(other)
36
- if other.is_a?(MonthlyCalendar) && start_week_on == other.send(:start_week_on)
22
+ if other.is_a?(self.class) && start_week_on == other.send(:start_week_on)
37
23
  month <=> other.month
38
24
  end
39
25
  end
@@ -61,11 +47,13 @@ module Cal
61
47
  end
62
48
 
63
49
  def previous
64
- self.class.from_month month.previous, :start_week_on => start_week_on
50
+ previous_month = month.previous
51
+ self.class.new previous_month.year, previous_month.number, :start_week_on => start_week_on
65
52
  end
66
53
 
67
54
  def next
68
- self.class.from_month month.succ, :start_week_on => start_week_on
55
+ next_month = month.succ
56
+ self.class.new next_month.year, next_month.number, :start_week_on => start_week_on
69
57
  end
70
58
 
71
59
  def day_names
@@ -76,9 +64,8 @@ module Cal
76
64
  "#{year}-#{month.to_i}"
77
65
  end
78
66
 
79
- private
67
+ private
80
68
 
81
69
  attr_reader :start_week_on
82
-
83
70
  end
84
71
  end
data/lib/cal/version.rb CHANGED
@@ -1,5 +1,3 @@
1
1
  module Cal
2
-
3
- VERSION = "0.6.1"
4
-
5
- end
2
+ VERSION = "0.6.2"
3
+ end
@@ -1,134 +1,125 @@
1
1
  require 'spec_helper'
2
+ require 'cal/day_name'
2
3
 
3
4
  describe Cal::DayName do
5
+ describe ".all" do
6
+ it "returns all the days, starting with sunday" do
7
+ Cal::DayName.all.should == [
8
+ Cal::DayName.sunday,
9
+ Cal::DayName.monday,
10
+ Cal::DayName.tuesday,
11
+ Cal::DayName.wednesday,
12
+ Cal::DayName.thursday,
13
+ Cal::DayName.friday,
14
+ Cal::DayName.saturday
15
+ ]
16
+ end
4
17
 
5
- describe "class method" do
6
- subject { described_class }
7
-
8
- describe "all" do
9
- it "returns all the days, starting with sunday" do
10
- subject.all.should == [
11
- subject.sunday,
12
- subject.monday,
13
- subject.tuesday,
14
- subject.wednesday,
15
- subject.thursday,
16
- subject.friday,
17
- subject.saturday
18
- ]
19
- end
18
+ it "when given a day name symbol as the :start_on option, it starts the week on that day" do
19
+ Cal::DayName.all(:start_on => :tuesday).should == [
20
+ Cal::DayName.tuesday,
21
+ Cal::DayName.wednesday,
22
+ Cal::DayName.thursday,
23
+ Cal::DayName.friday,
24
+ Cal::DayName.saturday,
25
+ Cal::DayName.sunday,
26
+ Cal::DayName.monday
27
+ ]
28
+ end
20
29
 
21
- it "when given a day name symbol as the :start_on option, it starts the week on that day" do
22
- subject.all(:start_on => :tuesday).should == [
23
- subject.tuesday,
24
- subject.wednesday,
25
- subject.thursday,
26
- subject.friday,
27
- subject.saturday,
28
- subject.sunday,
29
- subject.monday
30
+ it "accepts the :start_on option in various formats" do
31
+ [:tuesday, 'Tuesday', 'tuesday'].each do |start_on|
32
+ Cal::DayName.all(:start_on => start_on).should == [
33
+ Cal::DayName.tuesday,
34
+ Cal::DayName.wednesday,
35
+ Cal::DayName.thursday,
36
+ Cal::DayName.friday,
37
+ Cal::DayName.saturday,
38
+ Cal::DayName.sunday,
39
+ Cal::DayName.monday
30
40
  ]
31
41
  end
32
-
33
- it "accepts the :start_on option in various formats" do
34
- [:tuesday, 'Tuesday', 'tuesday'].each do |start_on|
35
- subject.all(:start_on => start_on).should == [
36
- subject.tuesday,
37
- subject.wednesday,
38
- subject.thursday,
39
- subject.friday,
40
- subject.saturday,
41
- subject.sunday,
42
- subject.monday
43
- ]
44
- end
45
- end
46
-
47
- it "without the :start_on option, it returns the same object" do
48
- subject.all.equal?(subject.all).should be_true
49
- end
50
42
  end
51
43
 
52
- it "doesn't allow direct initialization" do
53
- expect { subject.new }.to raise_error NoMethodError
44
+ it "without the :start_on option, it returns the same object" do
45
+ Cal::DayName.all.equal?(Cal::DayName.all).should be_true
54
46
  end
55
47
  end
56
48
 
57
- describe "instance method" do
58
- [
59
- [:sunday, 'Sunday', 1],
60
- [:monday, 'Monday', 2],
61
- [:tuesday, 'Tuesday', 3],
62
- [:wednesday, 'Wednesday', 4],
63
- [:thursday, 'Thursday', 5],
64
- [:friday, 'Friday', 6],
65
- [:saturday, 'Saturday', 7]
66
- ].each do |day, string, position|
67
- context "when the day is #{day}" do
68
- subject { described_class.send day }
49
+ it "doesn't allow direct initialization" do
50
+ expect { Cal::DayName.new }.to raise_error NoMethodError
51
+ end
69
52
 
70
- it "is the same instance as another #{day}" do
71
- subject.equal?(described_class.send(day)).should be_true
72
- end
53
+ [
54
+ [:sunday, 'Sunday', 1],
55
+ [:monday, 'Monday', 2],
56
+ [:tuesday, 'Tuesday', 3],
57
+ [:wednesday, 'Wednesday', 4],
58
+ [:thursday, 'Thursday', 5],
59
+ [:friday, 'Friday', 6],
60
+ [:saturday, 'Saturday', 7]
61
+ ].each do |day, string, position|
62
+ context "when the day is #{day}" do
63
+ it "is the same instance as another #{day}" do
64
+ Cal::DayName.send(day).equal?(Cal::DayName.send(day)).should be_true
65
+ end
73
66
 
74
- describe "to_sym" do
75
- it "is #{day.inspect}" do
76
- subject.to_sym.should == day
77
- end
67
+ describe "to_sym" do
68
+ it "is #{day.inspect}" do
69
+ Cal::DayName.send(day).to_sym.should == day
78
70
  end
71
+ end
79
72
 
80
- describe "to_s" do
81
- it "is #{string.inspect}" do
82
- subject.to_s.should == string
83
- end
73
+ describe "to_s" do
74
+ it "is #{string.inspect}" do
75
+ Cal::DayName.send(day).to_s.should == string
84
76
  end
77
+ end
85
78
 
86
- describe "position" do
87
- it "is #{position.inspect}" do
88
- subject.position.should == position
89
- end
79
+ describe "position" do
80
+ it "is #{position.inspect}" do
81
+ Cal::DayName.send(day).position.should == position
90
82
  end
91
83
  end
92
84
  end
85
+ end
93
86
 
94
- describe "succ" do
95
- [
96
- [:sunday, :monday],
97
- [:monday, :tuesday],
98
- [:tuesday, :wednesday],
99
- [:wednesday, :thursday],
100
- [:thursday, :friday],
101
- [:friday, :saturday],
102
- [:saturday, :sunday]
103
- ].each do |day, next_day|
104
- it "is #{next_day} when the say is #{day}" do
105
- described_class.send(day).succ.should == described_class.send(next_day)
106
- end
87
+ describe "#succ" do
88
+ [
89
+ [:sunday, :monday],
90
+ [:monday, :tuesday],
91
+ [:tuesday, :wednesday],
92
+ [:wednesday, :thursday],
93
+ [:thursday, :friday],
94
+ [:friday, :saturday],
95
+ [:saturday, :sunday]
96
+ ].each do |day, next_day|
97
+ it "is #{next_day} when the say is #{day}" do
98
+ Cal::DayName.send(day).succ.should == Cal::DayName.send(next_day)
107
99
  end
108
100
  end
101
+ end
109
102
 
110
- describe "next" do
111
- it "is an alias of #succ" do
112
- day_name = described_class.friday
113
- day_name.next.should == day_name.succ
114
- end
103
+ describe "#next" do
104
+ it "is an alias of #succ" do
105
+ day_name = Cal::DayName.friday
106
+ day_name.next.should == day_name.succ
115
107
  end
108
+ end
116
109
 
117
- describe "previous" do
118
- [
119
- [:sunday, :saturday],
120
- [:monday, :sunday],
121
- [:tuesday, :monday],
122
- [:wednesday, :tuesday],
123
- [:thursday, :wednesday],
124
- [:friday, :thursday],
125
- [:saturday, :friday]
126
- ].each do |day, previous_day|
127
- it "is #{previous_day} when the say is #{day}" do
128
- described_class.send(day).previous.should == described_class.send(previous_day)
129
- end
110
+ describe "#previous" do
111
+ [
112
+ [:sunday, :saturday],
113
+ [:monday, :sunday],
114
+ [:tuesday, :monday],
115
+ [:wednesday, :tuesday],
116
+ [:thursday, :wednesday],
117
+ [:friday, :thursday],
118
+ [:saturday, :friday]
119
+ ].each do |day, previous_day|
120
+ it "is #{previous_day} when the say is #{day}" do
121
+ Cal::DayName.send(day).previous.should == Cal::DayName.send(previous_day)
130
122
  end
131
123
  end
132
124
  end
133
-
134
125
  end
data/spec/cal/day_spec.rb CHANGED
@@ -1,63 +1,60 @@
1
1
  require 'spec_helper'
2
+ require 'cal/day'
2
3
 
3
4
  describe Cal::Day do
4
-
5
- subject { described_class.new @date, @calendar }
6
-
7
5
  before do
8
6
  @date = Date.new 2012, 1, 15
9
7
  @calendar = OpenStruct.new :current_day => Date.new(2012, 1, 5)
10
8
  end
11
9
 
12
- it { should be_a(Comparable) }
10
+ it { Cal::Day.new(@date, @calendar).should be_a(Comparable) }
13
11
 
14
- describe "==" do
12
+ describe "#==" do
15
13
  it "is true with another day with the same calendar and date" do
16
- subject.should == described_class.new(@date, @calendar)
14
+ Cal::Day.new(@date, @calendar).should == Cal::Day.new(@date, @calendar)
17
15
  end
18
16
 
19
17
  it "is false with another day with a different calendar" do
20
- subject.should_not == described_class.new(@date, Object.new)
18
+ Cal::Day.new(@date, @calendar).should_not == Cal::Day.new(@date, Object.new)
21
19
  end
22
20
 
23
21
  it "is false with another day with a different date" do
24
- subject.should_not == described_class.new(Date.new(2012, 1, 14), @calendar)
22
+ Cal::Day.new(@date, @calendar).should_not == Cal::Day.new(Date.new(2012, 1, 14), @calendar)
25
23
  end
26
24
 
27
25
  it "is false with a non Cal::Day" do
28
- subject.should_not == Object.new
26
+ Cal::Day.new(@date, @calendar).should_not == Object.new
29
27
  end
30
28
  end
31
29
 
32
- describe "today?" do
30
+ describe "#today?" do
33
31
  it "is true when the date is today" do
34
32
  @date = Date.current
35
- subject.should be_today
33
+ Cal::Day.new(@date, @calendar).should be_today
36
34
  end
37
35
  end
38
36
 
39
- describe "number" do
37
+ describe "#number" do
40
38
  [3, 15].each do |n|
41
39
  it "is the day of the month" do
42
40
  @date = Date.new 2012, 1, n
43
- subject.number.should == n
41
+ Cal::Day.new(@date, @calendar).number.should == n
44
42
  end
45
43
  end
46
44
  end
47
45
 
48
- describe "<=>" do
46
+ describe "#<=>" do
49
47
  it "is the result of comparing the dates" do
50
48
  other_date = Date.new 2012, 2, 15
51
49
  result = Object.new
52
- subject.date.stub(:<=>) { |obj| result if obj == other_date }
53
- (subject <=> described_class.new(other_date, Object.new)).should == result
50
+ Cal::Day.new(@date, @calendar).date.stub(:<=>) { |obj| result if obj == other_date }
51
+ (Cal::Day.new(@date, @calendar) <=> Cal::Day.new(other_date, Object.new)).should == result
54
52
  end
55
53
  end
56
54
 
57
- describe "succ" do
55
+ describe "#succ" do
58
56
  it "is the next day" do
59
- subject.succ.should == described_class.new(Date.new(2012, 1, 16), @calendar)
57
+ Cal::Day.new(@date, @calendar).succ.should == Cal::Day.new(Date.new(2012, 1, 16), @calendar)
60
58
  end
61
59
  end
62
-
63
60
  end
@@ -1,28 +1,26 @@
1
1
  require 'spec_helper'
2
+ require 'cal/month'
2
3
 
3
4
  describe Cal::Month do
4
-
5
- subject { described_class.new @year, @month_number }
6
-
7
5
  before do
8
6
  @year = 2012
9
7
  @month_number = 3
10
8
  end
11
9
 
12
- describe "initialize" do
10
+ describe ".new" do
13
11
  it "coerces the year and month number to integers" do
14
12
  @year = "2012"
15
13
  @month_number = "04"
16
- subject.year.should == 2012
17
- subject.number.should == 4
14
+ Cal::Month.new(@year, @month_number).year.should == 2012
15
+ Cal::Month.new(@year, @month_number).number.should == 4
18
16
  end
19
17
  end
20
18
 
21
- it { should be_a(Comparable) }
19
+ it { Cal::Month.new(@year, @month_number).should be_a(Comparable) }
22
20
 
23
- describe "<=>" do
21
+ describe "#<=>" do
24
22
  it "is nil with a non month" do
25
- (subject <=> Object.new).should be_nil
23
+ (Cal::Month.new(@year, @month_number) <=> Object.new).should be_nil
26
24
  end
27
25
 
28
26
  context "given another month" do
@@ -30,93 +28,94 @@ describe Cal::Month do
30
28
 
31
29
  context "when the other's year is the same" do
32
30
  it "is 0 when the other's month is the same" do
33
- (subject <=> @other).should == 0
31
+ (Cal::Month.new(@year, @month_number) <=> @other).should == 0
34
32
  end
35
33
 
36
34
  it "is -1 when the other's month is higher" do
37
35
  @month_number = 2
38
- (subject <=> @other).should == -1
36
+ (Cal::Month.new(@year, @month_number) <=> @other).should == -1
39
37
  end
40
38
 
41
39
  it "is 1 when the other's month is lower" do
42
40
  @month_number = 4
43
- (subject <=> @other).should == 1
41
+ (Cal::Month.new(@year, @month_number) <=> @other).should == 1
44
42
  end
45
43
  end
46
44
 
47
45
  it "is -1 when the other's year is higher" do
48
46
  @year = 2011
49
- (subject <=> @other).should == -1
47
+ (Cal::Month.new(@year, @month_number) <=> @other).should == -1
50
48
  end
51
49
 
52
50
  it "is 1 when the other's year is lower" do
53
51
  @year = 2013
54
- (subject <=> @other).should == 1
52
+ (Cal::Month.new(@year, @month_number) <=> @other).should == 1
55
53
  end
56
54
  end
57
55
  end
58
56
 
59
- describe "==" do
57
+ describe "#==" do
60
58
  it "is false with a non month" do
61
- (subject == Object.new).should be_false
59
+ (Cal::Month.new(@year, @month_number) == Object.new).should be_false
62
60
  end
63
61
 
64
62
  context "given another month" do
65
63
  before { @month = described_class.new @year, @month_number }
66
64
 
67
65
  it "is true if the comparison is zero" do
68
- subject.stub(:<=>) { 0 }
69
- (subject == @month).should be_true
66
+ month = Cal::Month.new(@year, @month_number)
67
+ month.stub(:<=>) { 0 }
68
+ (month == @month).should be_true
70
69
  end
71
70
 
72
71
  it "is false if the comparison is not zero" do
73
- subject.stub(:<=>) { -1 }
74
- (subject == @month).should be_false
72
+ month = Cal::Month.new(@year, @month_number)
73
+ month.stub(:<=>) { -1 }
74
+ (month == @month).should be_false
75
75
  end
76
76
  end
77
77
  end
78
78
 
79
- it { subject.number.should == @month_number }
79
+ it { Cal::Month.new(@year, @month_number).number.should == @month_number }
80
80
 
81
- describe "to_s" do
81
+ describe "#to_s" do
82
82
  it "is the result of formatting a date object" do
83
83
  date = Object.new
84
84
  format = Object.new
85
85
  result = Object.new
86
86
  Date.stub(:new) { |*args| date if args == [@year, @month_number] }
87
87
  date.stub(:strftime) { |f| result if f == format }
88
- subject.to_s(format).should == result
88
+ Cal::Month.new(@year, @month_number).to_s(format).should == result
89
89
  end
90
90
  end
91
91
 
92
- describe "year" do
92
+ describe "#year" do
93
93
  it "is the given year" do
94
- subject.year.should == 2012
94
+ Cal::Month.new(@year, @month_number).year.should == 2012
95
95
  end
96
96
  end
97
97
 
98
- describe "succ" do
98
+ describe "#succ" do
99
99
  [[2012, 12, 2013, 1], [2012, 1, 2012, 2]].each do |year, month_number, new_year, new_month_number|
100
100
  it "is the next month" do
101
101
  @year = year
102
102
  @month_number = month_number
103
- subject.succ.should == described_class.new(new_year, new_month_number)
103
+ Cal::Month.new(@year, @month_number).succ.should == described_class.new(new_year, new_month_number)
104
104
  end
105
105
  end
106
106
  end
107
107
 
108
- describe "previous" do
108
+ describe "#previous" do
109
109
  [[2012, 12, 2012, 11], [2012, 1, 2011, 12]].each do |year, month_number, new_year, new_month_number|
110
110
  it "is the previous month" do
111
111
  @year = year
112
112
  @month_number = month_number
113
- subject.previous.should == described_class.new(new_year, new_month_number)
113
+ Cal::Month.new(@year, @month_number).previous.should == described_class.new(new_year, new_month_number)
114
114
  end
115
115
  end
116
116
  end
117
117
 
118
- describe "to_month" do
119
- it { subject.to_month.should == subject }
118
+ describe "#to_month" do
119
+ it { Cal::Month.new(@year, @month_number).to_month.should == Cal::Month.new(@year, @month_number) }
120
120
  end
121
-
122
121
  end
@@ -1,209 +1,157 @@
1
1
  require 'spec_helper'
2
+ require 'cal/monthly_calendar'
2
3
 
3
4
  describe Cal::MonthlyCalendar do
5
+ it { Cal::MonthlyCalendar.new(2012, 2).should be_a(Comparable) }
4
6
 
5
- describe "class methods" do
6
- subject { described_class }
7
-
8
- describe "from_month" do
9
- it "returns a calendar for the month's year and month number" do
10
- subject.from_month(Cal::Month.new(2012, 11), :start_week_on => :tuesday).should == subject.new(2012, 11, :start_week_on => :tuesday)
11
- end
12
-
13
- it "raises an error without something that can be converted to a month" do
14
- [nil, Object.new].each do |object|
15
- expect { subject.from_month(object) }.to raise_error(NoMethodError)
16
- end
17
- end
18
- end
19
-
20
- describe "from_param" do
21
- it "is the calendar for the given param" do
22
- calendar = subject.new 2012, 5, :start_week_on => :tuesday
23
- subject.from_param(calendar.to_param, :start_week_on => :tuesday).should == calendar
24
- end
25
-
26
- context "with a blank param" do
27
- it "returns a calendar for the current year and month" do
28
- [' ', nil].each do |param|
29
- date = Date.current
30
- subject.from_param(param).should == subject.new(date.year, date.month)
31
- end
32
- end
33
- end
7
+ describe ".new" do
8
+ it "coerces the year and month number to integers" do
9
+ Cal::MonthlyCalendar.new('2012', '04').should == Cal::MonthlyCalendar.new(2012, 4)
34
10
  end
35
11
  end
36
12
 
37
- describe "instance methods" do
38
- subject { described_class.new @year, @month, @options }
39
-
40
- before do
41
- @year = 2012
42
- @month = 2
43
- @options = {}
13
+ describe "#<=>" do
14
+ it "is nil with a non monthly calendar" do
15
+ (Cal::MonthlyCalendar.new(2012, 2) <=> Object.new).should be_nil
44
16
  end
45
17
 
46
- it { should be_a(Comparable) }
47
-
48
- describe "initialize" do
49
- it "coerces the year and month number to integers" do
50
- @year = "2012"
51
- @month = "04"
52
- subject.should == described_class.new(2012, 4)
53
- end
54
- end
18
+ context "given another monthly calendar" do
19
+ before { @other = Cal::MonthlyCalendar.new 2012, 2 }
55
20
 
56
- describe "<=>" do
57
- it "is nil with a non monthly calendar" do
58
- (subject <=> Object.new).should be_nil
21
+ it "is nil when the other's start day is different" do
22
+ (Cal::MonthlyCalendar.new(2012, 2, :start_week_on => :monday) <=> @other).should be_nil
59
23
  end
60
24
 
61
- it "is nil with a non monthly calendar" do
62
- (subject <=> Object.new).should be_nil
25
+ it "is the result of comparing the months when the other's start day is the same" do
26
+ result = Object.new
27
+ calendar = Cal::MonthlyCalendar.new(2012, 2)
28
+ calendar.month.stub(:<=>).with(@other.month) { result }
29
+ (calendar <=> @other).should == result
63
30
  end
31
+ end
32
+ end
64
33
 
65
- context "given another monthly calendar" do
66
- before { @other = described_class.new @year, @month, @options }
34
+ describe "#month" do
35
+ it { Cal::MonthlyCalendar.new(2012, 2).month.should == Cal::Month.new(2012, 2) }
36
+ end
67
37
 
68
- it "is nil when the other's start day is different" do
69
- @options[:start_week_on] = :tuesday
70
- (subject <=> @other).should be_nil
71
- end
38
+ describe "#year" do
39
+ it { Cal::MonthlyCalendar.new(2012, 2).year.should == 2012 }
40
+ end
72
41
 
73
- it "is the result of comparing the months when the other's start day is the same" do
74
- result = Object.new
75
- subject.month.stub(:<=>) { |m| result if m == @other.month }
76
- (subject <=> @other).should == result
42
+ describe "#first_day" do
43
+ [
44
+ [:monday, [1, 30]],
45
+ [:tuesday, [1, 31]],
46
+ [:wednesday, [2, 1]],
47
+ [:thursday, [1, 26]],
48
+ [:friday, [1, 27]],
49
+ [:saturday, [1, 28]]
50
+ ].each do |weekday, month_day|
51
+ context "when the weekday is set to start on #{weekday}" do
52
+ it "is the first viewable day on the calendar" do
53
+ calendar = Cal::MonthlyCalendar.new(2012, 2, :start_week_on => weekday)
54
+ calendar.first_day.should == Cal::Day.new(Date.new(2012, *month_day), calendar)
77
55
  end
78
56
  end
79
57
  end
80
58
 
81
- describe "month" do
82
- it { subject.month.should == Cal::Month.new(@year, @month) }
83
- end
84
-
85
- describe "year" do
86
- it { subject.year.should == @year }
59
+ it "is the first viewable day on the calendar, using sunday as the default start day" do
60
+ calendar = Cal::MonthlyCalendar.new(2012, 2)
61
+ calendar.first_day.should == Cal::Day.new(Date.new(2012, 1, 29), calendar)
87
62
  end
63
+ end
88
64
 
89
- describe "first_day" do
90
- before { @year, @month = 2012, 2 }
91
-
92
- [
93
- [:monday, [1, 30]],
94
- [:tuesday, [1, 31]],
95
- [:wednesday, [2, 1]],
96
- [:thursday, [1, 26]],
97
- [:friday, [1, 27]],
98
- [:saturday, [1, 28]]
99
- ].each do |weekday, month_day|
100
- context "when the weekday is set to start on #{weekday}" do
101
- before { @options[:start_week_on] = weekday }
102
- it "is the first viewable day on the calendar" do
103
- subject.first_day.should == Cal::Day.new(Date.new(2012, *month_day), subject)
104
- end
65
+ describe "#last_day" do
66
+ [
67
+ [:monday, [3, 4]],
68
+ [:tuesday, [3, 5]],
69
+ [:wednesday, [3, 6]],
70
+ [:thursday, [2, 29]],
71
+ [:friday, [3, 1]],
72
+ [:saturday, [3, 2]]
73
+ ].each do |weekday, month_day|
74
+ context "when the weekday is set to start on #{weekday}" do
75
+ it "is the last viewable day on the calendar" do
76
+ calendar = Cal::MonthlyCalendar.new(2012, 2, :start_week_on => weekday)
77
+ calendar.last_day.should == Cal::Day.new(Date.new(2012, *month_day), calendar)
105
78
  end
106
79
  end
107
-
108
- it "is the first viewable day on the calendar, using sunday as the default start day" do
109
- subject.first_day.should == Cal::Day.new(Date.new(2012, 1, 29), subject)
110
- end
111
80
  end
112
81
 
113
- describe "last_day" do
114
- before { @year, @month = 2012, 2 }
115
-
116
- [
117
- [:monday, [3, 4]],
118
- [:tuesday, [3, 5]],
119
- [:wednesday, [3, 6]],
120
- [:thursday, [2, 29]],
121
- [:friday, [3, 1]],
122
- [:saturday, [3, 2]]
123
- ].each do |weekday, month_day|
124
- context "when the weekday is set to start on #{weekday}" do
125
- before { @options[:start_week_on] = weekday }
126
- it "is the last viewable day on the calendar" do
127
- subject.last_day.should == Cal::Day.new(Date.new(2012, *month_day), subject)
128
- end
129
- end
130
- end
131
-
132
- it "is the last viewable day on the calendar, using sunday as the default start day" do
133
- subject.last_day.should == Cal::Day.new(Date.new(2012, 3, 3), subject)
134
- end
82
+ it "is the last viewable day on the calendar, using sunday as the default start day" do
83
+ calendar = Cal::MonthlyCalendar.new(2012, 2)
84
+ calendar.last_day.should == Cal::Day.new(Date.new(2012, 3, 3), calendar)
135
85
  end
86
+ end
136
87
 
137
- describe "days" do
138
- it "is a range of the first day to the last day" do
139
- @year, @month = 2012, 2
140
- first_day = Cal::Day.new Date.new(2012, 1, 29), subject
141
- last_day = Cal::Day.new Date.new(2012, 3, 3), subject
142
- subject.days.should == (first_day..last_day)
143
- end
88
+ describe "#days" do
89
+ it "is a range of the first day to the last day" do
90
+ calendar = Cal::MonthlyCalendar.new(2012, 2)
91
+ first_day = Cal::Day.new Date.new(2012, 1, 29), calendar
92
+ last_day = Cal::Day.new Date.new(2012, 3, 3), calendar
93
+ calendar.days.should == (first_day..last_day)
144
94
  end
95
+ end
145
96
 
146
- describe "weeks" do
147
- it "an array of the days in groups of 7" do
148
- @year, @month = 2012, 2
149
- subject.weeks.should == [
150
- %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 },
151
- %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 },
152
- %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 },
153
- %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 },
154
- %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 }
155
- ]
156
- end
97
+ describe "#weeks" do
98
+ it "an array of the days in groups of 7" do
99
+ calendar = Cal::MonthlyCalendar.new(2012, 2)
100
+ calendar.weeks.should == [
101
+ %w[01-29 01-30 01-31 02-01 02-02 02-03 02-04].map { |s| Cal::Day.new Date.parse("2012-#{s}"), calendar },
102
+ %w[02-05 02-06 02-07 02-08 02-09 02-10 02-11].map { |s| Cal::Day.new Date.parse("2012-#{s}"), calendar },
103
+ %w[02-12 02-13 02-14 02-15 02-16 02-17 02-18].map { |s| Cal::Day.new Date.parse("2012-#{s}"), calendar },
104
+ %w[02-19 02-20 02-21 02-22 02-23 02-24 02-25].map { |s| Cal::Day.new Date.parse("2012-#{s}"), calendar },
105
+ %w[02-26 02-27 02-28 02-29 03-01 03-02 03-03].map { |s| Cal::Day.new Date.parse("2012-#{s}"), calendar }
106
+ ]
157
107
  end
108
+ end
158
109
 
159
- describe "previous" do
160
- it "returns the calendar for the previous month" do
161
- @options[:start_week_on] = :wednesday
162
- subject.previous.should == described_class.new(@year, (@month - 1), @options)
163
- end
110
+ describe "#previous" do
111
+ it "returns the calendar for the previous month" do
112
+ calendar = Cal::MonthlyCalendar.new(2012, 12, :start_week_on => :wednesday)
113
+ calendar.previous.should == Cal::MonthlyCalendar.new(2012, 11, :start_week_on => :wednesday)
164
114
  end
115
+ end
165
116
 
166
- describe "next" do
167
- it "returns the calendar for the next month" do
168
- @options[:start_week_on] = :wednesday
169
- subject.next.should == described_class.new(@year, (@month + 1), @options)
170
- end
117
+ describe "#next" do
118
+ it "returns the calendar for the next month" do
119
+ calendar = Cal::MonthlyCalendar.new(2012, 12, :start_week_on => :wednesday)
120
+ calendar.next.should == Cal::MonthlyCalendar.new(2013, 1, :start_week_on => :wednesday)
171
121
  end
122
+ end
172
123
 
173
- describe "day_names" do
174
- it "defaults to sunday through saturday" do
175
- subject.day_names.should == [
176
- Cal::DayName.sunday,
177
- Cal::DayName.monday,
178
- Cal::DayName.tuesday,
179
- Cal::DayName.wednesday,
180
- Cal::DayName.thursday,
181
- Cal::DayName.friday,
182
- Cal::DayName.saturday
183
- ]
184
- end
185
-
186
- [
187
- [:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday],
188
- [:tuesday, :wednesday, :thursday, :friday, :saturday, :sunday, :monday],
189
- [:wednesday, :thursday, :friday, :saturday, :sunday, :monday, :tuesday],
190
- [:thursday, :friday, :saturday, :sunday, :monday, :tuesday, :wednesday],
191
- [:friday, :saturday, :sunday, :monday, :tuesday, :wednesday, :thursday],
192
- [:saturday, :sunday, :monday, :tuesday, :wednesday, :thursday, :friday]
193
- ].each do |day_names|
194
- it "is #{day_names[0]} through #{day_names[6]} when the weekday is set to start on #{day_names[0]}" do
195
- @options[:start_week_on] = day_names[0]
196
- subject.day_names.should == day_names.map { |dn| Cal::DayName.send dn }
197
- end
198
- end
124
+ describe "#day_names" do
125
+ it "defaults to sunday through saturday" do
126
+ Cal::MonthlyCalendar.new(2012, 12).day_names.should == [
127
+ Cal::DayName.sunday,
128
+ Cal::DayName.monday,
129
+ Cal::DayName.tuesday,
130
+ Cal::DayName.wednesday,
131
+ Cal::DayName.thursday,
132
+ Cal::DayName.friday,
133
+ Cal::DayName.saturday,
134
+ ]
199
135
  end
200
136
 
201
- describe "to_param" do
202
- it "is the year and month string" do
203
- @year, @month = 2012, 12
204
- subject.to_param.should == "2012-12"
137
+ [
138
+ %i[monday tuesday wednesday thursday friday saturday sunday],
139
+ %i[tuesday wednesday thursday friday saturday sunday monday],
140
+ %i[wednesday thursday friday saturday sunday monday tuesday],
141
+ %i[thursday friday saturday sunday monday tuesday wednesday],
142
+ %i[friday saturday sunday monday tuesday wednesday thursday],
143
+ %i[saturday sunday monday tuesday wednesday thursday friday],
144
+ ].each do |day_names|
145
+ it "is #{day_names[0]} through #{day_names[6]} when the weekday is set to start on #{day_names[0]}" do
146
+ calendar = Cal::MonthlyCalendar.new(2012, 12, :start_week_on => day_names[0])
147
+ calendar.day_names.should == day_names.map { |dn| Cal::DayName.send dn }
205
148
  end
206
149
  end
207
150
  end
208
151
 
152
+ describe "#to_param" do
153
+ it "is the year and month string" do
154
+ Cal::MonthlyCalendar.new(2012, 12).to_param.should == "2012-12"
155
+ end
156
+ end
209
157
  end
data/spec/cal_spec.rb CHANGED
@@ -1,17 +1,12 @@
1
1
  require 'spec_helper'
2
+ require 'cal'
2
3
 
3
4
  describe Cal do
4
- subject { described_class }
5
-
6
- describe "new_monthly_calendar" do
7
- it "creates a new monthly calendar with the given args" do
8
- @args = [1, 2, 3]
5
+ describe ".new_monthly_calendar" do
6
+ it "is delegated to MonthlyCalendar.new" do
9
7
  monthly_calendar = Object.new
10
- Cal::MonthlyCalendar.stub :new do |*args|
11
- monthly_calendar if args == @args
12
- end
13
- subject.new_monthly_calendar(*@args).should == monthly_calendar
8
+ Cal::MonthlyCalendar.stub(:new).with(1, 2, 3) { monthly_calendar }
9
+ Cal.new_monthly_calendar(1, 2, 3).should == monthly_calendar
14
10
  end
15
11
  end
16
-
17
12
  end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1 @@
1
- require 'cal'
2
1
  require 'ostruct'
metadata CHANGED
@@ -1,48 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
5
- prerelease:
4
+ version: 0.6.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Austin Schneider
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-06-26 00:00:00.000000000 Z
11
+ date: 2013-05-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '2'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: 2.10.0
33
+ version: 2.11.0
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: 2.10.0
40
+ version: 2.11.0
46
41
  description: A low level calendar engine.
47
42
  email:
48
43
  - austinthecoder@gmail.com
@@ -71,27 +66,26 @@ files:
71
66
  - spec/spec_helper.rb
72
67
  homepage: https://github.com/austinthecoder/cal
73
68
  licenses: []
69
+ metadata: {}
74
70
  post_install_message:
75
71
  rdoc_options: []
76
72
  require_paths:
77
73
  - lib
78
74
  required_ruby_version: !ruby/object:Gem::Requirement
79
- none: false
80
75
  requirements:
81
- - - ! '>='
76
+ - - '>='
82
77
  - !ruby/object:Gem::Version
83
78
  version: '0'
84
79
  required_rubygems_version: !ruby/object:Gem::Requirement
85
- none: false
86
80
  requirements:
87
- - - ! '>='
81
+ - - '>='
88
82
  - !ruby/object:Gem::Version
89
83
  version: '0'
90
84
  requirements: []
91
85
  rubyforge_project:
92
- rubygems_version: 1.8.21
86
+ rubygems_version: 2.0.3
93
87
  signing_key:
94
- specification_version: 3
88
+ specification_version: 4
95
89
  summary: A low level calendar engine.
96
90
  test_files:
97
91
  - spec/cal/day_name_spec.rb