timely 0.5.0 → 0.6.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +22 -2
  3. data/.travis.yml +0 -6
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +2 -0
  6. data/Rakefile +6 -4
  7. data/gemfiles/rails5.gemfile +4 -2
  8. data/gemfiles/rails6.gemfile +3 -1
  9. data/lib/timely/date.rb +6 -2
  10. data/lib/timely/date_chooser.rb +29 -30
  11. data/lib/timely/date_range.rb +17 -19
  12. data/lib/timely/date_time.rb +3 -1
  13. data/lib/timely/rails/calendar_tag.rb +3 -3
  14. data/lib/timely/rails/date.rb +3 -1
  15. data/lib/timely/rails/date_group.rb +24 -24
  16. data/lib/timely/rails/date_range_validity_module.rb +8 -6
  17. data/lib/timely/rails/date_time.rb +5 -3
  18. data/lib/timely/rails/extensions.rb +12 -37
  19. data/lib/timely/rails/period.rb +14 -12
  20. data/lib/timely/rails/season.rb +14 -33
  21. data/lib/timely/rails/time.rb +7 -3
  22. data/lib/timely/rails.rb +2 -0
  23. data/lib/timely/railtie.rb +2 -0
  24. data/lib/timely/range.rb +4 -2
  25. data/lib/timely/string.rb +4 -2
  26. data/lib/timely/time.rb +7 -3
  27. data/lib/timely/time_since.rb +5 -3
  28. data/lib/timely/trackable_date_set.rb +21 -21
  29. data/lib/timely/version.rb +3 -1
  30. data/lib/timely/week_days.rb +14 -16
  31. data/lib/timely.rb +2 -0
  32. data/rails/init.rb +2 -0
  33. data/spec/calendar_tag_spec.rb +11 -10
  34. data/spec/date_chooser_spec.rb +67 -62
  35. data/spec/date_group_spec.rb +18 -15
  36. data/spec/date_range_spec.rb +29 -19
  37. data/spec/date_spec.rb +3 -1
  38. data/spec/extensions_spec.rb +5 -9
  39. data/spec/rails/date_spec.rb +5 -3
  40. data/spec/rails/date_time_spec.rb +9 -7
  41. data/spec/rails/period_spec.rb +2 -0
  42. data/spec/rails/time_spec.rb +6 -4
  43. data/spec/schema.rb +4 -3
  44. data/spec/season_spec.rb +23 -26
  45. data/spec/spec_helper.rb +3 -1
  46. data/spec/support/coverage_loader.rb +3 -1
  47. data/spec/temporal_patterns_spec.rb +5 -5
  48. data/spec/time_since_spec.rb +6 -4
  49. data/spec/time_spec.rb +6 -4
  50. data/spec/trackable_date_set_spec.rb +20 -18
  51. data/spec/week_days_spec.rb +24 -22
  52. data/timely.gemspec +20 -18
  53. metadata +32 -20
  54. data/spec/string_spec.rb +0 -14
@@ -1,23 +1,29 @@
1
- require "spec_helper"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'spec_helper'
3
4
 
4
5
  RSpec.describe Timely::DateGroup do
5
6
  before do
6
7
  @date_group = Timely::DateGroup.new(
7
- :start_date => '2000-01-01', :end_date => '2000-01-03', :weekdays => %w(1 1 1 1 1 1 1)
8
+ start_date: '2000-01-01', end_date: '2000-01-03', weekdays: %w[1 1 1 1 1 1 1]
8
9
  )
9
10
  end
10
11
 
12
+ it 'is not valid to set nil weekdays' do
13
+ @date_group.weekdays_bit_array = nil
14
+ expect(@date_group).not_to be_valid
15
+ end
16
+
11
17
  it 'should detect overlaps' do
12
18
  expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-01'.to_date))).to be true
13
19
  expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2000-01-01'.to_date, '2000-01-06'.to_date))).to be true
14
20
  expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2001-01-01'.to_date, '2001-01-01'.to_date))).to be false
15
- expect(@date_group.applicable_for_duration?(Timely::DateRange.new('1999-12-29'.to_date, '2000-01-05'.to_date))).to be true
21
+ expect(@date_group.applicable_for_duration?(Timely::DateRange.new('1999-12-29'.to_date, '2000-01-05'.to_date))).to be true
16
22
  end
