timely 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +14 -0
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile +1 -12
  7. data/README.md +5 -0
  8. data/Rakefile +1 -139
  9. data/gemfiles/rails3.gemfile +8 -0
  10. data/gemfiles/rails4.gemfile +9 -0
  11. data/lib/timely.rb +7 -3
  12. data/lib/timely/date.rb +20 -0
  13. data/lib/timely/date_chooser.rb +10 -5
  14. data/lib/timely/date_range.rb +47 -10
  15. data/lib/timely/rails.rb +10 -3
  16. data/lib/timely/rails/calendar_tag.rb +52 -0
  17. data/lib/timely/rails/date.rb +5 -0
  18. data/lib/timely/rails/date_group.rb +68 -99
  19. data/lib/timely/rails/date_range_validity_module.rb +27 -0
  20. data/lib/timely/rails/date_time.rb +20 -0
  21. data/lib/timely/rails/extensions.rb +23 -11
  22. data/lib/timely/rails/period.rb +31 -0
  23. data/lib/timely/rails/season.rb +65 -75
  24. data/lib/timely/railtie.rb +7 -0
  25. data/lib/timely/temporal_patterns/finder.rb +152 -0
  26. data/lib/timely/temporal_patterns/frequency.rb +108 -0
  27. data/lib/timely/temporal_patterns/interval.rb +67 -0
  28. data/lib/timely/temporal_patterns/pattern.rb +160 -0
  29. data/lib/timely/time_since.rb +17 -0
  30. data/lib/timely/version.rb +3 -0
  31. data/spec/calendar_tag_spec.rb +29 -0
  32. data/spec/date_chooser_spec.rb +36 -27
  33. data/spec/date_group_spec.rb +9 -9
  34. data/spec/date_range_spec.rb +58 -20
  35. data/spec/date_spec.rb +20 -12
  36. data/spec/extensions_spec.rb +32 -0
  37. data/spec/rails/date_spec.rb +16 -0
  38. data/spec/rails/date_time_spec.rb +20 -0
  39. data/spec/rails/period_spec.rb +17 -0
  40. data/spec/schema.rb +5 -0
  41. data/spec/season_spec.rb +21 -24
  42. data/spec/spec_helper.rb +5 -20
  43. data/spec/string_spec.rb +4 -3
  44. data/spec/support/coverage.rb +26 -0
  45. data/spec/temporal_patterns_spec.rb +28 -0
  46. data/spec/time_since_spec.rb +24 -0
  47. data/spec/time_spec.rb +14 -14
  48. data/spec/trackable_date_set_spec.rb +14 -14
  49. data/spec/week_days_spec.rb +18 -18
  50. data/timely.gemspec +34 -98
  51. metadata +244 -21
  52. data/lib/timely/temporal_patterns.rb +0 -441
@@ -0,0 +1,17 @@
1
+ module Timely
2
+ module TimeSince
3
+ def seconds_since
4
+ ::DateTime.now.to_i - self.to_i
5
+ end
6
+
7
+ def minutes_since
8
+ seconds_since/60
9
+ end
10
+
11
+ def hours_since
12
+ minutes_since/60
13
+ end
14
+ end
15
+ end
16
+
17
+ DateTime.send :include, Timely::TimeSince
@@ -0,0 +1,3 @@
1
+ module Timely
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ class ActionViewTest
4
+ include Timely::ActionViewHelpers::FormTagHelper
5
+ end
6
+
7
+ describe Timely::ActionViewHelpers do
8
+ subject { ActionViewTest.new }
9
+ let(:string) { double(:string) }
10
+ let(:date) { Date.new(2000, 12, 25) }
11
+ before {
12
+ expect(date).to receive(:to_s).with(:calendar).and_return('25-12-2000')
13
+ expect(Timely).to receive(:current_date).and_return(date)
14
+ }
15
+
16
+ it 'should generate calendar tags' do
17
+ expect(string).to receive(:html_safe)
18
+ expect(subject).to receive(:tag).with(:input,
19
+ :id => 'test',
20
+ :class => 'datepicker input-small',
21
+ :size => 10,
22
+ :maxlength => 10,
23
+ :name => 'test',
24
+ :type => 'text',
25
+ :value => '25-12-2000'
26
+ ).and_return(string)
27
+ subject.calendar_tag :test
28
+ end
29
+ end
@@ -8,61 +8,70 @@ describe Timely::DateChooser do
8
8
 
9
9
  #Validation
