by_star 2.2.0.rc1 → 2.2.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.
@@ -6,18 +6,38 @@ shared_examples_for 'by direction' do
6
6
 
7
7
  context 'point-in-time' do
8
8
  subject { Post.before(Date.parse '2014-01-05') }
9
- its(:count){ should eq 3 }
9
+ its(:count){ should eq 12 }
10
10
  end
11
11
 
12
12
  context 'timespan' do
13
13
  subject { Event.before(Time.parse '2014-01-05') }
14
- its(:count){ should eq 4 }
14
+ its(:count){ should eq 13 }
15
15
  end
16
16
 
17
17
  context 'timespan strict' do
18
18
  subject { Event.before('2014-01-05', strict: true) }
19
+ its(:count){ should eq 13 }
20
+ end
21
+
22
+ context 'alternative field' do
23
+ subject { Event.before('2014-01-05', field: 'created_at') }
24
+ its(:count){ should eq 12 }
25
+ end
26
+
27
+ context 'with default scope' do
28
+ subject { Appointment.before('2014-01-05', field: 'created_at') }
19
29
  its(:count){ should eq 4 }
20
30
  end
31
+
32
+ context 'with scope as a query criteria' do
33
+ subject { Post.before('2014-01-05', field: 'created_at', scope: Post.where(day_of_month: 5)) }
34
+ its(:count){ should eq 1 }
35
+ end
36
+
37
+ context 'with scope as a proc' do
38
+ subject { Post.before('2014-01-05', field: 'created_at', scope: ->{ where(day_of_month: 5) }) }
39
+ its(:count){ should eq 1 }
40
+ end
21
41
  end
22
42
 
23
43
  describe '#after' do
@@ -36,6 +56,26 @@ shared_examples_for 'by direction' do
36
56
  subject { Event.after('2014-01-05', strict: true) }
37
57
  its(:count){ should eq 9 }
38
58
  end
59
+
60
+ context 'alternative field' do
61
+ subject { Event.after('2014-01-05', field: 'created_at') }
62
+ its(:count){ should eq 10 }
63
+ end
64
+
65
+ context 'with default scope' do
66
+ subject { Appointment.after('2014-01-05', field: 'created_at') }
67
+ its(:count){ should eq 3 }
68
+ end
69
+
70
+ context 'with scope as a query criteria' do
71
+ subject { Post.after('2014-01-05', field: 'created_at', scope: Post.where(day_of_month: 5)) }
72
+ its(:count){ should eq 1 }
73
+ end
74
+
75
+ context 'with scope as a proc' do
76
+ subject { Post.after('2014-01-05', field: 'created_at', scope: ->{ where(day_of_month: 5) }) }
77
+ its(:count){ should eq 1 }
78
+ end
39
79
  end
40
80
 
41
81
  describe '#previous and #next' do
@@ -51,5 +91,24 @@ shared_examples_for 'by direction' do
51
91
  it{ subject.previous.start_time.should eq Time.zone.parse('2013-12-31 17:00:00') }
52
92
  it{ subject.next.start_time.should eq Time.zone.parse('2014-01-07 17:00:00') }
53
93
  end
94
+
95
+ context 'with default scope' do
96
+ subject { Appointment.where(created_at: Time.zone.parse('2014-01-05 17:00:00')).first }
97
+ it{ subject.previous.created_at.should eq Time.zone.parse('2014-01-01 17:00:00') }
98
+ it{ subject.next.created_at.should eq Time.zone.parse('2014-02-01 17:00:00') }
99
+ end
100
+
101
+ context 'with scope as a query criteria' do
102
+ subject { Post.where(created_at: Time.zone.parse('2014-01-05 17:00:00')).first }
103
+ it{ subject.previous({ scope: Post.where(day_of_month: 5) }).created_at.should eq Time.zone.parse('2013-12-05 17:00:00') }
104
+ it{ subject.next({ scope: Post.where(day_of_month: 1) }).created_at.should eq Time.zone.parse('2014-02-01 17:00:00') }
105
+ end
106
+
107
+ context 'with scope as a proc' do
108
+ subject { Post.where(created_at: Time.zone.parse('2014-01-05 17:00:00')).first }
109
+ it{ subject.previous({ scope: Proc.new{ where(day_of_month: 5) } }).created_at.should eq Time.zone.parse('2013-12-05 17:00:00') }
110
+ it{ subject.next({ scope: ->{ where(day_of_month: 1) } }).created_at.should eq Time.zone.parse('2014-02-01 17:00:00') }
111
+ it{ subject.next({ scope: ->(klass){ klass.where(day_of_month: 1) } }).created_at.should eq Time.zone.parse('2014-02-01 17:00:00') }
112
+ end
54
113
  end