17
23
 
18
24
  it "should detect overlaps when certain weekdays aren't selected" do
19
25
  @date_group = Timely::DateGroup.create!(
20
- :start_date => '2012-01-01', :end_date => '2012-01-07', :weekdays => %w(1 0 1 0 1 0 1)
26
+ start_date: '2012-01-01', end_date: '2012-01-07', weekdays: %w[1 0 1 0 1 0 1]
21
27
  )
22
28
  # Note: 2012-01-1 is a Sunday
23
29
  expect(@date_group.applicable_for_duration?(Timely::DateRange.new('2012-01-01'.to_date, '2012-01-01'.to_date))).to be true
@@ -27,21 +33,18 @@ RSpec.describe Timely::DateGroup do
27
33
  end
28
34
  end
29
35
 
36
+ RSpec.describe Timely::DateGroup, 'without weekdays' do
37
+ subject { Timely::DateGroup.new(start_date: Date.current, end_date: Date.current) }
38
+ it { is_expected.to be_valid }
39
+ end
30
40
 
31
41
  RSpec.describe 'Timely::DateGroup.for_any_weekdays' do
32
42
  let(:date_range) { ('2019-10-17'.to_date)..('2019-10-18'.to_date) }
33
43
  let(:weekdays_int) { Timely::WeekDays.from_range(date_range).weekdays_int }
34
44
 
35
- let(:special_group) {
36
- Timely::DateGroup.create(start_date: date_range.first, end_date: date_range.last).tap { |date_group|
37
- date_group.update_column(:weekdays_bit_array, nil)
38
- }.reload
39
- }
40
-
41
45
  let!(:date_groups) { [
42
46
  Timely::DateGroup.create(start_date: date_range.first, end_date: date_range.last, weekdays: { thu: true }),
43
47
  Timely::DateGroup.create(start_date: date_range.first, end_date: date_range.last, weekdays: { mon: true }),
44
- special_group,
45
48
  ] }
46
49
 
47
50
  RSpec.shared_examples 'finds expected date groups' do
@@ -61,15 +64,15 @@ RSpec.describe 'Timely::DateGroup.for_any_weekdays' do
61
64
 
62
65
  context '#within_range' do
63
66
  let(:scoped_result) { Timely::DateGroup.within_range(date_range).to_a }
64
- let(:expected_groups) { [ date_groups[0], date_groups[1], date_groups[2] ] }
65
- let(:absent_groups) { [ ] }
67
+ let(:expected_groups) { [date_groups[0], date_groups[1]] }
68
+ let(:absent_groups) { [] }
66
69
  let(:includes_date_groups) { [] }
67
70
  it_behaves_like 'finds expected date groups'
68
71
  end
69
72
 
70
73
  let(:includes_date_groups) { expected_groups }
71
- let(:expected_groups) { [ date_groups[0], date_groups[2] ] }
72
- let(:absent_groups) { [ date_groups[1] ] }
74
+ let(:expected_groups) { [date_groups[0]] }
75
+ let(:absent_groups) { [date_groups[1]] }
73
76
 
74
77
  context '#for_any_weekdays' do
75
78
  let(:scoped_result) { Timely::DateGroup.for_any_weekdays(weekdays_int).to_a }
@@ -1,22 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Timely::DateRange do
4
-
5
- it "should allow initialization with two dates" do
6
+ it 'should allow initialization with two dates' do
6
7
  expect { @date_range = Timely::DateRange.new(Date.today, Date.today + 3) }.to_not raise_error
7
8
  expect(@date_range.start_date).to eq Date.today
8
9
  expect(@date_range.end_date).to eq Date.today + 3
9
10
  expect(@date_range.number_of_nights).to eq 4
10
11
  end
11
12
 
12
- it "should allow initialization with one date" do
13
+ it 'should allow initialization with one date' do
13
14
  expect { @date_range = Timely::DateRange.new(Date.today) }.to_not raise_error
14
15
  expect(@date_range.start_date).to eq Date.today
15
16
  expect(@date_range.end_date).to eq Date.today