10
10
  it "rejects blank FROM dates" do
11
- lambda { Timely::DateChooser.new({:from=>""}) }.should raise_error(Timely::DateChooserException)
11
+ expect { Timely::DateChooser.new({:from=>""}) }.to raise_error(
12
+ Timely::DateChooserException, 'A Start Date is required')
12
13
  end
13
14
 
14
15
  it "rejects TO dates later than FROM dates" do
15
- lambda {Timely::DateChooser.new(
16
+ expect {Timely::DateChooser.new(
16
17
  :multiple_dates => true, :from => @from + 10, :to => @from
17
- )}.should raise_error(Timely::DateChooserException)
18
+ )}.to raise_error(Timely::DateChooserException, 'Start Date is after End Date')
18
19
  end
19
20
 
20
21
  #Operation
21
22
  it "returns today if client only wants single date" do
22
- Timely::DateChooser.new(
23
+ expect(Timely::DateChooser.new(
23
24
  :multiple_dates => false, :from => @from
24
- ).choose_dates.should == [@from]
25
+ ).choose_dates).to eq [@from]
25
26
  end
26
27
 
27
28
  #Test specific date of month
28
29
  it "returns from and to as same (one) day in the case that only from date is given" do
29
- Timely::DateChooser.new(
30
+ expect(Timely::DateChooser.new(
30
31
  :multiple_dates => true, :from => @from, :to => ''
31
- ).choose_dates.should == [@from]
32
+ ).choose_dates).to eq [@from]
32
33
  end
33
34
 
34
35
  it "returns all days between from and to days in the basic case" do
35
- Timely::DateChooser.new(
36
+ expect(Timely::DateChooser.new(
36
37
  :multiple_dates => true, :from => @from, :to => @to
37
- ).choose_dates.should == (@from..@to).to_a
38
+ ).choose_dates).to eq (@from..@to).to_a
38
39
  end
39
40
 