55
114
  end
@@ -11,7 +11,7 @@ shared_examples_for 'by fortnight' do
11
11
 
12
12
  context 'timespan' do
13
13
  subject { Event.by_fortnight(0) }
14
- its(:count){ should eq 6 }
14
+ its(:count){ should eq 7 }
15
15
  end
16
16
 
17
17
  context 'timespan strict' do
@@ -28,7 +28,7 @@ shared_examples_for 'by fortnight' do
28
28
 
29
29
  context 'timespan' do
30
30
  subject { Event.by_fortnight(26, year: 2013) }
31
- its(:count){ should eq 6 }
31
+ its(:count){ should eq 7 }
32
32
  end
33
33
 
34
34
  context 'timespan strict' do
@@ -42,7 +42,7 @@ shared_examples_for 'by fortnight' do
42
42
  end
43
43
 
44
44
  it 'should be able to use an alternative field' do
45
- Event.by_fortnight(:field => 'end_time').count.should eq 6
45
+ Event.by_fortnight(:field => 'end_time').count.should eq 5
46
46
  end
47
47
  end
48
48
  end
@@ -11,7 +11,7 @@ shared_examples_for 'by month' do
11
11
 
12
12
  context 'timespan' do
13
13
  subject { Event.by_month(1) }
14
- its(:count){ should eq 8 }
14
+ its(:count){ should eq 9 }
15
15
  end
16
16
 
17
17
  context 'timespan strict' do
@@ -23,17 +23,17 @@ shared_examples_for 'by month' do
23
23
 
24
24
  context 'point-in-time' do
25
25
  subject { Post.by_month(12, year: 2013) }
26
- its(:count){ should eq 1 }
26
+ its(:count){ should eq 8 }
27
27
  end
28
28
 
29
29
  context 'timespan' do
30
30
  subject { Event.by_month('December', year: 2013) }
31
- its(:count){ should eq 4 }
31
+ its(:count){ should eq 12 }
32
32
  end
33
33
 
34
34
  context 'timespan strict' do
35
35
  subject { Event.by_month('Dec', year: 2013, strict: true) }
36
- its(:count){ should eq 0 }
36
+ its(:count){ should eq 4 }
37
37
  end
38
38
  end
39
39
 
@@ -11,7 +11,7 @@ shared_examples_for 'by quarter' do
11
11
 
12
12
  context 'timespan' do
13
13
  subject { Event.by_quarter(1) }
14
- its(:count){ should eq 12 }
14
+ its(:count){ should eq 13 }
15
15
  end
16
16
 
17
17
  context 'timespan strict' do
@@ -23,17 +23,17 @@ shared_examples_for 'by quarter' do
23
23
 
24
24
  context 'point-in-time' do
25
25
  subject { Post.by_quarter(4, year: 2013) }
26
- its(:count){ should eq 1 }
26
+ its(:count){ should eq 10 }
27
27
  end
28
28
 
29
29
  context 'timespan' do
30
30
  subject { Event.by_quarter(4, year: 2013) }
31
- its(:count){ should eq 4 }
31
+ its(:count){ should eq 13 }
32
32
  end
33
33
 
34
34
  context 'timespan strict' do
35
35
  subject { Event.by_quarter(4, year: 2013, strict: true) }
36
- its(:count){ should eq 0 }
36
+ its(:count){ should eq 8 }
37
37
  end
38
38
  end
39
39
 
@@ -11,7 +11,7 @@ shared_examples_for 'by week' do
11
11
 
12
12
  context 'timespan' do
13
13
  subject { Event.by_week(0) }
14
- its(:count){ should eq 5 }
14
+ its(:count){ should eq 7 }
15
15
  end
16
16
 
17
17
  context 'timespan strict' do
@@ -28,7 +28,7 @@ shared_examples_for 'by week' do
28
28
 
29
29
  context 'timespan' do
30
30
  subject { Event.by_week(52, year: 2013) }