16
17
  expect(@date_range.number_of_nights).to eq 1
17
18
  end
18
19
 
19
- it "should allow initialization with a range" do
20
+ it 'should allow initialization with a range' do
20
21
  expect { @date_range = Timely::DateRange.new(Date.today..Date.today + 3) }.to_not raise_error
21
22
  expect(@date_range.start_date).to eq Date.today
22
23
  expect(@date_range.end_date).to eq Date.today + 3
@@ -59,21 +60,30 @@ describe Timely::DateRange do
59
60
  expect(today.last).to eq '2000-01-05'.to_date
60
61
  end
61
62
 
62
- it "should correctly find the interesection between two date ranges" do
63
- @date_range = Timely::DateRange.new("2000-01-03".to_date, "2000-01-06".to_date)
64
- 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)
65
- expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-01".to_date, "2000-01-02".to_date))).to eq []
66
- 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)
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-06".to_date, "2000-01-07".to_date))).to eq ("2000-01-06".to_date.."2000-01-06".to_date)
69
- 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)
70
- 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)
63
+ it 'should correctly find the interesection between two date ranges' do
64
+ @date_range = Timely::DateRange.new('2000-01-03'.to_date, '2000-01-06'.to_date)
65
+ {
66
+ ['2000-01-04'.to_date, '2000-01-07'.to_date] => '2000-01-04'.to_date..'2000-01-06'.to_date,
67
+ ['2000-01-01'.to_date, '2000-01-02'.to_date] => [],
68
+ ['2000-01-01'.to_date, '2000-01-03'.to_date] => '2000-01-03'.to_date..'2000-01-03'.to_date,
69
+ ['2000-01-06'.to_date, '2000-01-07'.to_date] => '2000-01-06'.to_date..'2000-01-06'.to_date,
70
+ ['2000-01-06'.to_date, '2000-01-07'.to_date] => '2000-01-06'.to_date..'2000-01-06'.to_date,
71
+ ['2000-01-04'.to_date, '2000-01-05'.to_date] => '2000-01-04'.to_date..'2000-01-05'.to_date,
72
+ ['2000-01-05'.to_date, '2000-01-05'.to_date] => '2000-01-05'.to_date..'2000-01-05'.to_date
73
+ }.each do |args, result|
74
+ tdr = Timely::DateRange.new(*args)
75
+ expect(@date_range.intersecting_dates(tdr)).to eq(result)
76
+ end
71
77
 
72
- @date_range = Timely::DateRange.new("2000-01-03".to_date, "2000-01-03".to_date)
73
- expect(@date_range.intersecting_dates(Timely::DateRange.new("2000-01-04".to_date, "2000-01-07".to_date))).to eq []
74
- 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)
75
- 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)
76
- 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)
78
+ @date_range = Timely::DateRange.new('2000-01-03'.to_date, '2000-01-03'.to_date)
79
+ {
80
+ ['2000-01-04'.to_date, '2000-01-07'.to_date] => [],
81
+ ['2000-01-01'.to_date, '2000-01-03'.to_date] => '2000-01-03'.to_date..'2000-01-03'.to_date,
82
+ ['2000-01-03'.to_date, '2000-01-05'.to_date] => '2000-01-03'.to_date..'2000-01-03'.to_date,
83
+ ['2000-01-02'.to_date, '2000-01-04'.to_date] => '2000-01-03'.to_date..'2000-01-03'.to_date
84
+ }.each do |args, result|
85
+ tdr = Timely::DateRange.new(*args)
86
+ expect(@date_range.intersecting_dates(tdr)).to eq(result)
87
+ end
77
88
  end
78
-
79
89
  end
data/spec/date_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Date do
@@ -63,7 +65,7 @@ describe Date do
63
65
  end
64
66
 
65
67
  it 'should return the passed-in time on the date' do
66
- @time = Time.now - 12345
68
+ @time = Time.now - 12_345
67
69
  expected = Time.local(@date.year, @date.month, @date.day, @time.hour, @time.min, @time.sec)
68
70
  expect(@date.at_time(@time)).to eq expected
69
71
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'timely/rails/extensions'
3
5
 
@@ -13,20 +15,14 @@ describe Timely::Extensions do
13
15
 