40
- it "returns the specific dates if this option is picked" do
41
- Timely::DateChooser.new(
41
+ it "returns the recurring dates within the range if this option is picked" do
42
+ expect(Timely::DateChooser.new(
42
43
  :multiple_dates => true, :select => 'days', :dates => '1,11,3', :from => @from, :to => @to
43
- ).choose_dates.should == [
44
+ ).choose_dates).to eq [
44
45
  "1-01-2011", "3-01-2011", "11-01-2011", "1-02-2011",
45
46
  "3-02-2011", "11-02-2011", "1-03-2011"
46
47
  ].map(&:to_date)
47
48
  end
48
49
 
50
+ it "returns the specific dates, within or outside of the range, if this option is picked" do
51
+ expect(Timely::DateChooser.new(
52
+ :multiple_dates => true, :select => 'specific_days', :specific_dates => '11-01-2011, 18-02-2011, 22-06-2011', :from => @from, :to => @to
53
+ ).choose_dates).to eq [
54
+ "11-01-2011", "18-02-2011", "22-06-2011"
55
+ ].map(&:to_date)
56
+ end
57
+
49
58
  #Test days of week, every X weeks
50
59
  it "returns every sunday correctly" do
51
- Timely::DateChooser.new(
60
+ expect(Timely::DateChooser.new(
52
61
  :multiple_dates => true, :select => 'weekdays', :from => @from, :to => @to,
53
- :interval => {:level => "1", :unit => "w"}, :weekdays => {:sun => true}
54
- ).choose_dates.should == [
62
+ :interval => {:level => "1", :unit => "week"}, :weekdays => {:sun => true}
63
+ ).choose_dates).to eq [
55
64
  "2-01-2011", "9-01-2011", "16-01-2011", "23-01-2011", "30-01-2011",
56
65
  "06-02-2011", "13-02-2011", "20-02-2011", "27-02-2011"
57
66
  ].map(&:to_date)
58
67
  end
59
68
 
60
69
  it "returns every thursday and sunday correctly" do
61
- Timely::DateChooser.new(
70
+ expect(Timely::DateChooser.new(
62
71
  :multiple_dates => true, :select => 'weekdays',
63
- :interval => {:level => "1", :unit => "w"},
72
+ :interval => {:level => "1", :unit => "week"},
64
73
  :weekdays => {:sun => true, :thu => true}, :from => @from, :to => @to
65
- ).choose_dates.should == [
74
+ ).choose_dates).to eq [
66
75
  "2-01-2011", "6-01-2011", "9-01-2011", "13-01-2011", "16-01-2011",
67
76
  "20-01-2011", "23-01-2011", "27-01-2011", "30-01-2011", "3-02-2011",
68
77
  "06-02-2011", "10-02-2011", "13-02-2011", "17-02-2011", "20-02-2011",
@@ -71,11 +80,11 @@ describe Timely::DateChooser do
71
80
  end
72
81
 
73
82
  it "returns every 2nd thursday and sunday correctly" do
74
- Timely::DateChooser.new(
83
+ expect(Timely::DateChooser.new(
75
84
  :multiple_dates => true, :select => 'weekdays',
76
- :interval => {:level => "2", :unit => "w"},
85
+ :interval => {:level => "2", :unit => "week"},
77
86
  :weekdays => {:sun => "1", :thu => "1"}, :from => @from, :to => @to
78
- ).choose_dates.should == [
87
+ ).choose_dates).to eq [
79
88
  "2-01-2011", "6-01-2011", "16-01-2011", "20-01-2011", "30-01-2011",
80
89
  "3-02-2011", "13-02-2011", "17-02-2011", "27-02-2011"
81
90
  ].map(&:to_date)
@@ -83,18 +92,18 @@ describe Timely::DateChooser do
83
92
 
84
93
  #Test correct results for every Nth week of month
85
94
  it "returns every 1st Tuesday" do
86
- Timely::DateChooser.new(
95
+ expect(Timely::DateChooser.new(
87
96
  :multiple_dates => true, :select => 'weekdays', :from => @from, :to => @to,
88
- :interval => {:level => "1", :unit => "wom"}, :weekdays => {:tue => true}
89
- ).choose_dates.should == ["4-01-2011", "1-02-2011", "1-03-2011"].map(&:to_date)
97
+ :interval => {:level => "1", :unit => "week_of_month"}, :weekdays => {:tue => true}
98
+ ).choose_dates).to eq ["4-01-2011", "1-02-2011", "1-03-2011"].map(&:to_date)
90
99
  end
91
100
 
92
101
  it "returns every 3st Monday and Friday" do
93
- Timely::DateChooser.new(
102
+ expect(Timely::DateChooser.new(
94
103
  :multiple_dates => true, :select => 'weekdays',
95
- :interval => {:level => "3", :unit => "wom"},
104
+ :interval => {:level => "3", :unit => "week_of_month"},
96
105
  :weekdays => {:mon => true, :fri => true}, :from => @from, :to => @to
97
- ).choose_dates.should == [
106
+ ).choose_dates).to eq [
98
107
  "17-01-2011", "21-01-2011", "18-02-2011", "21-02-2011"
99
108
  ].map(&:to_date)
100
109
  end
@@ -1,16 +1,16 @@
1
1
  require "spec_helper"
2
2
  describe Timely::DateGroup do
3
3
  before do
4
- @date_group = Timely::DateGroup.create!(
4
+ @date_group = Timely::DateGroup.new(
5
5
  :start_date => '2000-01-01', :end_date => '2000-01-03', :weekdays => %w(1 1 1 1 1 1 1)
6
6
  )
7
7
  end
8
8
 
9
9
  it 'should detect overlaps' do
10
- @date_group.applicable_for_duration?(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-01'.to_date)).should be_true
11
- @date_group.applicable_for_duration?(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-06'.to_date)).should be_true
12
- @date_group.applicable_for_duration?(Timely::DateRange.new('2001-01-01'.to_date, '2001-01-01'.to_date)).should be_false
13
- @date_group.applicable_for_duration?(Timely::DateRange.new('1999-12-29'.to_date, '2000-01-05'.to_date)).should be_true
10
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-01'.to_date))).to be true
11
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-06'.to_date))).to be true
12
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2001-01-01'.to_date, '2001-01-01'.to_date))).to be false
13
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('1999-12-29'.to_date, '2000-01-05'.to_date))).to be true
14
14
  end
15
15
 
16
16
  it "should detect overlaps when certain weekdays aren't selected" do
@@ -18,9 +18,9 @@ describe Timely::DateGroup do
18
18
  :start_date => '2012-01-01', :end_date => '2012-01-07', :weekdays => %w(1 0 1 0 1 0 1)
19
19
  )
20
20
  # Note: 2012-01-1 is a Sunday
21
- @date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-01'.to_date, '2012-01-01'.to_date)).should be_true
22
- @date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-02'.to_date, '2012-01-02'.to_date)).should be_false
23
- @date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-03'.to_date, '2012-01-03'.to_date)).should be_true
24
- @date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-01'.to_date, '2012-01-03'.to_date)).should be_true
21
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-01'.to_date, '2012-01-01'.to_date))).to be true
22
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-02'.to_date, '2012-01-02'.to_date))).to be false
23
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-03'.to_date, '2012-01-03'.to_date))).to be true
24
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-01'.to_date, '2012-01-03'.to_date))).to be true
25
25
  end
26
26
  end
@@ -3,38 +3,76 @@ require 'spec_helper'
3
3
  describe Timely::DateRange do
4
4
 
5
5
  it "should allow initialization with two dates" do
6
- lambda { @date_range = Timely::DateRange.new(Date.today, Date.today + 3) }.should_not raise_error
7
- @date_range.start_date.should eql Date.today
8
- @date_range.end_date.should eql Date.today + 3
6
+ expect { @date_range = Timely::DateRange.new(Date.today, Date.today + 3) }.to_not raise_error
7
+ expect(@date_range.start_date).to eq Date.today
8
+ expect(@date_range.end_date).to eq Date.today + 3
9
+ expect(@date_range.number_of_nights).to eq 4
9
10
  end
10
11
 
11
12
  it "should allow initialization with one date" do
12
- lambda { @date_range = Timely::DateRange.new(Date.today) }.should_not raise_error
13
- @date_range.start_date.should eql Date.today
14
- @date_range.end_date.should eql Date.today
13
+ expect { @date_range = Timely::DateRange.new(Date.today) }.to_not raise_error
14
+ expect(@date_range.start_date).to eq Date.today
15
+ expect(@date_range.end_date).to eq Date.today
16
+ expect(@date_range.number_of_nights).to eq 1
15
17
  end
16
18
 
17
19
  it "should allow initialization with a range" do
18
- lambda { @date_range = Timely::DateRange.new(Date.today..Date.today + 3) }.should_not raise_error
19
- @date_range.start_date.should eql Date.today
20
- @date_range.end_date.should eql Date.today + 3
20
+ expect { @date_range = Timely::DateRange.new(Date.today..Date.today + 3) }.to_not raise_error
21
+ expect(@date_range.start_date).to eq Date.today
22
+ expect(@date_range.end_date).to eq Date.today + 3
23
+ end
24
+
25
+ it 'should print a readable version of time between two dates' do
26
+ expect(Timely::DateRange.new('2000-01-04'.to_date, '2000-01-04'.to_date).to_s).to eq '2000-01-04'
27
+ expect(Timely::DateRange.new('2000-01-04'.to_date, '2000-01-06'.to_date).to_s).to eq '2000-01-04 to 2000-01-06 (inclusive)'
28
+ expect(Timely::DateRange.new('2000-01-01'.to_date, '2000-05-31'.to_date).to_s).to eq 'Jan 2000 to May 2000'
29
+ expect(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-31'.to_date).to_s).to eq 'Jan 2000'
30
+ Date::DATE_FORMATS[:short] = '%Y-%m-%d'
31
+ expect(Timely::DateRange.to_s('2000-01-01'.to_date, nil)).to eq 'on or after 2000-01-01'
32
+ expect(Timely::DateRange.to_s(nil, '2000-01-31'.to_date)).to eq 'on or before 2000-01-31'
33
+ expect(Timely::DateRange.to_s(nil, nil)).to eq 'no date range'
34
+ end
35
+
36
+ let(:fourth) { '2000-01-04'.to_date }
37
+ let(:fifth) { '2000-01-05'.to_date }
38
+ let(:sixth) { '2000-01-06'.to_date }
39
+
40
+ it 'should print a readable version of time between two times' do
41
+ expect(Timely::DateRange.to_s(fourth.at(9, 30), sixth.at(4, 20)))
42
+ .to eq '2000-01-04 09:30 to 2000-01-06 04:20'
43
+ expect(Timely::DateRange.to_s(fourth.at(9, 30)))
44
+ .to eq 'on or after 2000-01-04 09:30'
45
+ end
46
+
47
+ it 'should handle params' do
48
+ today = Timely::DateRange.from_params('2000-01-04')
49
+ expect(today.first).to eq '2000-01-04'.to_date
50
+ expect(today.last).to eq '2000-01-04'.to_date
51
+
52
+ today = Timely::DateRange.from_params('2000-01-04', '2')
53
+ expect(today.first).to eq '2000-01-04'.to_date
54
+ expect(today.last).to eq '2000-01-05'.to_date
55
+
56
+ today = Timely::DateRange.from_params('2000-01-04', 2)
57
+ expect(today.first).to eq '2000-01-04'.to_date
58
+ expect(today.last).to eq '2000-01-05'.to_date
21
59
  end
22
60
 
23
61
  it "should correctly find the interesection between two date ranges" do
24
62
  @date_range = Timely::DateRange.new("2000-01-03".to_date, "2000-01-06".to_date)
25
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-07".to_date)).should == ("2000-01-04".to_date.."2000-01-06".to_date)
26
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-02".to_date)).should == []
27
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-03".to_date)).should == ("2000-01-03".to_date.."2000-01-03".to_date)
28
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-06".to_date, "2000-01-07".to_date)).should == ("2000-01-06".to_date.."2000-01-06".to_date)
29
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-06".to_date, "2000-01-07".to_date)).should == ("2000-01-06".to_date.."2000-01-06".to_date)
30
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-05".to_date)).should == ("2000-01-04".to_date.."2000-01-05".to_date)
31
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-05".to_date, "2000-01-05".to_date)).should == ("2000-01-05".to_date.."2000-01-05".to_date)
63
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-07".to_date))).to eq ("2000-01-04".to_date.."2000-01-06".to_date)
64
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-02".to_date))).to eq []
65
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-03".to_date))).to eq ("2000-01-03".to_date.."2000-01-03".to_date)
66
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-06".to_date, "2000-01-07".to_date))).to eq ("2000-01-06".to_date.."2000-01-06".to_date)
67
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-06".to_date, "2000-01-07".to_date))).to eq ("2000-01-06".to_date.."2000-01-06".to_date)
68
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-05".to_date))).to eq ("2000-01-04".to_date.."2000-01-05".to_date)
69
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-05".to_date, "2000-01-05".to_date))).to eq ("2000-01-05".to_date.."2000-01-05".to_date)
32
70
 
33
71
  @date_range = Timely::DateRange.new("2000-01-03".to_date, "2000-01-03".to_date)
34
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-07".to_date)).should == []
35
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-03".to_date)).should == ("2000-01-03".to_date.."2000-01-03".to_date)
36
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-03".to_date, "2000-01-05".to_date)).should == ("2000-01-03".to_date.."2000-01-03".to_date)
37
- @date_range.intersecting_dates(Timely::DateRange.new("2000-01-02".to_date, "2000-01-04".to_date)).should == ("2000-01-03".to_date.."2000-01-03".to_date)
72
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-07".to_date))).to eq []
73
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-03".to_date))).to eq ("2000-01-03".to_date.."2000-01-03".to_date)
74
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-03".to_date, "2000-01-05".to_date))).to eq ("2000-01-03".to_date.."2000-01-03".to_date)
75
+ expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-02".to_date, "2000-01-04".to_date))).to eq ("2000-01-03".to_date.."2000-01-03".to_date)
38
76
  end
39
77
 
40
78
  end
data/spec/date_spec.rb CHANGED
@@ -1,5 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
+ describe Date do
4
+ it 'should determine if date between' do
5
+ expect(Date.today.between?(nil, nil)).to be true
6
+ expect(Date.today.between?(Date.today - 1, Date.today - 1)).to be false
7
+ expect(Date.today.between?(Date.today - 1, nil)).to be true
8
+ end
9
+ end
10
+
3
11
  describe Date do
4
12
  before :each do
5
13
  @date = Date.today - 5
@@ -10,59 +18,59 @@ describe Date do
10
18
  end
11
19
 
12
20
  it 'should give a time on that date' do
13
- @date.should respond_to(:at_time)
21
+ expect(@date).to respond_to(:at_time)
14
22
  end
15
23
 
16
24
  describe 'giving a time on that date' do
17
25
  it 'should accept hour, minute, and second' do
18
- lambda { @date.at_time(@hour, @minute, @second) }.should_not raise_error(ArgumentError)
26
+ expect { @date.at_time(@hour, @minute, @second) }.to_not raise_error
19
27
  end
20
28
 
21
29
  it 'should accept hour and minute' do
22
- lambda { @date.at_time(@hour, @minute) }.should_not raise_error(ArgumentError)
30
+ expect { @date.at_time(@hour, @minute) }.to_not raise_error
23
31
  end
24
32
 
25
33
  it 'should accept hour' do
26
- lambda { @date.at_time(@hour) }.should_not raise_error(ArgumentError)
34
+ expect { @date.at_time(@hour) }.to_not raise_error
27
35
  end
28
36
 
29
37
  it 'should accept no arguments' do
30
- lambda { @date.at_time }.should_not raise_error(ArgumentError)
38
+ expect { @date.at_time }.to_not raise_error
31
39
  end
32
40
 
33
41
  it 'should return a time for the given hour, minute, and second if all three are specified' do
34
42
  expected = Time.local(@date.year, @date.month, @date.day, @hour, @minute, @second)
35
- @date.at_time(@hour, @minute, @second).should == expected
43
+ expect(@date.at_time(@hour, @minute, @second)).to eq expected
36
44
  end
37
45
 
38
46
  it 'should default second to 0 if unspecified' do
39
47
  expected = Time.local(@date.year, @date.month, @date.day, @hour, @minute, 0)
40
- @date.at_time(@hour, @minute).should == expected
48
+ expect(@date.at_time(@hour, @minute)).to eq expected
41
49
  end
42
50
 
43
51
  it 'should default minute to 0 if unspecified' do
44
52
  expected = Time.local(@date.year, @date.month, @date.day, @hour, 0, 0)
45
- @date.at_time(@hour).should == expected
53
+ expect(@date.at_time(@hour)).to eq expected
46
54
  end
47
55
 
48
56
  it 'should default hour to 0 if unspecified' do
49
57
  expected = Time.local(@date.year, @date.month, @date.day, 0, 0, 0)
50
- @date.at_time.should == expected
58
+ expect(@date.at_time).to eq expected
51
59
  end
52
60
 
53
61
  it 'should accept a time' do
54
- lambda { @date.at_time(Time.now) }.should_not raise_error(ArgumentError)
62
+ expect { @date.at_time(Time.now) }.to_not raise_error
55
63
  end
56
64
 
57
65
  it 'should return the passed-in time on the date' do
58
66
  @time = Time.now - 12345
59
67
  expected = Time.local(@date.year, @date.month, @date.day, @time.hour, @time.min, @time.sec)
60
- @date.at_time(@time).should == expected
68
+ expect(@date.at_time(@time)).to eq expected
61
69
  end
62
70
  end
63
71
 
64
72
  it "should provide 'at' as an alias" do
65
73
  expected = Time.local(@date.year, @date.month, @date.day, @hour, @minute, @second)
66
- @date.at(@hour, @minute, @second).should == expected
74
+ expect(@date.at(@hour, @minute, @second)).to eq expected
67
75
  end
68
76
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'timely/rails/extensions'
3
+
4
+ describe Timely::Extensions do
5
+ before do
6
+ class TimelyExtensionsTestSeasonal < ActiveRecord::Base
7
+ self.table_name = 'seasonals'
8
+ acts_as_seasonal
9
+ end
10
+ end
11
+
12
+ after { Object.send(:remove_const, 'TimelyExtensionsTestSeasonal') }
13
+
14
+ it 'should cache boundary start' do
15
+ season = Timely::Season.new
16
+ season.date_groups.build(:start_date => Date.current, :end_date => Date.current + 2)
17
+ season.date_groups.build(:start_date => Date.current - 1, :end_date => Date.current + 1)
18
+ season.save!
19
+
20
+ o = TimelyExtensionsTestSeasonal.new
21
+ o.season = season
22
+ o.save!
23
+ expect(o.boundary_start).to eq Date.current - 1
24
+ expect(o.boundary_end ).to eq Date.current + 2
25
+
26
+ expect(TimelyExtensionsTestSeasonal.season_on(Date.current + 3)).to be_empty
27
+ expect(TimelyExtensionsTestSeasonal.season_on(Date.current + 2)).to eq [o]
28
+ expect(TimelyExtensionsTestSeasonal.season_on(Date.current - 1)).to eq [o]
29
+ expect(TimelyExtensionsTestSeasonal.season_on(Date.current - 2)).to be_empty
30
+
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Date do
4
+ let(:date) { Date.parse("2010-01-01") }
5
+
6
+ before { Time.zone = ActiveSupport::TimeZone["Adelaide"] }
7
+
8
+ subject(:converted) { date.to_time_in_time_zone }
9
+
10
+ it "should convert to time in time zone" do
11
+ expect(converted.year).to eq date.year
12
+ expect(converted.month).to eq date.month
13
+ expect(converted.day).to eq date.day
14
+ expect(converted.time_zone).to eq Time.zone
15
+ end
16
+ end