timely 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|