14
16
  it 'should cache boundary start' do
15
17
  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.date_groups.build(start_date: Date.current, end_date: Date.current + 2)
19
+ season.date_groups.build(start_date: Date.current - 1, end_date: Date.current + 1)
18
20
  season.save!
19
21
 
20
22
  o = TimelyExtensionsTestSeasonal.new
21
23
  o.season = season
22
24
  o.save!
23
25
  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
-
26
+ expect(o.boundary_end).to eq Date.current + 2
31
27
  end
32
28
  end
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Date do
4
- let(:date) { Date.parse("2010-01-01") }
6
+ let(:date) { Date.parse('2010-01-01') }
5
7
 
6
- before { Time.zone = ActiveSupport::TimeZone["Adelaide"] }
8
+ before { Time.zone = ActiveSupport::TimeZone['Adelaide'] }
7
9
 
8
10
  subject(:converted) { date.to_time_in_time_zone }
9
11
 
10
- it "should convert to time in time zone" do
12
+ it 'should convert to time in time zone' do
11
13
  expect(converted.year).to eq date.year
12
14
  expect(converted.month).to eq date.month
13
15
  expect(converted.day).to eq date.day
@@ -1,21 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe DateTime do
4
- let(:date_time) { parse_time("2010-01-01 00:00:00") }
6
+ let(:date_time) { parse_time('2010-01-01 00:00:00') }
5
7
 
6
- it "should allow advancing by calendar days" do
8
+ it 'should allow advancing by calendar days' do
7
9
  expect(date_time.advance_considering_calendar(:calendar_days, 10))
8
- .to eq parse_time("2010-01-10 23:59:59")
10
+ .to eq parse_time('2010-01-10 23:59:59')
9
11
  end
10
12
 
11
- it "should allow advancing by calendar months" do
13
+ it 'should allow advancing by calendar months' do
12
14
  expect(date_time.advance_considering_calendar(:calendar_months, 10))
13
- .to eq parse_time("2010-10-31 23:59:59")
15
+ .to eq parse_time('2010-10-31 23:59:59')
14
16
  end
15
17
 
16
- it "should allow advancing by calendar years" do
18
+ it 'should allow advancing by calendar years' do
17
19
  expect(date_time.advance_considering_calendar(:calendar_years, 10))
18
- .to eq parse_time("2019-12-31 23:59:59")
20
+ .to eq parse_time('2019-12-31 23:59:59')
19
21
  end
20
22
 
21
23
  def parse_time(time)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  require 'timely/rails/period'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  TestRailsTime = Class.new(Time) do
@@ -9,7 +11,7 @@ describe TestRailsTime do
9
11
 
10
12
  it 'should be able to set date on a time' do
11
13
  xmas = Date.new(2012, 12, 25)
12
- lunch_time = TestRailsTime.parse("12:00")
14
+ lunch_time = TestRailsTime.parse('12:00')
13
15
  xmas_lunch = lunch_time.on_date(xmas)
14
16
  expect(xmas_lunch.year).to eq 2012
15
17
  expect(xmas_lunch.month).to eq 12
@@ -19,9 +21,9 @@ describe TestRailsTime do
19
21
  expect(xmas_lunch.sec).to eq 0
20
22
  end
21
23
 
22
- it "should allow setting the date part given a date" do
23
- time = TestRailsTime.parse("2010-01-01 09:30:00")
24
- expect(time.on_date(Date.parse("2012-12-31"))).to eq TestRailsTime.zone.parse("2012-12-31 09:30:00")
24
+ it 'should allow setting the date part given a date' do
25
+ time = TestRailsTime.parse('2010-01-01 09:30:00')
26
+ expect(time.on_date(Date.parse('2012-12-31'))).to eq TestRailsTime.zone.parse('2012-12-31 09:30:00')
25
27
  end
26
28
  end
27
29
 
data/spec/schema.rb CHANGED
@@ -1,4 +1,6 @@
1
- ActiveRecord::Schema.define(:version => 1) do
1
+ # frozen_string_literal: true
2
+
3
+ ActiveRecord::Schema.define(version: 1) do
2
4
  create_table :seasonals do |t|
3
5
  t.date :boundary_start, :boundary_end