31
- its(:count){ should eq 5 }
31
+ its(:count){ should eq 7 }
32
32
  end
33
33
 
34
34
  context 'timespan strict' do
@@ -43,7 +43,7 @@ shared_examples_for 'by week' do
43
43
  end
44
44
 
45
45
  it 'should be able to use an alternative field' do
46
- Event.by_week(:field => 'end_time').count.should eq 5
46
+ Event.by_week(:field => 'end_time').count.should eq 3
47
47
  end
48
48
 
49
49
  context ':start_day option' do
@@ -43,7 +43,7 @@ shared_examples_for 'by weekend' do
43
43
  end
44
44
 
45
45
  it 'should be able to use an alternative field' do
46
- Event.by_weekend(:field => 'end_time').count.should eq 5
46
+ Event.by_weekend(:field => 'end_time').count.should eq 1
47
47
  end
48
48
  end
49
49
  end
@@ -11,7 +11,7 @@ shared_examples_for 'by year' do
11
11
 
12
12
  context 'timespan' do
13
13
  subject { Event.by_year(13) }
14
- its(:count){ should eq 4 }
14
+ its(:count){ should eq 13 }
15
15
  end
16
16
 
17
17
  context 'timespan strict' do
@@ -23,26 +23,26 @@ shared_examples_for 'by year' do
23
23
 
24
24
  context 'point-in-time' do
25
25
  subject { Post.by_year(year: 2013) }
26
- its(:count){ should eq 1 }
26
+ its(:count){ should eq 10 }
27
27
  end
28
28
 
29
29
  context 'timespan' do
30
30
  subject { Event.by_year(year: 2014) }
31
- its(:count){ should eq 13 }
31
+ its(:count){ should eq 14 }
32
32
  end
33
33
 
34
34
  context 'timespan strict' do
35
35
  subject { Event.by_year(year: 2013, strict: true) }
36
- its(:count){ should eq 0 }
36
+ its(:count){ should eq 8 }
37
37
  end
38
38
  end
39
39
 
40
40
  it 'should be able to use an alternative field' do
41
- Event.by_year(:field => 'end_time').count.should eq 13
41
+ Event.by_year(:field => 'end_time').count.should eq 14
42
42
  end
43
43
 
44
44
  it 'can use a 2-digit year' do
45
- Post.by_year(13).count.should eq 1
45
+ Post.by_year(13).count.should eq 10
46
46
  end
47
47
  end
48
48
  end
@@ -8,19 +8,19 @@ shared_examples_for 'offset parameter' do
8
8
  Post.instance_variable_get(:@by_star_offset).should be_nil
9
9
  end
10
10
 
11
- context 'between_times with model offset' do
11
+ context 'between_times with default offset' do
12
12
  subject { Event.between_times(Time.parse('2014-01-01'), Time.parse('2014-01-10')) }
13
- its(:count) { should eq 6 }
13
+ its(:count) { should eq 7 }
14
14
  end
15
15
 
16
16
  context 'between_times with offset override' do
17
17
  subject { Event.between_times(Time.parse('2014-01-01'), Time.parse('2014-01-10'), offset: 16.hours) }
18
- its(:count) { should eq 6 }
18
+ its(:count) { should eq 7 }
19
19
  end
20
20
 
21
- context 'by_day with model offset' do
21
+ context 'by_day with default offset' do
22
22
  subject { Event.by_day(Time.parse('2014-01-01')) }
23
- its(:count) { should eq 4 }
23
+ its(:count) { should eq 5 }
24
24
  end
25
25
 
26
26
  context 'by_day with offset override' do
