timely 0.0.2 → 0.1.0
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 +7 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/.travis.yml +14 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -12
- data/README.md +5 -0
- data/Rakefile +1 -139
- data/gemfiles/rails3.gemfile +8 -0
- data/gemfiles/rails4.gemfile +9 -0
- data/lib/timely.rb +7 -3
- data/lib/timely/date.rb +20 -0
- data/lib/timely/date_chooser.rb +10 -5
- data/lib/timely/date_range.rb +47 -10
- data/lib/timely/rails.rb +10 -3
- data/lib/timely/rails/calendar_tag.rb +52 -0
- data/lib/timely/rails/date.rb +5 -0
- data/lib/timely/rails/date_group.rb +68 -99
- data/lib/timely/rails/date_range_validity_module.rb +27 -0
- data/lib/timely/rails/date_time.rb +20 -0
- data/lib/timely/rails/extensions.rb +23 -11
- data/lib/timely/rails/period.rb +31 -0
- data/lib/timely/rails/season.rb +65 -75
- data/lib/timely/railtie.rb +7 -0
- data/lib/timely/temporal_patterns/finder.rb +152 -0
- data/lib/timely/temporal_patterns/frequency.rb +108 -0
- data/lib/timely/temporal_patterns/interval.rb +67 -0
- data/lib/timely/temporal_patterns/pattern.rb +160 -0
- data/lib/timely/time_since.rb +17 -0
- data/lib/timely/version.rb +3 -0
- data/spec/calendar_tag_spec.rb +29 -0
- data/spec/date_chooser_spec.rb +36 -27
- data/spec/date_group_spec.rb +9 -9
- data/spec/date_range_spec.rb +58 -20
- data/spec/date_spec.rb +20 -12
- data/spec/extensions_spec.rb +32 -0
- data/spec/rails/date_spec.rb +16 -0
- data/spec/rails/date_time_spec.rb +20 -0
- data/spec/rails/period_spec.rb +17 -0
- data/spec/schema.rb +5 -0
- data/spec/season_spec.rb +21 -24
- data/spec/spec_helper.rb +5 -20
- data/spec/string_spec.rb +4 -3
- data/spec/support/coverage.rb +26 -0
- data/spec/temporal_patterns_spec.rb +28 -0
- data/spec/time_since_spec.rb +24 -0
- data/spec/time_spec.rb +14 -14
- data/spec/trackable_date_set_spec.rb +14 -14
- data/spec/week_days_spec.rb +18 -18
- data/timely.gemspec +34 -98
- metadata +244 -21
- data/lib/timely/temporal_patterns.rb +0 -441
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DateTime do
|
4
|
+
let(:date_time) { DateTime.parse("2010-01-01") }
|
5
|
+
|
6
|
+
it "should allow advancing by calendar days" do
|
7
|
+
expect(date_time.advance_considering_calendar(:calendar_days, 10))
|
8
|
+
.to eq DateTime.parse("2010-01-10 23:59:59")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should allow advancing by calendar months" do
|
12
|
+
expect(date_time.advance_considering_calendar(:calendar_months, 10))
|
13
|
+
.to eq DateTime.parse("2010-10-31 23:59:59")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should allow advancing by calendar years" do
|
17
|
+
expect(date_time.advance_considering_calendar(:calendar_years, 10))
|
18
|
+
.to eq DateTime.parse("2019-12-31 23:59:59")
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'timely/rails/period'
|
4
|
+
|
5
|
+
describe Timely::Period do
|
6
|
+
let(:time) { DateTime.new(2000, 1, 1, 12, 0, 0) }
|
7
|
+
let(:period_after_time) { DateTime.new(2000, 1, 1, 12, 2, 0) }
|
8
|
+
subject(:period) { Timely::Period.new(2, :minutes) }
|
9
|
+
|
10
|
+
it 'should work' do
|
11
|
+
expect(period.after(time)).to eq period_after_time
|
12
|
+
end
|
13
|
+
|
14
|
+
specify do
|
15
|
+
expect(period.to_s).to eq '2 minutes'
|
16
|
+
end
|
17
|
+
end
|
data/spec/schema.rb
CHANGED
data/spec/season_spec.rb
CHANGED
@@ -6,53 +6,50 @@ describe Timely::Season, "in general" do
|
|
6
6
|
@simple_low_season = Timely::Season.new
|
7
7
|
@simple_low_season.date_groups.build(:start_date => '2009-01-01'.to_date, :end_date => '2009-03-31'.to_date)
|
8
8
|
@simple_low_season.date_groups.build(:start_date => '2009-07-01'.to_date, :end_date => '2009-09-30'.to_date)
|
9
|
-
@simple_low_season.save!
|
10
9
|
|
11
10
|
# 2nd and 4th Quarter
|
12
11
|
@simple_high_season = Timely::Season.new
|
13
12
|
@simple_high_season.date_groups.build(:start_date => '2009-04-01'.to_date, :end_date => '2009-06-30'.to_date)
|
14
13
|
@simple_high_season.date_groups.build(:start_date => '2009-10-01'.to_date, :end_date => '2009-12-31'.to_date)
|
15
|
-
@simple_high_season.save!
|
16
14
|
end
|
17
15
|
|
18
16
|
it "be able to tell if a date is in or out of its season" do
|
19
17
|
low_season_date = '2009-02-22'.to_date
|
20
18
|
high_season_date = '2009-04-22'.to_date
|
21
19
|
|
22
|
-
@simple_low_season.includes_date?(low_season_date).
|
23
|
-
@simple_high_season.includes_date?(low_season_date).
|
20
|
+
expect(@simple_low_season.includes_date?(low_season_date)).to be true
|
21
|
+
expect(@simple_high_season.includes_date?(low_season_date)).to_not be true
|
24
22
|
|
25
|
-
@simple_low_season.includes_date?(high_season_date).
|
26
|
-
@simple_high_season.includes_date?(high_season_date).
|
23
|
+
expect(@simple_low_season.includes_date?(high_season_date)).to_not be true
|
24
|
+
expect(@simple_high_season.includes_date?(high_season_date)).to be true
|
27
25
|
end
|
28
26
|
|
29
27
|
it "should be able to tell the boundary range (the range including the absolute first and last date) of itself" do
|
30
|
-
@simple_low_season.boundary_range.
|
31
|
-
@simple_high_season.boundary_range.
|
28
|
+
expect(@simple_low_season.boundary_range).to eq('2009-01-01'.to_date..'2009-09-30'.to_date)
|
29
|
+
expect(@simple_high_season.boundary_range).to eq('2009-04-01'.to_date..'2009-12-31'.to_date)
|
32
30
|
end
|
33
31
|
end
|
34
32
|
|
35
33
|
|
36
34
|
describe Timely::Season, 'when asked to build season for given dates' do
|
37
|
-
|
38
|
-
@dates = [Date.current + 1, Date.current + 4, Date.current + 5]
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should generate proper season" do
|
42
|
-
season = Timely::Season.build_season_for(@dates)
|
43
|
-
season.class.should == Timely::Season
|
44
|
-
season.date_groups.size.should == 3
|
45
|
-
season.date_groups.first.start_date.should == (Date.current + 1)
|
46
|
-
season.date_groups.last.start_date.should == (Date.current + 5)
|
47
|
-
season.date_groups.last.end_date.should == (Date.current + 5)
|
48
|
-
@dates = []
|
49
|
-
season = Timely::Season.build_season_for(@dates)
|
50
|
-
season.class.should == Timely::Season
|
51
|
-
season.date_groups.size.should == 0
|
52
|
-
end
|
35
|
+
subject(:season) { Timely::Season.build_season_for(dates) }
|
53
36
|
|
37
|
+
context 'when three dates' do
|
38
|
+
let(:dates) { [Date.current + 1, Date.current + 4, Date.current + 5] }
|
39
|
+
its(:class) { should eq Timely::Season }
|
40
|
+
its('date_groups.size') { should eq 3 }
|
54
41
|
|
42
|
+
it "should generate proper date groups" do
|
43
|
+
expect(season.date_groups.first.start_date).to eq (Date.current + 1)
|
44
|
+
expect(season.date_groups.last.start_date).to eq (Date.current + 5)
|
45
|
+
expect(season.date_groups.last.end_date).to eq (Date.current + 5)
|
46
|
+
end
|
47
|
+
end
|
55
48
|
|
49
|
+
context 'when dates are empty' do
|
50
|
+
let(:dates) { [] }
|
51
|
+
its(:date_groups) { should be_empty }
|
52
|
+
end
|
56
53
|
end
|
57
54
|
|
58
55
|
|
data/spec/spec_helper.rb
CHANGED
@@ -7,29 +7,15 @@
|
|
7
7
|
|
8
8
|
require 'rubygems'
|
9
9
|
require 'bundler/setup'
|
10
|
+
require 'rspec/its'
|
10
11
|
require 'active_record'
|
11
|
-
require 'timely/rails'
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
|
17
|
-
SimpleCov.start do
|
18
|
-
add_filter '/vendor/'
|
19
|
-
add_filter '/spec/'
|
20
|
-
add_group 'lib', 'lib'
|
21
|
-
end
|
22
|
-
SimpleCov.at_exit do
|
23
|
-
SimpleCov.result.format!
|
24
|
-
percent = SimpleCov.result.covered_percent
|
25
|
-
unless percent >= 50
|
26
|
-
puts "Coverage must be above 50%. It is #{"%.2f" % percent}%"
|
27
|
-
Kernel.exit(1)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
13
|
+
require 'support/coverage'
|
14
|
+
|
15
|
+
I18n.enforce_available_locales = true if I18n.respond_to? :enforce_available_locales=
|
31
16
|
|
32
17
|
require 'timely'
|
18
|
+
require 'timely/rails'
|
33
19
|
|
34
20
|
DB_FILE = 'tmp/test_db'
|
35
21
|
FileUtils.mkdir_p File.dirname(DB_FILE)
|
@@ -40,7 +26,6 @@ ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => DB_F
|
|
40
26
|
load('spec/schema.rb')
|
41
27
|
|
42
28
|
RSpec.configure do |config|
|
43
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
44
29
|
config.run_all_when_everything_filtered = true
|
45
30
|
config.filter_run :focus
|
46
31
|
end
|
data/spec/string_spec.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe String do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
# Spec currently doesn't work
|
5
|
+
#it "should convert to date" do
|
6
|
+
# "10-2010-01".to_date('%d-%Y-%m').should eql Date.parse("2010-01-10")
|
7
|
+
#end
|
7
8
|
|
8
9
|
# Spec currently doesn't work
|
9
10
|
#it 'should handle rails date formats' do
|
@@ -0,0 +1,26 @@
|
|
1
|
+
MINIMUM_COVERAGE = 68
|
2
|
+
|
3
|
+
unless ENV['COVERAGE'] == 'off'
|
4
|
+
require 'simplecov'
|
5
|
+
require 'simplecov-rcov'
|
6
|
+
require 'coveralls'
|
7
|
+
Coveralls.wear!
|
8
|
+
|
9
|
+
SimpleCov.formatters = [
|
10
|
+
SimpleCov::Formatter::RcovFormatter,
|
11
|
+
Coveralls::SimpleCov::Formatter
|
12
|
+
]
|
13
|
+
SimpleCov.start do
|
14
|
+
add_filter '/vendor/'
|
15
|
+
add_filter '/spec/'
|
16
|
+
add_group 'lib', 'lib'
|
17
|
+
end
|
18
|
+
SimpleCov.at_exit do
|
19
|
+
SimpleCov.result.format!
|
20
|
+
percent = SimpleCov.result.covered_percent
|
21
|
+
unless percent >= MINIMUM_COVERAGE
|
22
|
+
puts "Coverage must be above #{MINIMUM_COVERAGE}%. It is #{"%.2f" % percent}%"
|
23
|
+
Kernel.exit(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Timely::TemporalPatterns do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@from = Date.new(2012, 1, 1)
|
7
|
+
@to = Date.new(2013, 4, 1)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to create a basic 1st-of-the-month recurrence pattern" do
|
11
|
+
pattern = Timely::TemporalPatterns::Pattern.new([@from..@to], 1.month)
|
12
|
+
expect(pattern.to_s).to eq "every 1st of the month from 2012-01-01T00:00:00+00:00 to 2013-04-01T00:00:00+00:00"
|
13
|
+
|
14
|
+
expect(pattern.match?('01-05-2012'.to_date)).to be true
|
15
|
+
expect(pattern.match?('01-08-2012'.to_date)).to be true
|
16
|
+
expect(pattern.match?('01-04-2013'.to_date)).to be true
|
17
|
+
|
18
|
+
expect(pattern.match?('03-05-2012'.to_date)).to be false
|
19
|
+
expect(pattern.match?('01-06-2013'.to_date)).to be false
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should only allow a positive duration to be set as the frequency of the pattern" do
|
23
|
+
expect { Timely::TemporalPatterns::Frequency.new(2) }.to raise_error(ArgumentError)
|
24
|
+
expect { Timely::TemporalPatterns::Frequency.new(-5.months) }.to raise_error(ArgumentError)
|
25
|
+
expect(Timely::TemporalPatterns::Frequency.new(3.months).to_s).to eq 'every 3 months'
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'timely/time_since'
|
2
|
+
|
3
|
+
require 'timecop'
|
4
|
+
|
5
|
+
describe Timely::TimeSince do
|
6
|
+
before {
|
7
|
+
Timecop.freeze(DateTime.new(2000, 1, 10, 12, 0, 42))
|
8
|
+
}
|
9
|
+
after { Timecop.return }
|
10
|
+
|
11
|
+
context '42 seconds ago' do
|
12
|
+
subject(:time) { DateTime.new(2000, 1, 10, 12, 0, 0) }
|
13
|
+
its(:seconds_since) { should eq 42 }
|
14
|
+
its(:minutes_since) { should eq 0 }
|
15
|
+
its(:hours_since) { should eq 0 }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'a day ago' do
|
19
|
+
subject(:time) { DateTime.new(2000, 1, 9, 12, 0, 42) }
|
20
|
+
its(:seconds_since) { should eq 24*60*60 }
|
21
|
+
its(:minutes_since) { should eq 24*60 }
|
22
|
+
its(:hours_since) { should eq 24 }
|
23
|
+
end
|
24
|
+
end
|
data/spec/time_spec.rb
CHANGED
@@ -5,17 +5,17 @@ describe Time do
|
|
5
5
|
xmas = Date.new(2012, 12, 25)
|
6
6
|
lunch_time = Time.parse("12:00")
|
7
7
|
xmas_lunch = lunch_time.on_date(xmas)
|
8
|
-
xmas_lunch.year.
|
9
|
-
xmas_lunch.month.
|
10
|
-
xmas_lunch.day.
|
11
|
-
xmas_lunch.hour.
|
12
|
-
xmas_lunch.min.
|
13
|
-
xmas_lunch.sec.
|
8
|
+
expect(xmas_lunch.year).to eq 2012
|
9
|
+
expect(xmas_lunch.month).to eq 12
|
10
|
+
expect(xmas_lunch.day).to eq 25
|
11
|
+
expect(xmas_lunch.hour).to eq 12
|
12
|
+
expect(xmas_lunch.min).to eq 0
|
13
|
+
expect(xmas_lunch.sec).to eq 0
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should allow setting the date part given a date" do
|
17
17
|
time = Time.parse("2010-01-01 09:30:00")
|
18
|
-
time.on_date(Date.parse("2012-12-31")).
|
18
|
+
expect(time.on_date(Date.parse("2012-12-31"))).to eq Time.parse("2012-12-31 09:30:00")
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -29,36 +29,36 @@ describe Time do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'should give that time on a date' do
|
32
|
-
@time.
|
32
|
+
expect(@time).to respond_to(:on_date)
|
33
33
|
end
|
34
34
|
|
35
35
|
describe 'giving that time on a date' do
|
36
36
|
it 'should accept year, month and day' do
|
37
|
-
|
37
|
+
expect { @time.on_date(@year, @month, @day) }.to_not raise_error
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should require year, month, and day' do
|
41
|
-
|
41
|
+
expect { @time.on_date(@year, @month) }.to raise_error(ArgumentError)
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'should return the same time on the specified year, month, and day' do
|
45
45
|
expected = Time.local(@year, @month, @day, @time.hour, @time.min, @time.sec)
|
46
|
-
@time.on_date(@year, @month, @day).
|
46
|
+
expect(@time.on_date(@year, @month, @day)).to eq expected
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'should accept a date' do
|
50
|
-
|
50
|
+
expect { @time.on_date(Date.today) }.to_not raise_error
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should return the same time on the specified date' do
|
54
54
|
@date = Date.today - 2345
|
55
55
|
expected = Time.local(@date.year, @date.month, @date.day, @time.hour, @time.min, @time.sec)
|
56
|
-
@time.on_date(@date).
|
56
|
+
expect(@time.on_date(@date)).to eq expected
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should provide 'on' as an alias" do
|
61
61
|
expected = Time.local(@year, @month, @day, @time.hour, @time.min, @time.sec)
|
62
|
-
@time.on(@year, @month, @day).
|
62
|
+
expect(@time.on(@year, @month, @day)).to eq expected
|
63
63
|
end
|
64
64
|
end
|
@@ -7,27 +7,27 @@ describe Timely::TrackableDateSet, ' tracking 7 days' do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should start on the first date" do
|
10
|
-
@trackable_date_set.start_date.
|
10
|
+
expect(@trackable_date_set.start_date).to eq Date.today
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should end on the last date" do
|
14
|
-
@trackable_date_set.end_date.
|
14
|
+
expect(@trackable_date_set.end_date).to eq Date.today + 6
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should have the 7 days set" do
|
18
|
-
get_dates.
|
19
|
-
@trackable_date_set.duration.
|
20
|
-
@trackable_date_set.number_of_nights.
|
18
|
+
expect(get_dates).to eq @range.to_a
|
19
|
+
expect(@trackable_date_set.duration).to eq 7
|
20
|
+
expect(@trackable_date_set.number_of_nights).to eq 7
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should have all the 7 days to do" do
|
24
|
-
get_dates_to_do.
|
24
|
+
expect(get_dates_to_do).to eq @range.to_a
|
25
25
|
should_not_have_done(@range.to_a)
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should have only the last 6 days to do when we set_done! the first one" do
|
29
29
|
@trackable_date_set.set_date_done!(Date.today)
|
30
|
-
get_dates_to_do.
|
30
|
+
expect(get_dates_to_do).to eq ((Date.today + 1)..(Date.today + 6)).to_a
|
31
31
|
|
32
32
|
should_not_have_done(@range.to_a - [Date.today])
|
33
33
|
should_have_done([Date.today])
|
@@ -37,33 +37,33 @@ describe Timely::TrackableDateSet, ' tracking 7 days' do
|
|
37
37
|
dates_to_be_done = [Date.today + 1, Date.today + 2, Date.today + 3]
|
38
38
|
@trackable_date_set.set_dates_done!(dates_to_be_done)
|
39
39
|
|
40
|
-
get_dates_to_do.
|
40
|
+
expect(get_dates_to_do).to eq [Date.today, Date.today + 4, Date.today + 5, Date.today + 6]
|
41
41
|
should_not_have_done(@range.to_a - dates_to_be_done)
|
42
42
|
should_have_done(dates_to_be_done)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should have none left to do when set_all_done!" do
|
46
46
|
@trackable_date_set.set_all_done!
|
47
|
-
get_dates_to_do.
|
47
|
+
expect(get_dates_to_do).to eq []
|
48
48
|
should_have_done(@range.to_a)
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'should have no actions applied' do
|
52
|
-
@trackable_date_set.action_applied?(:some_action).
|
52
|
+
expect(@trackable_date_set.action_applied?(:some_action)).to be false
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should remember if we apply an action' do
|
56
56
|
@trackable_date_set.apply_action(:some_action)
|
57
|
-
@trackable_date_set.action_applied?(:some_action).
|
58
|
-
@trackable_date_set.action_applied?(:some_other_action).
|
57
|
+
expect(@trackable_date_set.action_applied?(:some_action)).to be true
|
58
|
+
expect(@trackable_date_set.action_applied?(:some_other_action)).to be false
|
59
59
|
end
|
60
60
|
|
61
61
|
def should_have_done(dates)
|
62
|
-
dates.each{|date| @trackable_date_set.has_done?(date).
|
62
|
+
dates.each{|date| expect(@trackable_date_set.has_done?(date)).to be true }
|
63
63
|
end
|
64
64
|
|
65
65
|
def should_not_have_done(dates)
|
66
|
-
dates.each{|date| @trackable_date_set.has_done?(date).
|
66
|
+
dates.each{|date| expect(@trackable_date_set.has_done?(date)).to be false }
|
67
67
|
end
|
68
68
|
|
69
69
|
def get_dates
|
data/spec/week_days_spec.rb
CHANGED
@@ -8,44 +8,44 @@ describe Timely::WeekDays do
|
|
8
8
|
it 'should create via hash, integer and array' do
|
9
9
|
# 0 0 1 0 1 0 0
|
10
10
|
# Sat Fri Thu Wed Tue Mon Sun
|
11
|
-
Timely::WeekDays.new(0b0010100).weekdays.
|
12
|
-
Timely::WeekDays.new(%w(0 0 1 0 1 0 0)).weekdays.
|
13
|
-
Timely::WeekDays.new(:tue => true, :thu => true).weekdays.
|
11
|
+
expect(Timely::WeekDays.new(0b0010100).weekdays).to eq [:tue, :thu]
|
12
|
+
expect(Timely::WeekDays.new(%w(0 0 1 0 1 0 0)).weekdays).to eq [:tue, :thu]
|
13
|
+
expect(Timely::WeekDays.new(:tue => true, :thu => true).weekdays).to eq [:tue, :thu]
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should be able to set/unset days' do
|
17
17
|
@weekdays[:mon] = true
|
18
|
-
@weekdays.weekdays.
|
18
|
+
expect(@weekdays.weekdays).to eq [:mon, :tue, :thu]
|
19
19
|
@weekdays[:tue] = false
|
20
|
-
@weekdays.weekdays.
|
20
|
+
expect(@weekdays.weekdays).to eq [:mon, :thu]
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should output days nicely' do
|
24
|
-
Timely::WeekDays.new(%w(1 0 0 0 0 0 0)).to_s.
|
25
|
-
Timely::WeekDays.new(%w(1 0 1 0 0 0 0)).to_s.
|
26
|
-
Timely::WeekDays.new(%w(1 0 1 1 0 0 0)).to_s.
|
27
|
-
Timely::WeekDays.new(%w(1 0 1 1 0 1 0)).to_s.
|
24
|
+
expect(Timely::WeekDays.new(%w(1 0 0 0 0 0 0)).to_s).to eq "Sun"
|
25
|
+
expect(Timely::WeekDays.new(%w(1 0 1 0 0 0 0)).to_s).to eq "Sun, and Tue"
|
26
|
+
expect(Timely::WeekDays.new(%w(1 0 1 1 0 0 0)).to_s).to eq "Sun, Tue, and Wed"
|
27
|
+
expect(Timely::WeekDays.new(%w(1 0 1 1 0 1 0)).to_s).to eq "Sun, Tue, Wed, and Fri"
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should be able to determine if days of the week are selected' do
|
31
31
|
# Test mon and tue in both symbol/integer forms
|
32
|
-
@weekdays.has_day?(1).
|
33
|
-
@weekdays.has_day?(:mon).
|
34
|
-
@weekdays.has_day?(2).
|
35
|
-
@weekdays.has_day?(:tue).
|
32
|
+
expect(@weekdays.has_day?(1)).to be false
|
33
|
+
expect(@weekdays.has_day?(:mon)).to be false
|
34
|
+
expect(@weekdays.has_day?(2)).to be true
|
35
|
+
expect(@weekdays.has_day?(:tue)).to be true
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should be able to determine if it would be applicable on a date' do
|
39
|
-
@weekdays.applies_for_date?(Date.new(2012, 04, 22)).
|
40
|
-
@weekdays.applies_for_date?(Date.new(2012, 04, 24)).
|
39
|
+
expect(@weekdays.applies_for_date?(Date.new(2012, 04, 22))).to be false # Sunday
|
40
|
+
expect(@weekdays.applies_for_date?(Date.new(2012, 04, 24))).to be true # Tuesday
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should be able to convert to integer for use in databases, etc.' do
|
44
|
-
@weekdays.weekdays_int.
|
44
|
+
expect(@weekdays.weekdays_int).to eq 4 + 16 # 4 = Tue, 16 = Thu
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'should be able to determine if all days are selected' do
|
48
|
-
Timely::WeekDays.new(%w(1 1 1 1 1 1 1)).all_days
|
49
|
-
Timely::WeekDays.new(%w(1 1 1 1 1 0 1)).all_days
|
48
|
+
expect(Timely::WeekDays.new(%w(1 1 1 1 1 1 1)).all_days?).to be true
|
49
|
+
expect(Timely::WeekDays.new(%w(1 1 1 1 1 0 1)).all_days?).to be false
|
50
50
|
end
|
51
51
|
end
|