4
6
  t.integer :season_id
@@ -9,8 +11,7 @@ ActiveRecord::Schema.define(:version => 1) do
9
11
  end
10
12
 
11
13
  create_table :date_groups do |t|
12
- t.integer :season_id, :weekdays_bit_array
14
+ t.integer :season_id, :weekdays_bit_array, null: false, default: Timely::WeekDays::ALL_WEEKDAYS.weekdays_int
13
15
  t.date :start_date, :end_date
14
16
  end
15
17
  end
16
-
data/spec/season_spec.rb CHANGED
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe Timely::Season, "in general" do
5
+ describe Timely::Season, 'in general' do
4
6
  before do
5
7
  # 1st and 3rd Quarter
6
8
  @simple_low_season = Timely::Season.new
7
- @simple_low_season.date_groups.build(:start_date => '2009-01-01'.to_date, :end_date => '2009-03-31'.to_date)
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.date_groups.build(start_date: '2009-01-01'.to_date, end_date: '2009-03-31'.to_date)
10
+ @simple_low_season.date_groups.build(start_date: '2009-07-01'.to_date, end_date: '2009-09-30'.to_date)
9
11
 
10
12
  # 2nd and 4th Quarter
11
13
  @simple_high_season = Timely::Season.new
12
- @simple_high_season.date_groups.build(:start_date => '2009-04-01'.to_date, :end_date => '2009-06-30'.to_date)
13
- @simple_high_season.date_groups.build(:start_date => '2009-10-01'.to_date, :end_date => '2009-12-31'.to_date)
14
+ @simple_high_season.date_groups.build(start_date: '2009-04-01'.to_date, end_date: '2009-06-30'.to_date)
15
+ @simple_high_season.date_groups.build(start_date: '2009-10-01'.to_date, end_date: '2009-12-31'.to_date)
14
16
  end
15
17
 
16
- it "be able to tell if a date is in or out of its season" do
18
+ it 'be able to tell if a date is in or out of its season' do
17
19
  low_season_date = '2009-02-22'.to_date
18
20
  high_season_date = '2009-04-22'.to_date
19
21
 
@@ -24,35 +26,31 @@ describe Timely::Season, "in general" do
24
26
  expect(@simple_high_season.includes_date?(high_season_date)).to be true
25
27
  end
26
28
 
27
- it "should be able to tell the boundary range (the range including the absolute first and last date) of itself" do
29
+ it 'should be able to tell the boundary range (the range including the absolute first and last date) of itself' do
28
30
  expect(@simple_low_season.boundary_range).to eq('2009-01-01'.to_date..'2009-09-30'.to_date)
29
31
  expect(@simple_high_season.boundary_range).to eq('2009-04-01'.to_date..'2009-12-31'.to_date)
30
32
  end
31
- end
32
-
33
-
34
- describe Timely::Season, 'when asked to build season for given dates' do
35
- subject(:season) { Timely::Season.build_season_for(dates) }
36
33
 
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 }
34
+ context 'creating with nested attributes' do
35
+ subject { Timely::Season.new(date_groups_attributes: attrs) }
41
36
 
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)
37
+ context 'with valid attributes' do
38
+ let(:attrs) { [ { 'start_date' => '2019-11-26' } ] }
39
+ it 'accepts nested date groups' do
40
+ expect(subject.date_groups).not_to be_empty
41
+ expect(subject.date_groups.first.start_date).to eq('2019-11-26'.to_date)
42
+ end
46
43
  end
47
- end
48
44
 
49
- context 'when dates are empty' do
50
- let(:dates) { [] }
51
- its(:date_groups) { should be_empty }
45
+ context 'invalid nested date groups' do
46
+ let(:attrs) { [ { 'start_date' => '' } ] }
47
+ it 'rejects nested date groups with nil start date' do
48
+ expect(subject.date_groups).to be_empty
49
+ end
50
+ end
52
51
  end
53
52
  end
54
53
 
55
-
56
54
  # == Schema Information
57
55
  #
58
56
  # Table name: seasons
@@ -62,4 +60,3 @@ end
62
60
  # created_at :datetime
63
61
  # updated_at :datetime
64
62
  #
