by_star 4.0.0 → 4.0.1

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/mysql.yml +92 -92
  3. data/.github/workflows/postgresql.yml +99 -99
  4. data/.gitignore +6 -6
  5. data/.travis.yml +92 -92
  6. data/CHANGELOG.md +63 -59
  7. data/Gemfile +18 -18
  8. data/MIT-LICENSE +20 -20
  9. data/README.md +616 -616
  10. data/Rakefile +18 -18
  11. data/UPGRADING +4 -4
  12. data/by_star.gemspec +34 -34
  13. data/cleaner.rb +24 -24
  14. data/lib/by_star/base.rb +69 -69
  15. data/lib/by_star/between.rb +185 -185
  16. data/lib/by_star/directional.rb +35 -35
  17. data/lib/by_star/kernel/date.rb +41 -41
  18. data/lib/by_star/kernel/in_time_zone.rb +20 -20
  19. data/lib/by_star/kernel/time.rb +41 -41
  20. data/lib/by_star/normalization.rb +156 -156
  21. data/lib/by_star/orm/active_record/by_star.rb +75 -75
  22. data/lib/by_star/orm/mongoid/by_star.rb +90 -90
  23. data/lib/by_star/orm/mongoid/reorder.rb +23 -23
  24. data/lib/by_star/version.rb +3 -3
  25. data/lib/by_star.rb +18 -18
  26. data/spec/database.yml +15 -15
  27. data/spec/fixtures/active_record/models.rb +12 -12
  28. data/spec/fixtures/active_record/schema.rb +19 -19
  29. data/spec/fixtures/mongoid/models.rb +31 -31
  30. data/spec/fixtures/shared/seeds.rb +36 -36
  31. data/spec/gemfiles/Gemfile.rails +5 -5
  32. data/spec/gemfiles/Gemfile.rails32 +7 -7
  33. data/spec/gemfiles/Gemfile.rails40 +7 -7
  34. data/spec/gemfiles/Gemfile.rails41 +7 -7
  35. data/spec/gemfiles/Gemfile.rails42 +7 -7
  36. data/spec/gemfiles/Gemfile.rails50 +7 -7
  37. data/spec/gemfiles/Gemfile.rails51 +7 -7
  38. data/spec/gemfiles/Gemfile.rails52 +7 -7
  39. data/spec/gemfiles/Gemfile.rails60 +7 -7
  40. data/spec/gemfiles/Gemfile.rails61 +7 -7
  41. data/spec/integration/active_record/active_record_spec.rb +41 -41
  42. data/spec/integration/mongoid/mongoid_spec.rb +39 -39
  43. data/spec/integration/shared/at_time.rb +53 -53
  44. data/spec/integration/shared/between_dates.rb +99 -99
  45. data/spec/integration/shared/between_times.rb +99 -99
  46. data/spec/integration/shared/by_calendar_month.rb +55 -55
  47. data/spec/integration/shared/by_cweek.rb +54 -54
  48. data/spec/integration/shared/by_day.rb +120 -120
  49. data/spec/integration/shared/by_direction.rb +126 -126
  50. data/spec/integration/shared/by_fortnight.rb +48 -48
  51. data/spec/integration/shared/by_month.rb +50 -50
  52. data/spec/integration/shared/by_quarter.rb +49 -49
  53. data/spec/integration/shared/by_week.rb +54 -54
  54. data/spec/integration/shared/by_weekend.rb +49 -49
  55. data/spec/integration/shared/by_year.rb +48 -48
  56. data/spec/integration/shared/index_scope_parameter.rb +111 -111
  57. data/spec/integration/shared/offset_parameter.rb +32 -32
  58. data/spec/integration/shared/order_parameter.rb +36 -36
  59. data/spec/integration/shared/relative.rb +174 -174
  60. data/spec/spec_helper.rb +33 -33
  61. data/spec/unit/kernel_date_spec.rb +113 -113
  62. data/spec/unit/kernel_time_spec.rb +57 -57
  63. data/spec/unit/normalization_spec.rb +384 -384
  64. data/tmp/.gitignore +1 -1
  65. metadata +3 -3