@@ -0,0 +1,174 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'relative' do
4
+
5
+ describe '#past_day' do
6
+ context 'point-in-time' do
7
+ subject { Post.past_day }
8
+ its(:count){ should eq 1 }
9
+ end
10
+
11
+ context 'timespan' do
12
+ subject { Event.past_day }
13
+ its(:count){ should eq 5 }
14
+ end
15
+
16
+ context 'timespan strict' do
17
+ subject { Event.past_day(strict: true) }
18
+ its(:count){ should eq 0 }
19
+ end
20
+ end
21
+
22
+ describe '#past_week' do
23
+ context 'point-in-time' do
24
+ subject { Post.past_week }
25
+ its(:count){ should eq 3 }
26
+ end
27
+
28
+ context 'timespan' do
29
+ subject { Event.past_week }
30
+ its(:count){ should eq 7 }
31
+ end
32
+
33
+ context 'timespan strict' do
34
+ subject { Event.past_week(strict: true) }
35
+ its(:count){ should eq 0 }
36
+ end
37
+ end
38
+
39
+ describe '#past_fortnight' do
40
+ context 'point-in-time' do
41
+ subject { Post.past_fortnight }
42
+ its(:count){ should eq 4 }
43
+ end
44
+
45
+ context 'timespan' do
46
+ subject { Event.past_fortnight }
47
+ its(:count){ should eq 8 }
48
+ end
49
+
50
+ context 'timespan strict' do
51
+ subject { Event.past_fortnight(strict: true) }
52
+ its(:count){ should eq 1 }
53
+ end
54
+ end
55
+
56
+ describe '#past_month' do
57
+ context 'point-in-time' do
58
+ subject { Post.past_month }
59
+ its(:count){ should eq 8 }
60
+ end
61
+
62
+ context 'timespan' do
63
+ subject { Event.past_month }
64
+ its(:count){ should eq 12 }
65
+ end
66
+
67
+ context 'timespan strict' do
68
+ subject { Event.past_month(strict: true) }
69
+ its(:count){ should eq 4 }
70
+ end
71
+ end
72
+
73
+ describe '#past_year' do
74
+ context 'point-in-time' do
75
+ subject { Post.past_year }
76
+ its(:count){ should eq 10 }
77
+ end
78
+
79
+ context 'timespan' do
80
+ subject { Event.past_year }
81
+ its(:count){ should eq 13 }
82
+ end
83
+
84
+ context 'timespan strict' do
85
+ subject { Event.past_year(strict: true) }
86
+ its(:count){ should eq 8 }
87
+ end
88
+ end
89
+
90
+ describe '#next_day' do
91
+ context 'point-in-time' do
92
+ subject { Post.next_day }
93
+ its(:count){ should eq 2 }
94
+ end
95
+
96
+ context 'timespan' do
97
+ subject { Event.next_day }
98
+ its(:count){ should eq 5 }
99
+ end
100
+
101
+ context 'timespan strict' do
102
+ subject { Event.next_day(strict: true) }
103
+ its(:count){ should eq 0 }
104
+ end
105
+ end
106
+
107
+ describe '#next_week' do
108
+ context 'point-in-time' do
109
+ subject { Post.next_week }
110
+ its(:count){ should eq 3 }
111
+ end
112
+
113
+ context 'timespan' do
114
+ subject { Event.next_week }
115
+ its(:count){ should eq 7 }
116
+ end
117
+
118
+ context 'timespan strict' do
119
+ subject { Event.next_week(strict: true) }
120
+ its(:count){ should eq 0 }
121
+ end
122
+ end
123
+
124
+ describe '#next_fortnight' do
125
+ context 'point-in-time' do
126
+ subject { Post.next_fortnight }
127
+ its(:count){ should eq 5 }
128
+ end
129
+
130
+ context 'timespan' do
131
+ subject { Event.next_fortnight }
132
+ its(:count){ should eq 7 }
133
+ end
134
+
135
+ context 'timespan strict' do
136
+ subject { Event.next_fortnight(strict: true) }
137
+ its(:count){ should eq 0 }
138
+ end
139
+ end
140
+
141
+ describe '#next_month' do
142
+ context 'point-in-time' do
143
+ subject { Post.next_month }
144
+ its(:count){ should eq 6 }
145
+ end
146
+
147
+ context 'timespan' do
148
+ subject { Event.next_month }
149
+ its(:count){ should eq 9 }
150
+ end
151
+
152
+ context 'timespan strict' do
153
+ subject { Event.next_month(strict: true) }
154
+ its(:count){ should eq 3 }
155
+ end
156
+ end
157
+
158
+ describe '#next_year' do
159
+ context 'point-in-time' do
160
+ subject { Post.next_year }
161
+ its(:count){ should eq 12 }
162
+ end
163
+
164
+ context 'timespan' do
165
+ subject { Event.next_year }
166
+ its(:count){ should eq 14 }
167
+ end
168
+
169
+ context 'timespan strict' do
170
+ subject { Event.next_year(strict: true) }
171
+ its(:count){ should eq 9 }
172
+ end
173
+ end
174
+ end