65
-
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file was generated by the `rspec --init` command. Conventionally, all
2
4
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
5
  # Require this file using `require "spec_helper.rb"` to ensure that it is only
@@ -21,7 +23,7 @@ DB_FILE = 'tmp/test_db'
21
23
  FileUtils.mkdir_p File.dirname(DB_FILE)
22
24
  FileUtils.rm_f DB_FILE
23
25
 
24
- ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => DB_FILE
26
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: DB_FILE
25
27
 
26
28
  load('spec/schema.rb')
27
29
 
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov-rcov'
2
4
  require 'coveralls'
3
5
  require 'coverage/kit'
4
- Coverage::Kit.setup(minimum_coverage: 69.15)
6
+ Coverage::Kit.setup(minimum_coverage: 70.15)
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Timely::TemporalPatterns do
4
-
5
6
  before(:all) do
6
7
  @from = Date.new(2012, 1, 1)
7
8
  @to = Date.new(2013, 4, 1)
8
9
  end
9
10
 
10
- it "should be able to create a basic 1st-of-the-month recurrence pattern" do
11
+ it 'should be able to create a basic 1st-of-the-month recurrence pattern' do
11
12
  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
+ 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
 
14
15
  expect(pattern.match?('01-05-2012'.to_date)).to be true
15
16
  expect(pattern.match?('01-08-2012'.to_date)).to be true
@@ -19,10 +20,9 @@ describe Timely::TemporalPatterns do
19
20
  expect(pattern.match?('01-06-2013'.to_date)).to be false
20
21
  end
21
22
 
22
- it "should only allow a positive duration to be set as the frequency of the pattern" do
23
+ it 'should only allow a positive duration to be set as the frequency of the pattern' do
23
24
  expect { Timely::TemporalPatterns::Frequency.new(2) }.to raise_error(ArgumentError)
24
25
  expect { Timely::TemporalPatterns::Frequency.new(-5.months) }.to raise_error(ArgumentError)
25
26
  expect(Timely::TemporalPatterns::Frequency.new(3.months).to_s).to eq 'every 3 months'
26
27
  end
27
-
28
28
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timely/time_since'
2
4
 
3
5
  require 'timecop'
4
6
 
5
7
  describe Timely::TimeSince do
6
- before {
8
+ before do
7
9
  Timecop.freeze(DateTime.new(2000, 1, 10, 12, 0, 42))
8
- }
10
+ end
9
11
  after { Timecop.return }
10
12
 
11
13
  context '42 seconds ago' do
@@ -17,8 +19,8 @@ describe Timely::TimeSince do
17
19
 
18
20
  context 'a day ago' do
19
21
  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(:seconds_since) { should eq 24 * 60 * 60 }
23
+ its(:minutes_since) { should eq 24 * 60 }
22
24
  its(:hours_since) { should eq 24 }
23
25
  end
24
26
  end
data/spec/time_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  TestTime = Class.new(Time) do
@@ -7,7 +9,7 @@ end
7
9
  describe Time do
8
10
  it 'should be able to set date on a time' do
9
11
  xmas = Date.new(2012, 12, 25)
10
- lunch_time = TestTime.parse("12:00")
12
+ lunch_time = TestTime.parse('12:00')
11
13
  xmas_lunch = lunch_time.on_date(xmas)
12
14
  expect(xmas_lunch.year).to eq 2012
13
15
  expect(xmas_lunch.month).to eq 12
@@ -17,9 +19,9 @@ describe Time do
17
19
  expect(xmas_lunch.sec).to eq 0
18
20
  end
19
21
 
20
- it "should allow setting the date part given a date" do
21
- time = TestTime.parse("2010-01-01 09:30:00")
22
- expect(time.on_date(Date.parse("2012-12-31"))).to eq Time.parse("2012-12-31 09:30:00")
22
+ it 'should allow setting the date part given a date' do
23
+ time = TestTime.parse('2010-01-01 09:30:00')
24
+ expect(time.on_date(Date.parse('2012-12-31'))).to eq Time.parse('2012-12-31 09:30:00')
23
25
  end
24
26
  end
25
27
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Timely::TrackableDateSet, ' tracking 7 days' do
@@ -6,45 +8,45 @@ describe Timely::TrackableDateSet, ' tracking 7 days' do
6
8
  @trackable_date_set = Timely::TrackableDateSet.new(@range)