@@ -1,99 +1,99 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for 'between_times' do
4
-
5
- describe '#between_times' do
6
- subject { Post.between_times(Time.zone.parse('2014-01-01'), Time.zone.parse('2014-01-06')) }
7
-
8
- if testing_active_record?
9
- it { is_expected.to be_a(ActiveRecord::Relation) }
10
- else testing_mongoid?
11
- it { is_expected.to be_a(Mongoid::Criteria) }
12
- end
13
-
14
- it { expect(subject.count).to eql(3) }
15
-
16
- context 'one-sided query' do
17
-
18
- context 'point query' do
19
-
20
- context 'only start time' do
21
- subject { Post.between_times(Time.zone.parse('2014-01-01'), nil) }
22
- it { expect(subject.count).to eql(12) }
23
- end
24
-
25
- context 'only end time' do
26
- subject { Post.between_times(nil, Time.zone.parse('2014-01-01')) }
27
- it { expect(subject.count).to eql(10) }
28
-
29
- context 'neither start nor end time' do
30
- subject { Post.between_times(nil, nil) }
31
- it { expect(subject.count).to eql(22) }
32
- end
33
- end
34
- end
35
-
36
- context 'timespan loose query' do
37
-
38
- context 'only start time' do
39
- subject { Event.between_times(Time.zone.parse('2014-01-01'), nil, strict: false) }
40
- it { expect(subject.count).to eql(17) }
41
- end
42
-
43
- context 'only end time' do
44
- subject { Event.between_times(nil, Time.zone.parse('2014-01-01'), strict: false) }
45
- it { expect(subject.count).to eql(13) }
46
-
47
- context 'neither start nor end time' do
48
- subject { Event.between_times(nil, nil) }
49
- it { expect(subject.count).to eql(30) }
50
- end
51
- end
52
- end
53
-
54
- context 'timespan strict query' do
55
-
56
- context 'only start time' do
57
- subject { Event.between_times(Time.zone.parse('2014-01-01'), nil) }
58
- it { expect(subject.count).to eql(17) }
59
- end
60
-
61
- context 'only end time' do
62
- subject { Event.between_times(nil, Time.zone.parse('2014-01-01')) }
63
- it { expect(subject.count).to eql(13) }
64
-
65
- context 'neither start nor end time' do
66
- subject { Event.between_times(nil, nil) }
67
- it { expect(subject.count).to eql(30) }
68
- end
69
- end
70
- end
71
- end
72
-
73
- context 'two-sided query' do
74
- context 'DST starts (Sydney)', sydney: true do
75
- context 'day before' do
76
- subject { Event.between_times(Date.parse('2020-04-04'), Date.parse('2020-04-04'), offset: 5.hours) }
77
- it { expect(subject.count).to eql(3) }
78
- end
79
-
80
- context 'same day' do
81
- subject { Event.between_times(Date.parse('2020-04-05'), Date.parse('2020-04-05'), offset: 5.hours) }
82
- it { expect(subject.count).to eql(1) }
83
- end
84
- end
85
-
86
- context 'when DST ends (Sydney)', sydney: true do
87
- context 'day before' do
88
- subject { Event.between_times(Date.parse('2020-10-03'), Date.parse('2020-10-03'), offset: 5.hours) }
89
- it { expect(subject.count).to eql(1) }
90
- end
91
-
92
- context 'same day' do
93
- subject { Event.between_times(Date.parse('2020-10-04'), Date.parse('2020-10-04'), offset: 5.hours) }
94
- it { expect(subject.count).to eql(3) }
95
- end
96
- end
97
- end
98
- end
99
- end
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'between_times' do
4
+
5
+ describe '#between_times' do
6
+ subject { Post.between_times(Time.zone.parse('2014-01-01'), Time.zone.parse('2014-01-06')) }
7
+
8
+ if testing_active_record?
9
+ it { is_expected.to be_a(ActiveRecord::Relation) }
10
+ else testing_mongoid?
11
+ it { is_expected.to be_a(Mongoid::Criteria) }
12
+ end
13
+
14
+ it { expect(subject.count).to eql(3) }
15
+
16
+ context 'one-sided query' do
17
+
18
+ context 'point query' do
19
+
20
+ context 'only start time' do
21
+ subject { Post.between_times(Time.zone.parse('2014-01-01'), nil) }
22
+ it { expect(subject.count).to eql(12) }
23
+ end
24
+
25
+ context 'only end time' do
26
+ subject { Post.between_times(nil, Time.zone.parse('2014-01-01')) }
27
+ it { expect(subject.count).to eql(10) }
28
+
29
+ context 'neither start nor end time' do
30
+ subject { Post.between_times(nil, nil) }
31
+ it { expect(subject.count).to eql(22) }
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'timespan loose query' do
37
+
38
+ context 'only start time' do
39
+ subject { Event.between_times(Time.zone.parse('2014-01-01'), nil, strict: false) }
40
+ it { expect(subject.count).to eql(17) }
41
+ end
42
+
43
+ context 'only end time' do
44
+ subject { Event.between_times(nil, Time.zone.parse('2014-01-01'), strict: false) }
45
+ it { expect(subject.count).to eql(13) }
46
+
47
+ context 'neither start nor end time' do
48
+ subject { Event.between_times(nil, nil) }
49
+ it { expect(subject.count).to eql(30) }
50
+ end
51
+ end
52
+ end
53
+
54
+ context 'timespan strict query' do
55
+
56
+ context 'only start time' do
57
+ subject { Event.between_times(Time.zone.parse('2014-01-01'), nil) }
58
+ it { expect(subject.count).to eql(17) }
59
+ end
60
+
61
+ context 'only end time' do
62
+ subject { Event.between_times(nil, Time.zone.parse('2014-01-01')) }
63
+ it { expect(subject.count).to eql(13) }
64
+
65
+ context 'neither start nor end time' do
66
+ subject { Event.between_times(nil, nil) }
67
+ it { expect(subject.count).to eql(30) }
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'two-sided query' do
74
+ context 'DST starts (Sydney)', sydney: true do
75
+ context 'day before' do
76
+ subject { Event.between_times(Date.parse('2020-04-04'), Date.parse('2020-04-04'), offset: 5.hours) }
77
+ it { expect(subject.count).to eql(3) }
78
+ end
79
+
80
+ context 'same day' do
81
+ subject { Event.between_times(Date.parse('2020-04-05'), Date.parse('2020-04-05'), offset: 5.hours) }
82
+ it { expect(subject.count).to eql(1) }
83
+ end
84
+ end
85
+
86
+ context 'when DST ends (Sydney)', sydney: true do
87
+ context 'day before' do
88
+ subject { Event.between_times(Date.parse('2020-10-03'), Date.parse('2020-10-03'), offset: 5.hours) }
89
+ it { expect(subject.count).to eql(1) }
90
+ end
91
+
92
+ context 'same day' do
93
+ subject { Event.between_times(Date.parse('2020-10-04'), Date.parse('2020-10-04'), offset: 5.hours) }
94
+ it { expect(subject.count).to eql(3) }
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -1,55 +1,55 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for 'by calendar month' do
4
-
5
- describe '#by_calendar_month' do
6
-
7
- context 'point-in-time' do
8
- subject { Post.by_calendar_month('Feb') }
9
- it { expect(subject.count).to eql(3) }
10
- end
11
-
12
- context 'timespan' do
13
- subject { Event.by_calendar_month(1) }
14
- it { expect(subject.count).to eql(10) }
15
- end
16
-
17
- context 'timespan strict' do
18
- subject { Event.by_calendar_month(Date.parse('2014-02-01'), strict: true) }
19
- it { expect(subject.count).to eql(2) }
20
- end
21
-
22
- context 'with :year option' do
23
-
24
- context 'point-in-time' do
25
- subject { Post.by_calendar_month(12, year: 2013) }
26
- it { expect(subject.count).to eql(12) }
27
- end
28
-
29
- context 'timespan' do
30
- subject { Event.by_calendar_month('December', year: 2013) }
31
- it { expect(subject.count).to eql(13) }
32
- end
33
-
34
- context 'timespan strict' do
35
- subject { Event.by_calendar_month('Dec', year: 2013, strict: true) }
36
- it { expect(subject.count).to eql(9) }
37
- end
38
- end
39
-
40
- it 'should raise an error when given an invalid argument' do
41
- expect{ Post.by_calendar_month(0) }.to raise_error(ByStar::ParseError, 'Month must be a number between 1 and 12 or a month name')
42
- expect{ Post.by_calendar_month(13) }.to raise_error(ByStar::ParseError, 'Month must be a number between 1 and 12 or a month name')
43
- expect{ Post.by_calendar_month('foobar') }.to raise_error(ByStar::ParseError, 'Month must be a number between 1 and 12 or a month name')
44
- end
45
-
46
- it 'should be able to use an alternative field' do
47
- expect(Event.by_calendar_month(field: 'end_time').count).to eql(9)
48
- end
49
-
50
- context ':start_day option' do
51
- subject { Post.by_calendar_month(1, start_day: :wednesday) }
52
- it{ expect(subject.count).to eql(7) }
53
- end
54
- end
55
- end
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'by calendar month' do
4
+
5
+ describe '#by_calendar_month' do
6
+
7
+ context 'point-in-time' do
8
+ subject { Post.by_calendar_month('Feb') }
9
+ it { expect(subject.count).to eql(3) }
10
+ end
11
+
12
+ context 'timespan' do
13
+ subject { Event.by_calendar_month(1) }
14
+ it { expect(subject.count).to eql(10) }
15
+ end
16
+
17
+ context 'timespan strict' do
18
+ subject { Event.by_calendar_month(Date.parse('2014-02-01'), strict: true) }
19
+ it { expect(subject.count).to eql(2) }
20
+ end
21
+
22
+ context 'with :year option' do
23
+
24
+ context 'point-in-time' do
25
+ subject { Post.by_calendar_month(12, year: 2013) }
26
+ it { expect(subject.count).to eql(12) }
27
+ end
28
+
29
+ context 'timespan' do
30
+ subject { Event.by_calendar_month('December', year: 2013) }
31
+ it { expect(subject.count).to eql(13) }
32
+ end
33
+
34
+ context 'timespan strict' do
35
+ subject { Event.by_calendar_month('Dec', year: 2013, strict: true) }
36
+ it { expect(subject.count).to eql(9) }
37
+ end
38
+ end
39
+
40
+ it 'should raise an error when given an invalid argument' do
41
+ expect{ Post.by_calendar_month(0) }.to raise_error(ByStar::ParseError, 'Month must be a number between 1 and 12 or a month name')
42
+ expect{ Post.by_calendar_month(13) }.to raise_error(ByStar::ParseError, 'Month must be a number between 1 and 12 or a month name')
43
+ expect{ Post.by_calendar_month('foobar') }.to raise_error(ByStar::ParseError, 'Month must be a number between 1 and 12 or a month name')
44
+ end
45
+
46
+ it 'should be able to use an alternative field' do
47
+ expect(Event.by_calendar_month(field: 'end_time').count).to eql(9)
48
+ end
49
+
50
+ context ':start_day option' do
51
+ subject { Post.by_calendar_month(1, start_day: :wednesday) }
52
+ it{ expect(subject.count).to eql(7) }
53
+ end
54
+ end
55
+ end
@@ -1,54 +1,54 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for 'by cweek' do
4
-
5
- describe '#by_cweek' do
6
-
7
- context 'point-in-time' do
8
- subject { Post.by_cweek('2014-01-02') }
9
- it { expect(subject.count).to eql(4) }
10
- end
11
-
12
- context 'timespan' do
13
- subject { Event.by_cweek(1) }
14
- it { expect(subject.count).to eql(7) }
15
- end
16
-
17
- context 'timespan strict' do
18
- subject { Event.by_cweek(Date.parse('2014-01-01'), strict: true) }
19
- it { expect(subject.count).to eql(0) }
20
- end
21
-
22
- context 'with :year option' do
23
-
24
- context 'point-in-time' do
25
- subject { Post.by_cweek(53, year: 2013) }
26
- it { expect(subject.count).to eql(4) }
27
- end
28
-
29
- context 'timespan' do
30
- subject { Event.by_cweek(53, year: 2013) }
31
- it { expect(subject.count).to eql(7) }
32
- end
33
-
34
- context 'timespan strict' do
35
- subject { Event.by_cweek(53, year: 2013, strict: true) }
36
- it { expect(subject.count).to eql(0) }
37
- end
38
- end
39
-
40
- it 'should raise an error when given an invalid argument' do
41
- expect { Post.by_cweek(0) }.to raise_error(ByStar::ParseError, 'cweek number must be between 1 and 53')
42
- expect { Post.by_cweek(54) }.to raise_error(ByStar::ParseError, 'cweek number must be between 1 and 53')
43
- end
44
-
45
- it 'should be able to use an alternative field' do
46
- expect(Event.by_cweek(field: 'end_time').count).to eq 3
47
- end
48
-
49
- context ':start_day option' do
50
- subject { Post.by_cweek('2014-01-02', start_day: :thursday) }
51
- it { expect(subject.count).to eql(1) }
52
- end
53
- end
54
- end
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'by cweek' do
4
+
5
+ describe '#by_cweek' do
6
+
7
+ context 'point-in-time' do
8
+ subject { Post.by_cweek('2014-01-02') }
9
+ it { expect(subject.count).to eql(4) }
10
+ end
11
+
12
+ context 'timespan' do
13
+ subject { Event.by_cweek(1) }
14
+ it { expect(subject.count).to eql(7) }
15
+ end
16
+
17
+ context 'timespan strict' do
18
+ subject { Event.by_cweek(Date.parse('2014-01-01'), strict: true) }
19
+ it { expect(subject.count).to eql(0) }
20
+ end
21
+
22
+ context 'with :year option' do
23
+
24
+ context 'point-in-time' do
25
+ subject { Post.by_cweek(53, year: 2013) }
26
+ it { expect(subject.count).to eql(4) }
27
+ end
28
+
29
+ context 'timespan' do
30
+ subject { Event.by_cweek(53, year: 2013) }
31
+ it { expect(subject.count).to eql(7) }
32
+ end
33
+
34
+ context 'timespan strict' do
35
+ subject { Event.by_cweek(53, year: 2013, strict: true) }
36
+ it { expect(subject.count).to eql(0) }
37
+ end
38
+ end
39
+
40
+ it 'should raise an error when given an invalid argument' do
41
+ expect { Post.by_cweek(0) }.to raise_error(ByStar::ParseError, 'cweek number must be between 1 and 53')
42
+ expect { Post.by_cweek(54) }.to raise_error(ByStar::ParseError, 'cweek number must be between 1 and 53')
43
+ end
44
+
45
+ it 'should be able to use an alternative field' do
46
+ expect(Event.by_cweek(field: 'end_time').count).to eq 3
47
+ end
48
+
49
+ context ':start_day option' do
50
+ subject { Post.by_cweek('2014-01-02', start_day: :thursday) }
51
+ it { expect(subject.count).to eql(1) }
52
+ end
53
+ end
54
+ end
@@ -1,120 +1,120 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for 'by day' do
4
-
5
- describe '#by_day' do
6
-
7
- context 'point-in-time' do
8
- it { expect(Post.by_day('2014-01-01').count).to eql(2) }
9
- end
10
-
11
- context 'timespan' do
12
- it { expect(Event.by_day(Time.zone.parse '2014-01-01').count).to eql(5) }
13
- end
14
-
15
- context 'timespan strict' do
16
- it { expect(Event.by_day(Date.parse('2014-01-01'), strict: true).count).to eql(0) }
17
- end
18
-
19
- it 'should be able to use an alternative field' do
20
- expect(Event.by_day(field: 'end_time').count).to eql(0)
21
- end
22
-
23
- it 'should support :offset option' do
24
- expect(Post.by_day('2014-01-01', offset: -16.hours).count).to eq(1)
25
- end
26
-
27
- context 'when DST starts (Sydney)', sydney: true do
28
- context 'day before' do
29
- subject { Event.by_day('2020-04-04', offset: 5.hours) }
30
- it { expect(subject.count).to eq(3) }
31
- end
32
-
33
- context 'same day' do
34
- subject { Event.by_day('2020-04-05', offset: 5.hours) }
35
- it { expect(subject.count).to eq(1) }
36
- end
37
- end
38
-
39
- context 'when DST ends (Sydney)', sydney: true do
40
- context 'day before' do
41
- subject { Event.by_day('2020-10-03', offset: 5.hours) }
42
- it { expect(subject.count).to eq(1) }
43
- end
44
-
45
- context 'same day' do
46
- subject { Event.by_day('2020-10-04', offset: 5.hours) }
47
- it { expect(subject.count).to eq(3) }
48
- end
49
- end
50
- end
51
-
52
- describe '#today' do # 2014-01-01
53
-
54
- context 'point-in-time' do
55
- it { expect(Post.today.count).to eql(2) }
56
- end
57
-
58
- context 'timespan' do
59
- it { expect(Event.today.count).to eql(5) }
60
- end
61
-
62
- context 'timespan strict' do
63
- it { expect(Event.today(strict: true).count).to eql(0) }
64
- end
65
-
66
- it 'should be able to use an alternative field' do
67
- expect(Event.today(field: 'created_at').count).to eql(2)
68
- end
69
-
70
- it 'should support :offset option' do
71
- expect(Post.today(offset: -24.hours).count).to eql(1)
72
- end
73
- end
74
-
75
- describe '#yesterday' do # 2013-12-31
76
-
77
- context 'point-in-time' do
78
- it { expect(Post.yesterday.count).to eql(1) }
79
- end
80
-
81
- context 'timespan' do
82
- it { expect(Event.yesterday.count).to eql(5) }
83
- end
84
-
85
- context 'timespan strict' do
86
- it { expect(Event.yesterday(strict: true).count).to eql(0) }
87
- end
88
-
89
- it 'should be able to use an alternative field' do
90
- expect(Event.yesterday(field: 'created_at').count).to eql(1)
91
- end
92
-
93
- it 'should support :offset option' do
94
- expect(Post.yesterday(offset: 24.hours).count).to eql(2)
95
- end
96
- end
97
-
98
- describe '#tomorrow' do # 2014-01-02
99
-
100
- context 'point-in-time' do
101
- it { expect(Post.tomorrow.count).to eql(0) }
102
- end
103
-
104
- context 'timespan' do
105
- it { expect(Event.tomorrow.count).to eql(5) }
106
- end
107
-
108
- context 'timespan strict' do
109
- it { expect(Event.tomorrow(strict: true).count).to eql(0) }
110
- end
111
-
112
- it 'should be able to use an alternative field' do
113
- expect(Event.tomorrow(field: 'created_at').count).to eql(0)
114
- end
115
-
116
- it 'should support :offset option' do
117
- expect(Post.tomorrow(offset: -24.hours).count).to eql(2)
118
- end
119
- end
120
- end
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'by day' do
4
+
5
+ describe '#by_day' do
6
+
7
+ context 'point-in-time' do
8
+ it { expect(Post.by_day('2014-01-01').count).to eql(2) }
9
+ end
10
+
11
+ context 'timespan' do
12
+ it { expect(Event.by_day(Time.zone.parse '2014-01-01').count).to eql(5) }
13
+ end
14
+
15
+ context 'timespan strict' do
16
+ it { expect(Event.by_day(Date.parse('2014-01-01'), strict: true).count).to eql(0) }
17
+ end
18
+
19
+ it 'should be able to use an alternative field' do
20
+ expect(Event.by_day(field: 'end_time').count).to eql(0)
21
+ end
22
+
23
+ it 'should support :offset option' do
24
+ expect(Post.by_day('2014-01-01', offset: -16.hours).count).to eq(1)
25
+ end
26
+
27
+ context 'when DST starts (Sydney)', sydney: true do
28
+ context 'day before' do
29
+ subject { Event.by_day('2020-04-04', offset: 5.hours) }
30
+ it { expect(subject.count).to eq(3) }
31
+ end
32
+
33
+ context 'same day' do
34
+ subject { Event.by_day('2020-04-05', offset: 5.hours) }
35
+ it { expect(subject.count).to eq(1) }
36
+ end
37
+ end
38
+
39
+ context 'when DST ends (Sydney)', sydney: true do
40
+ context 'day before' do
41
+ subject { Event.by_day('2020-10-03', offset: 5.hours) }
42
+ it { expect(subject.count).to eq(1) }
43
+ end
44
+
45
+ context 'same day' do
46
+ subject { Event.by_day('2020-10-04', offset: 5.hours) }
47
+ it { expect(subject.count).to eq(3) }
48
+ end
49
+ end
50
+ end
51
+
52
+ describe '#today' do # 2014-01-01
53
+
54
+ context 'point-in-time' do
55
+ it { expect(Post.today.count).to eql(2) }
56
+ end
57
+
58
+ context 'timespan' do
59
+ it { expect(Event.today.count).to eql(5) }
60
+ end
61
+
62
+ context 'timespan strict' do
63
+ it { expect(Event.today(strict: true).count).to eql(0) }
64
+ end
65
+
66
+ it 'should be able to use an alternative field' do
67
+ expect(Event.today(field: 'created_at').count).to eql(2)
68
+ end
69
+
70
+ it 'should support :offset option' do
71
+ expect(Post.today(offset: -24.hours).count).to eql(1)
72
+ end
73
+ end
74
+
75
+ describe '#yesterday' do # 2013-12-31
76
+
77
+ context 'point-in-time' do
78
+ it { expect(Post.yesterday.count).to eql(1) }
79
+ end
80
+
81
+ context 'timespan' do
82
+ it { expect(Event.yesterday.count).to eql(5) }
83
+ end
84
+
85
+ context 'timespan strict' do
86
+ it { expect(Event.yesterday(strict: true).count).to eql(0) }
87
+ end
88
+
89
+ it 'should be able to use an alternative field' do
90
+ expect(Event.yesterday(field: 'created_at').count).to eql(1)
91
+ end
92
+
93
+ it 'should support :offset option' do
94
+ expect(Post.yesterday(offset: 24.hours).count).to eql(2)
95
+ end
96
+ end
97
+
98
+ describe '#tomorrow' do # 2014-01-02
99
+
100
+ context 'point-in-time' do
101
+ it { expect(Post.tomorrow.count).to eql(0) }
102
+ end
103
+
104
+ context 'timespan' do
105
+ it { expect(Event.tomorrow.count).to eql(5) }
106
+ end
107
+
108
+ context 'timespan strict' do
109
+ it { expect(Event.tomorrow(strict: true).count).to eql(0) }
110
+ end
111
+
112
+ it 'should be able to use an alternative field' do
113
+ expect(Event.tomorrow(field: 'created_at').count).to eql(0)
114
+ end
115
+
116
+ it 'should support :offset option' do
117
+ expect(Post.tomorrow(offset: -24.hours).count).to eql(2)
118
+ end
119
+ end
120
+ end