7
9
  end
8
10
 
9
- it "should start on the first date" do
11
+ it 'should start on the first date' do
10
12
  expect(@trackable_date_set.start_date).to eq Date.today
11
13
  end
12
14
 
13
- it "should end on the last date" do
15
+ it 'should end on the last date' do
14
16
  expect(@trackable_date_set.end_date).to eq Date.today + 6
15
17
  end
16
18
 
17
- it "should have the 7 days set" do
18
- expect(get_dates).to eq @range.to_a
19
+ it 'should have the 7 days set' do
20
+ expect(dates).to eq @range.to_a
19
21
  expect(@trackable_date_set.duration).to eq 7
20
22
  expect(@trackable_date_set.number_of_nights).to eq 7
21
23
  end
22
24
 
23
- it "should have all the 7 days to do" do
24
- expect(get_dates_to_do).to eq @range.to_a
25
+ it 'should have all the 7 days to do' do
26
+ expect(dates_to_do).to eq @range.to_a
25
27
  should_not_have_done(@range.to_a)
26
28
  end
27
29
 
28
- it "should have only the last 6 days to do when we set_done! the first one" do
30
+ it 'should have only the last 6 days to do when we set_done! the first one' do
29
31
  @trackable_date_set.set_date_done!(Date.today)
30
- expect(get_dates_to_do).to eq ((Date.today + 1)..(Date.today + 6)).to_a
32
+ expect(dates_to_do).to eq(((Date.today + 1)..(Date.today + 6)).to_a)
31
33
 
32
34
  should_not_have_done(@range.to_a - [Date.today])
33
35
  should_have_done([Date.today])
34
36
  end
35
37
 
36
- it "should have the first, and last three left to do if we set 2nd, 3rd & 4th to be done" do
38
+ it 'should have the first, and last three left to do if we set 2nd, 3rd & 4th to be done' do
37
39
  dates_to_be_done = [Date.today + 1, Date.today + 2, Date.today + 3]
38
40
  @trackable_date_set.set_dates_done!(dates_to_be_done)
39
41
 
40
- expect(get_dates_to_do).to eq [Date.today, Date.today + 4, Date.today + 5, Date.today + 6]
42
+ expect(dates_to_do).to eq [Date.today, Date.today + 4, Date.today + 5, Date.today + 6]
41
43
  should_not_have_done(@range.to_a - dates_to_be_done)
42
44
  should_have_done(dates_to_be_done)
43
45
  end
44
46
 
45
- it "should have none left to do when set_all_done!" do
47
+ it 'should have none left to do when set_all_done!' do
46
48
  @trackable_date_set.set_all_done!
47
- expect(get_dates_to_do).to eq []
49
+ expect(dates_to_do).to eq []
48
50
  should_have_done(@range.to_a)
49
51
  end
50
52
 
@@ -59,22 +61,22 @@ describe Timely::TrackableDateSet, ' tracking 7 days' do
59
61
  end
60
62
 
61
63
  def should_have_done(dates)
62
- dates.each{|date| expect(@trackable_date_set.has_done?(date)).to be true }
64
+ dates.each { |date| expect(@trackable_date_set.done_dates?(date)).to be true }
63
65
  end
64
66
 
65
67
  def should_not_have_done(dates)
66
- dates.each{|date| expect(@trackable_date_set.has_done?(date)).to be false }
68
+ dates.each { |date| expect(@trackable_date_set.done_dates?(date)).to be false }
67
69
  end
68
70
 
69
- def get_dates
71
+ def dates
70
72
  contained_dates = []
71
- @trackable_date_set.each_date{|date| contained_dates << date}
73
+ @trackable_date_set.each_date { |date| contained_dates << date }
72
74
  contained_dates
73
75
  end
74
76
 
75
- def get_dates_to_do
77
+ def dates_to_do
76
78
  contained_dates = []
77
- @trackable_date_set.each_date_to_do{|date| contained_dates << date}
79
+ @trackable_date_set.each_date_to_do { |date| contained_dates << date }
78
80
  contained_dates
79
81
  end
80
82
  end