acts_as_span 0.0.5 → 1.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.
- checksums.yaml +7 -0
- data/.gitignore +11 -3
- data/.rspec +2 -0
- data/.tool-versions +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +0 -3
- data/README.rdoc +4 -16
- data/Rakefile +5 -1
- data/acts_as_span.gemspec +31 -14
- data/config/locales/en/acts_as_span.yml +15 -0
- data/lib/acts_as_span.rb +69 -98
- data/lib/acts_as_span/end_date_propagator.rb +198 -0
- data/lib/acts_as_span/no_overlap_validator.rb +86 -0
- data/lib/acts_as_span/span_instance.rb +24 -32
- data/lib/acts_as_span/span_instance/status.rb +12 -27
- data/lib/acts_as_span/span_instance/validations.rb +11 -53
- data/lib/acts_as_span/span_klass.rb +11 -19
- data/lib/acts_as_span/span_klass/status.rb +43 -12
- data/lib/acts_as_span/version.rb +6 -4
- data/lib/acts_as_span/within_parent_date_span_validator.rb +44 -0
- data/spec/lib/acts_as_span_spec.rb +38 -35
- data/spec/lib/delegation_spec.rb +45 -78
- data/spec/lib/end_date_propagator_spec.rb +319 -0
- data/spec/lib/no_overlap_validator_spec.rb +129 -0
- data/spec/lib/span_instance/named_scopes_on_spec.rb +193 -193
- data/spec/lib/span_instance/named_scopes_spec.rb +193 -191
- data/spec/lib/span_instance/overlap_spec.rb +193 -253
- data/spec/lib/span_instance/status_spec.rb +22 -35
- data/spec/lib/span_instance/validations_spec.rb +8 -44
- data/spec/lib/span_instance_spec.rb +17 -30
- data/spec/lib/span_klass/status_spec.rb +38 -0
- data/spec/lib/within_parent_date_span_validator_spec.rb +126 -0
- data/spec/spec_helper.rb +19 -6
- data/spec/spec_models.rb +226 -0
- metadata +167 -61
- data/Gemfile.lock +0 -47
- data/lib/acts_as_span/span_instance/overlap.rb +0 -17
- data/lib/acts_as_span/span_klass/overlap.rb +0 -21
- data/spec/lib/negative_spec.rb +0 -30
- data/spec/spec.opts +0 -1
@@ -1,597 +1,537 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "a basic model using acts_as_span" do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
string :description
|
18
|
-
date :start_date
|
19
|
-
date :end_date
|
20
|
-
|
21
|
-
acts_as_span :span_overlap_scope => :parent_1_id
|
22
|
-
end
|
23
|
-
|
24
|
-
build_model :scoped_model do
|
25
|
-
string :description
|
26
|
-
date :start_date
|
27
|
-
date :end_date
|
28
|
-
|
29
|
-
acts_as_span :span_overlap_count => 0
|
30
|
-
end
|
3
|
+
RSpec.describe "a basic model using acts_as_span", skip: true do
|
4
|
+
let(:span_a) {[ - 4.days, - 3.day ]}
|
5
|
+
let(:span_b) {[ - 4.days, 1.days ]}
|
6
|
+
let(:span_c) {[ - 4.days, 4.days ]}
|
7
|
+
let(:span_d) {[ - 1.day, 1.day ]}
|
8
|
+
let(:span_e) {[ - 1.days, 4.days ]}
|
9
|
+
let(:span_f) {[ 3.days, 4.days ]}
|
10
|
+
let(:span_g) {[ - 4.days, nil ]}
|
11
|
+
let(:span_h) {[ - 1.days, nil ]}
|
12
|
+
let(:span_i) {[ 3.days, nil ]}
|
13
|
+
let(:span_j) {[ nil, 4.days ]}
|
14
|
+
let(:span_k) {[ nil, 1.day ]}
|
15
|
+
let(:span_l) {[ nil, -3.days ]}
|
16
|
+
let(:span_m) {[ nil, nil ]}
|
31
17
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
18
|
+
let(:query_date) { Date.current }
|
19
|
+
|
20
|
+
let!(:scoped_model_model) do
|
21
|
+
current_start_date = start_date.nil? ? nil : query_date + start_date
|
22
|
+
current_end_date = end_date.nil? ? nil : query_date + end_date
|
23
|
+
|
24
|
+
SpanModel.create!(
|
25
|
+
start_date: current_start_date,
|
26
|
+
end_date: current_end_date)
|
27
|
+
end
|
28
|
+
|
29
|
+
let!(:span_model) do
|
30
|
+
SpanModel.create!(
|
31
|
+
start_date: query_date + span[:start],
|
32
|
+
end_date: query_date + span[:end])
|
41
33
|
end
|
42
|
-
|
43
|
-
#context "span_overlap_count == nil" do
|
44
|
-
# before(:each) do
|
45
|
-
# @span_model = SpanModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day)
|
46
|
-
# end
|
47
|
-
#
|
48
|
-
# it "should be valid if overlap?" do
|
49
|
-
# non_scoped_model = SpanModel.new(:start_date => Date.today, :end_date => Date.today)
|
50
|
-
# non_scoped_model.should be_valid
|
51
|
-
# non_scoped_model.overlap?(@span_model).should be_true
|
52
|
-
# end
|
53
|
-
#end
|
54
|
-
#
|
55
|
-
#context "span_overlap_count == 1, span_overlap_scope == Array" do
|
56
|
-
# before(:each) do
|
57
|
-
# @span_model = MultipleScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day, :parent_1_id => 1, :parent_2_id => 2)
|
58
|
-
# @span_model_2 = MultipleScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day, :parent_1_id => 1, :parent_2_id => 2)
|
59
|
-
# end
|
60
|
-
#
|
61
|
-
# it "should NOT be valid if in scope && overlap?" do
|
62
|
-
# scoped_model = MultipleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 1, :parent_2_id => 2)
|
63
|
-
# scoped_model.should_not be_valid
|
64
|
-
# scoped_model.overlap?(@span_model).should be_true
|
65
|
-
# end
|
66
|
-
#
|
67
|
-
# it "should be valid if NOT in scope && overlap?" do
|
68
|
-
# scoped_model = MultipleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 1, :parent_2_id => 0)
|
69
|
-
# scoped_model.should be_valid
|
70
|
-
# scoped_model.overlap?(@span_model).should be_true
|
71
|
-
# end
|
72
|
-
#end
|
73
|
-
#
|
74
|
-
#context "span_overlap_count == nil, span_overlap_scope == symbol" do
|
75
|
-
# before(:each) do
|
76
|
-
# @span_model = SingleScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day, :parent_1_id => 1)
|
77
|
-
# end
|
78
|
-
#
|
79
|
-
# it "should NOT be valid if in scope && overlap?" do
|
80
|
-
# scoped_model = SingleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 1)
|
81
|
-
# scoped_model.should_not be_valid
|
82
|
-
# scoped_model.overlap?(@span_model).should be_true
|
83
|
-
# end
|
84
|
-
#
|
85
|
-
# it "should be valid if NOT in scope && overlap?" do
|
86
|
-
# scoped_model = SingleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 0)
|
87
|
-
# scoped_model.should be_valid
|
88
|
-
# scoped_model.overlap?(@span_model).should be_true
|
89
|
-
# end
|
90
|
-
#
|
91
|
-
# it "should ignore itself" do
|
92
|
-
# @span_model.should be_valid
|
93
|
-
# end
|
94
|
-
#end
|
95
|
-
|
34
|
+
|
96
35
|
context "span_overlap_count == 0" do
|
97
|
-
# -4 -3 -2 -1 +1 +2 +3 +4
|
36
|
+
# -4 -3 -2 -1 +1 +2 +3 +4
|
98
37
|
# |-----------| TEST SPAN
|
99
38
|
# A |---| VALID
|
100
|
-
# B |---------------|
|
101
|
-
# C |---------------------------|
|
102
|
-
# D |---|
|
103
|
-
# E |---------------|
|
39
|
+
# B |---------------|
|
40
|
+
# C |---------------------------|
|
41
|
+
# D |---|
|
42
|
+
# E |---------------|
|
104
43
|
# F |---| VALID
|
105
|
-
# G |->
|
106
|
-
# H |->
|
44
|
+
# G |->
|
45
|
+
# H |->
|
107
46
|
# I |-> VALID
|
108
|
-
# J <-|
|
109
|
-
# K <-|
|
47
|
+
# J <-|
|
48
|
+
# K <-|
|
110
49
|
# L <-| VALID
|
111
|
-
# M <--->
|
50
|
+
# M <--->
|
51
|
+
|
52
|
+
|
112
53
|
context "span_model.start_date && span_model.end_date" do
|
113
|
-
|
114
|
-
|
115
|
-
end
|
116
|
-
|
54
|
+
let(:span) {{ start: -2.days, end: +2.days }}
|
55
|
+
|
117
56
|
context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
|
57
|
+
# let(:start_date) {
|
118
58
|
it "should be valid" do
|
119
59
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
|
120
60
|
scoped_model.should be_valid
|
121
|
-
scoped_model.overlap?(
|
61
|
+
scoped_model.overlap?(span_model).should be_false
|
122
62
|
end
|
123
63
|
end
|
124
|
-
|
64
|
+
|
125
65
|
context "B) start_date < span_model.start_date && end_date IN span" do
|
126
66
|
it "should NOT be valid" do
|
127
67
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
|
128
68
|
scoped_model.should_not be_valid
|
129
|
-
scoped_model.overlap?(
|
69
|
+
scoped_model.overlap?(span_model).should be_true
|
130
70
|
end
|
131
71
|
end
|
132
|
-
|
72
|
+
|
133
73
|
context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
|
134
74
|
it "should NOT be valid" do
|
135
75
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
|
136
76
|
scoped_model.should_not be_valid
|
137
|
-
scoped_model.overlap?(
|
77
|
+
scoped_model.overlap?(span_model).should be_true
|
138
78
|
end
|
139
79
|
end
|
140
|
-
|
80
|
+
|
141
81
|
context "D) start_date IN span && end_date IN span" do
|
142
82
|
it "should NOT be valid" do
|
143
83
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
|
144
84
|
scoped_model.should_not be_valid
|
145
|
-
scoped_model.overlap?(
|
85
|
+
scoped_model.overlap?(span_model).should be_true
|
146
86
|
end
|
147
87
|
end
|
148
|
-
|
88
|
+
|
149
89
|
context "E) start_date IN span && end_date > span_model.end_date" do
|
150
90
|
it "should NOT be valid" do
|
151
91
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
|
152
92
|
scoped_model.should_not be_valid
|
153
|
-
scoped_model.overlap?(
|
93
|
+
scoped_model.overlap?(span_model).should be_true
|
154
94
|
end
|
155
95
|
end
|
156
|
-
|
96
|
+
|
157
97
|
context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
|
158
98
|
it "should be valid" do
|
159
99
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
|
160
100
|
scoped_model.should be_valid
|
161
|
-
scoped_model.overlap?(
|
101
|
+
scoped_model.overlap?(span_model).should be_false
|
162
102
|
end
|
163
103
|
end
|
164
|
-
|
104
|
+
|
165
105
|
context "G) start_date < span_model.start_date && end_date nil" do
|
166
106
|
it "should NOT be valid" do
|
167
107
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
|
168
108
|
scoped_model.should_not be_valid
|
169
|
-
scoped_model.overlap?(
|
109
|
+
scoped_model.overlap?(span_model).should be_true
|
170
110
|
end
|
171
111
|
end
|
172
|
-
|
112
|
+
|
173
113
|
context "H) start_date IN span && end_date nil" do
|
174
114
|
it "should NOT be valid" do
|
175
115
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
|
176
116
|
scoped_model.should_not be_valid
|
177
|
-
scoped_model.overlap?(
|
117
|
+
scoped_model.overlap?(span_model).should be_true
|
178
118
|
end
|
179
119
|
end
|
180
|
-
|
120
|
+
|
181
121
|
context "I) start_date > span_model.end_date && end_date nil" do
|
182
122
|
it "should be valid" do
|
183
123
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
|
184
124
|
scoped_model.should be_valid
|
185
|
-
scoped_model.overlap?(
|
125
|
+
scoped_model.overlap?(span_model).should be_false
|
186
126
|
end
|
187
127
|
end
|
188
|
-
|
128
|
+
|
189
129
|
context "J) start_date nil && end_date > span_model.end_date" do
|
190
130
|
it "should NOT be valid" do
|
191
131
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
|
192
132
|
scoped_model.should_not be_valid
|
193
|
-
scoped_model.overlap?(
|
133
|
+
scoped_model.overlap?(span_model).should be_true
|
194
134
|
end
|
195
135
|
end
|
196
|
-
|
136
|
+
|
197
137
|
context "K) start_date nil && end_date IN span" do
|
198
138
|
it "should NOT be valid" do
|
199
139
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
|
200
140
|
scoped_model.should_not be_valid
|
201
|
-
scoped_model.overlap?(
|
141
|
+
scoped_model.overlap?(span_model).should be_true
|
202
142
|
end
|
203
143
|
end
|
204
|
-
|
144
|
+
|
205
145
|
context "L) start_date nil && end_date < span_model.start_date" do
|
206
146
|
it "should be valid" do
|
207
147
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
|
208
148
|
scoped_model.should be_valid
|
209
|
-
scoped_model.overlap?(
|
149
|
+
scoped_model.overlap?(span_model).should be_false
|
210
150
|
end
|
211
151
|
end
|
212
|
-
|
152
|
+
|
213
153
|
context "M) start_date nil && end_date nil" do
|
214
154
|
it "should NOT be valid" do
|
215
155
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
|
216
156
|
scoped_model.should_not be_valid
|
217
|
-
scoped_model.overlap?(
|
157
|
+
scoped_model.overlap?(span_model).should be_true
|
218
158
|
end
|
219
159
|
end
|
220
160
|
end
|
221
|
-
|
222
|
-
# -4 -3 -2 -1 +1 +2 +3 +4
|
161
|
+
|
162
|
+
# -4 -3 -2 -1 +1 +2 +3 +4
|
223
163
|
# |-------------------> TEST SPAN
|
224
164
|
# A |---| VALID
|
225
|
-
# B |---------------|
|
226
|
-
# C |---------------------------|
|
227
|
-
# D |---|
|
228
|
-
# E |---------------|
|
229
|
-
# F |---|
|
230
|
-
# G |->
|
231
|
-
# H |->
|
232
|
-
# I |->
|
233
|
-
# J <-|
|
234
|
-
# K <-|
|
165
|
+
# B |---------------|
|
166
|
+
# C |---------------------------|
|
167
|
+
# D |---|
|
168
|
+
# E |---------------|
|
169
|
+
# F |---|
|
170
|
+
# G |->
|
171
|
+
# H |->
|
172
|
+
# I |->
|
173
|
+
# J <-|
|
174
|
+
# K <-|
|
235
175
|
# L <-| VALID
|
236
|
-
# M <--->
|
176
|
+
# M <--->
|
237
177
|
context "span_model.start_date && span_model.end_date.nil" do
|
238
178
|
before(:each) do
|
239
|
-
|
179
|
+
span_model = ScopedModel.create!(:start_date => Date.today - 2.days, :end_date => nil)
|
240
180
|
end
|
241
|
-
|
181
|
+
|
242
182
|
context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
|
243
183
|
it "should be valid" do
|
244
184
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
|
245
185
|
scoped_model.should be_valid
|
246
|
-
scoped_model.overlap?(
|
186
|
+
scoped_model.overlap?(span_model).should be_false
|
247
187
|
end
|
248
188
|
end
|
249
|
-
|
189
|
+
|
250
190
|
context "B) start_date < span_model.start_date && end_date IN span" do
|
251
191
|
it "should NOT be valid" do
|
252
192
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
|
253
193
|
scoped_model.should_not be_valid
|
254
|
-
scoped_model.overlap?(
|
194
|
+
scoped_model.overlap?(span_model).should be_true
|
255
195
|
end
|
256
196
|
end
|
257
|
-
|
197
|
+
|
258
198
|
context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
|
259
199
|
it "should NOT be valid" do
|
260
200
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
|
261
201
|
scoped_model.should_not be_valid
|
262
|
-
scoped_model.overlap?(
|
202
|
+
scoped_model.overlap?(span_model).should be_true
|
263
203
|
end
|
264
204
|
end
|
265
|
-
|
205
|
+
|
266
206
|
context "D) start_date IN span && end_date IN span" do
|
267
207
|
it "should NOT be valid" do
|
268
208
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
|
269
209
|
scoped_model.should_not be_valid
|
270
|
-
scoped_model.overlap?(
|
210
|
+
scoped_model.overlap?(span_model).should be_true
|
271
211
|
end
|
272
212
|
end
|
273
|
-
|
213
|
+
|
274
214
|
context "E) start_date IN span && end_date > span_model.end_date" do
|
275
215
|
it "should NOT be valid" do
|
276
216
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
|
277
217
|
scoped_model.should_not be_valid
|
278
|
-
scoped_model.overlap?(
|
218
|
+
scoped_model.overlap?(span_model).should be_true
|
279
219
|
end
|
280
220
|
end
|
281
|
-
|
221
|
+
|
282
222
|
context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
|
283
223
|
it "should NOT be valid" do
|
284
224
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
|
285
225
|
scoped_model.should_not be_valid
|
286
|
-
scoped_model.overlap?(
|
226
|
+
scoped_model.overlap?(span_model).should be_true
|
287
227
|
end
|
288
228
|
end
|
289
|
-
|
229
|
+
|
290
230
|
context "G) start_date < span_model.start_date && end_date nil" do
|
291
231
|
it "should NOT be valid" do
|
292
232
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
|
293
233
|
scoped_model.should_not be_valid
|
294
|
-
scoped_model.overlap?(
|
234
|
+
scoped_model.overlap?(span_model).should be_true
|
295
235
|
end
|
296
236
|
end
|
297
|
-
|
237
|
+
|
298
238
|
context "H) start_date IN span && end_date nil" do
|
299
239
|
it "should NOT be valid" do
|
300
240
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
|
301
241
|
scoped_model.should_not be_valid
|
302
|
-
scoped_model.overlap?(
|
242
|
+
scoped_model.overlap?(span_model).should be_true
|
303
243
|
end
|
304
244
|
end
|
305
|
-
|
245
|
+
|
306
246
|
context "I) start_date > span_model.end_date && end_date nil" do
|
307
247
|
it "should NOT be valid" do
|
308
248
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
|
309
249
|
scoped_model.should_not be_valid
|
310
|
-
scoped_model.overlap?(
|
250
|
+
scoped_model.overlap?(span_model).should be_true
|
311
251
|
end
|
312
252
|
end
|
313
|
-
|
253
|
+
|
314
254
|
context "J) start_date nil && end_date > span_model.end_date" do
|
315
255
|
it "should NOT be valid" do
|
316
256
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
|
317
257
|
scoped_model.should_not be_valid
|
318
|
-
scoped_model.overlap?(
|
258
|
+
scoped_model.overlap?(span_model).should be_true
|
319
259
|
end
|
320
260
|
end
|
321
|
-
|
261
|
+
|
322
262
|
context "K) start_date nil && end_date IN span" do
|
323
263
|
it "should NOT be valid" do
|
324
264
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
|
325
265
|
scoped_model.should_not be_valid
|
326
|
-
scoped_model.overlap?(
|
266
|
+
scoped_model.overlap?(span_model).should be_true
|
327
267
|
end
|
328
268
|
end
|
329
|
-
|
269
|
+
|
330
270
|
context "L) start_date nil && end_date < span_model.start_date" do
|
331
271
|
it "should be valid" do
|
332
272
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
|
333
273
|
scoped_model.should be_valid
|
334
|
-
scoped_model.overlap?(
|
274
|
+
scoped_model.overlap?(span_model).should be_false
|
335
275
|
end
|
336
276
|
end
|
337
|
-
|
277
|
+
|
338
278
|
context "M) start_date nil && end_date nil" do
|
339
279
|
it "should NOT be valid" do
|
340
280
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
|
341
281
|
scoped_model.should_not be_valid
|
342
|
-
scoped_model.overlap?(
|
282
|
+
scoped_model.overlap?(span_model).should be_true
|
343
283
|
end
|
344
284
|
end
|
345
285
|
end
|
346
|
-
|
347
|
-
# -4 -3 -2 -1 +1 +2 +3 +4
|
286
|
+
|
287
|
+
# -4 -3 -2 -1 +1 +2 +3 +4
|
348
288
|
# <-------------------| TEST SPAN
|
349
|
-
# A |---|
|
350
|
-
# B |---------------|
|
351
|
-
# C |---------------------------|
|
352
|
-
# D |---|
|
353
|
-
# E |---------------|
|
289
|
+
# A |---|
|
290
|
+
# B |---------------|
|
291
|
+
# C |---------------------------|
|
292
|
+
# D |---|
|
293
|
+
# E |---------------|
|
354
294
|
# F |---| VALID
|
355
|
-
# G |->
|
356
|
-
# H |->
|
295
|
+
# G |->
|
296
|
+
# H |->
|
357
297
|
# I |-> VALID
|
358
|
-
# J <-|
|
359
|
-
# K <-|
|
360
|
-
# L <-|
|
361
|
-
# M <--->
|
298
|
+
# J <-|
|
299
|
+
# K <-|
|
300
|
+
# L <-|
|
301
|
+
# M <--->
|
362
302
|
context "span_model.start_date.nil && span_model.end_date" do
|
363
303
|
before(:each) do
|
364
|
-
|
304
|
+
span_model = ScopedModel.create!(:start_date => nil, :end_date => Date.today + 2.day)
|
365
305
|
end
|
366
|
-
|
306
|
+
|
367
307
|
context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
|
368
308
|
it "should NOT be valid" do
|
369
309
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
|
370
310
|
scoped_model.should_not be_valid
|
371
|
-
scoped_model.overlap?(
|
311
|
+
scoped_model.overlap?(span_model).should be_true
|
372
312
|
end
|
373
313
|
end
|
374
|
-
|
314
|
+
|
375
315
|
context "B) start_date < span_model.start_date && end_date IN span" do
|
376
316
|
it "should NOT be valid" do
|
377
317
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
|
378
318
|
scoped_model.should_not be_valid
|
379
|
-
scoped_model.overlap?(
|
319
|
+
scoped_model.overlap?(span_model).should be_true
|
380
320
|
end
|
381
321
|
end
|
382
|
-
|
322
|
+
|
383
323
|
context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
|
384
324
|
it "should NOT be valid" do
|
385
325
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
|
386
326
|
scoped_model.should_not be_valid
|
387
|
-
scoped_model.overlap?(
|
327
|
+
scoped_model.overlap?(span_model).should be_true
|
388
328
|
end
|
389
329
|
end
|
390
|
-
|
330
|
+
|
391
331
|
context "D) start_date IN span && end_date IN span" do
|
392
332
|
it "should NOT be valid" do
|
393
333
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
|
394
334
|
scoped_model.should_not be_valid
|
395
|
-
scoped_model.overlap?(
|
335
|
+
scoped_model.overlap?(span_model).should be_true
|
396
336
|
end
|
397
337
|
end
|
398
|
-
|
338
|
+
|
399
339
|
context "E) start_date IN span && end_date > span_model.end_date" do
|
400
340
|
it "should NOT be valid" do
|
401
341
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
|
402
342
|
scoped_model.should_not be_valid
|
403
|
-
scoped_model.overlap?(
|
343
|
+
scoped_model.overlap?(span_model).should be_true
|
404
344
|
end
|
405
345
|
end
|
406
|
-
|
346
|
+
|
407
347
|
context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
|
408
348
|
it "should be valid" do
|
409
349
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
|
410
350
|
scoped_model.should be_valid
|
411
|
-
scoped_model.overlap?(
|
351
|
+
scoped_model.overlap?(span_model).should be_false
|
412
352
|
end
|
413
353
|
end
|
414
|
-
|
354
|
+
|
415
355
|
context "G) start_date < span_model.start_date && end_date nil" do
|
416
356
|
it "should NOT be valid" do
|
417
357
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
|
418
358
|
scoped_model.should_not be_valid
|
419
|
-
scoped_model.overlap?(
|
359
|
+
scoped_model.overlap?(span_model).should be_true
|
420
360
|
end
|
421
361
|
end
|
422
|
-
|
362
|
+
|
423
363
|
context "H) start_date IN span && end_date nil" do
|
424
364
|
it "should NOT be valid" do
|
425
365
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
|
426
366
|
scoped_model.should_not be_valid
|
427
|
-
scoped_model.overlap?(
|
367
|
+
scoped_model.overlap?(span_model).should be_true
|
428
368
|
end
|
429
369
|
end
|
430
|
-
|
370
|
+
|
431
371
|
context "I) start_date > span_model.end_date && end_date nil" do
|
432
372
|
it "should be valid" do
|
433
373
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
|
434
374
|
scoped_model.should be_valid
|
435
|
-
scoped_model.overlap?(
|
375
|
+
scoped_model.overlap?(span_model).should be_false
|
436
376
|
end
|
437
377
|
end
|
438
|
-
|
378
|
+
|
439
379
|
context "J) start_date nil && end_date > span_model.end_date" do
|
440
380
|
it "should NOT be valid" do
|
441
381
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
|
442
382
|
scoped_model.should_not be_valid
|
443
|
-
scoped_model.overlap?(
|
383
|
+
scoped_model.overlap?(span_model).should be_true
|
444
384
|
end
|
445
385
|
end
|
446
|
-
|
386
|
+
|
447
387
|
context "K) start_date nil && end_date IN span" do
|
448
388
|
it "should NOT be valid" do
|
449
389
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
|
450
390
|
scoped_model.should_not be_valid
|
451
|
-
scoped_model.overlap?(
|
391
|
+
scoped_model.overlap?(span_model).should be_true
|
452
392
|
end
|
453
393
|
end
|
454
|
-
|
394
|
+
|
455
395
|
context "L) start_date nil && end_date < span_model.start_date" do
|
456
396
|
it "should NOT be valid" do
|
457
397
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
|
458
398
|
scoped_model.should_not be_valid
|
459
|
-
scoped_model.overlap?(
|
399
|
+
scoped_model.overlap?(span_model).should be_true
|
460
400
|
end
|
461
401
|
end
|
462
|
-
|
402
|
+
|
463
403
|
context "M) start_date nil && end_date nil" do
|
464
404
|
it "should NOT be valid" do
|
465
405
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
|
466
406
|
scoped_model.should_not be_valid
|
467
|
-
scoped_model.overlap?(
|
407
|
+
scoped_model.overlap?(span_model).should be_true
|
468
408
|
end
|
469
409
|
end
|
470
410
|
end
|
471
|
-
|
472
|
-
# -4 -3 -2 -1 +1 +2 +3 +4
|
411
|
+
|
412
|
+
# -4 -3 -2 -1 +1 +2 +3 +4
|
473
413
|
# <---------------------------> TEST SPAN
|
474
|
-
# A |---|
|
475
|
-
# B |---------------|
|
476
|
-
# C |---------------------------|
|
477
|
-
# D |---|
|
478
|
-
# E |---------------|
|
479
|
-
# F |---|
|
480
|
-
# G |->
|
481
|
-
# H |->
|
482
|
-
# I |->
|
483
|
-
# J <-|
|
484
|
-
# K <-|
|
485
|
-
# L <-|
|
486
|
-
# M <--->
|
414
|
+
# A |---|
|
415
|
+
# B |---------------|
|
416
|
+
# C |---------------------------|
|
417
|
+
# D |---|
|
418
|
+
# E |---------------|
|
419
|
+
# F |---|
|
420
|
+
# G |->
|
421
|
+
# H |->
|
422
|
+
# I |->
|
423
|
+
# J <-|
|
424
|
+
# K <-|
|
425
|
+
# L <-|
|
426
|
+
# M <--->
|
487
427
|
context "span_model.start_date.nil && span_model.end_date.nil" do
|
488
428
|
before(:each) do
|
489
|
-
|
429
|
+
span_model = ScopedModel.create!(:start_date => nil, :end_date => nil)
|
490
430
|
end
|
491
|
-
|
431
|
+
|
492
432
|
context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
|
493
433
|
it "should NOT be valid" do
|
494
434
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
|
495
435
|
scoped_model.should_not be_valid
|
496
|
-
scoped_model.overlap?(
|
436
|
+
scoped_model.overlap?(span_model).should be_true
|
497
437
|
end
|
498
438
|
end
|
499
|
-
|
439
|
+
|
500
440
|
context "B) start_date < span_model.start_date && end_date IN span" do
|
501
441
|
it "should NOT be valid" do
|
502
442
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
|
503
443
|
scoped_model.should_not be_valid
|
504
|
-
scoped_model.overlap?(
|
444
|
+
scoped_model.overlap?(span_model).should be_true
|
505
445
|
end
|
506
446
|
end
|
507
|
-
|
447
|
+
|
508
448
|
context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
|
509
449
|
it "should NOT be valid" do
|
510
450
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
|
511
451
|
scoped_model.should_not be_valid
|
512
|
-
scoped_model.overlap?(
|
452
|
+
scoped_model.overlap?(span_model).should be_true
|
513
453
|
end
|
514
454
|
end
|
515
|
-
|
455
|
+
|
516
456
|
context "D) start_date IN span && end_date IN span" do
|
517
457
|
it "should NOT be valid" do
|
518
458
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
|
519
459
|
scoped_model.should_not be_valid
|
520
|
-
scoped_model.overlap?(
|
460
|
+
scoped_model.overlap?(span_model).should be_true
|
521
461
|
end
|
522
462
|
end
|
523
|
-
|
463
|
+
|
524
464
|
context "E) start_date IN span && end_date > span_model.end_date" do
|
525
465
|
it "should NOT be valid" do
|
526
466
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
|
527
467
|
scoped_model.should_not be_valid
|
528
|
-
scoped_model.overlap?(
|
468
|
+
scoped_model.overlap?(span_model).should be_true
|
529
469
|
end
|
530
470
|
end
|
531
|
-
|
471
|
+
|
532
472
|
context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
|
533
473
|
it "should NOT be valid" do
|
534
474
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
|
535
475
|
scoped_model.should_not be_valid
|
536
|
-
scoped_model.overlap?(
|
476
|
+
scoped_model.overlap?(span_model).should be_true
|
537
477
|
end
|
538
478
|
end
|
539
|
-
|
479
|
+
|
540
480
|
context "G) start_date < span_model.start_date && end_date nil" do
|
541
481
|
it "should NOT be valid" do
|
542
482
|
scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
|
543
483
|
scoped_model.should_not be_valid
|
544
|
-
scoped_model.overlap?(
|
484
|
+
scoped_model.overlap?(span_model).should be_true
|
545
485
|
end
|
546
486
|
end
|
547
|
-
|
487
|
+
|
548
488
|
context "H) start_date IN span && end_date nil" do
|
549
489
|
it "should NOT be valid" do
|
550
490
|
scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
|
551
491
|
scoped_model.should_not be_valid
|
552
|
-
scoped_model.overlap?(
|
492
|
+
scoped_model.overlap?(span_model).should be_true
|
553
493
|
end
|
554
494
|
end
|
555
|
-
|
495
|
+
|
556
496
|
context "I) start_date > span_model.end_date && end_date nil" do
|
557
497
|
it "should NOT be valid" do
|
558
498
|
scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
|
559
499
|
scoped_model.should_not be_valid
|
560
|
-
scoped_model.overlap?(
|
500
|
+
scoped_model.overlap?(span_model).should be_true
|
561
501
|
end
|
562
502
|
end
|
563
|
-
|
503
|
+
|
564
504
|
context "J) start_date nil && end_date > span_model.end_date" do
|
565
505
|
it "should NOT be valid" do
|
566
506
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
|
567
507
|
scoped_model.should_not be_valid
|
568
|
-
scoped_model.overlap?(
|
508
|
+
scoped_model.overlap?(span_model).should be_true
|
569
509
|
end
|
570
510
|
end
|
571
|
-
|
511
|
+
|
572
512
|
context "K) start_date nil && end_date IN span" do
|
573
513
|
it "should NOT be valid" do
|
574
514
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
|
575
515
|
scoped_model.should_not be_valid
|
576
|
-
scoped_model.overlap?(
|
516
|
+
scoped_model.overlap?(span_model).should be_true
|
577
517
|
end
|
578
518
|
end
|
579
|
-
|
519
|
+
|
580
520
|
context "L) start_date nil && end_date < span_model.start_date" do
|
581
521
|
it "should NOT be valid" do
|
582
522
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
|
583
523
|
scoped_model.should_not be_valid
|
584
|
-
scoped_model.overlap?(
|
524
|
+
scoped_model.overlap?(span_model).should be_true
|
585
525
|
end
|
586
526
|
end
|
587
|
-
|
527
|
+
|
588
528
|
context "M) start_date nil && end_date nil" do
|
589
529
|
it "should NOT be valid" do
|
590
530
|
scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
|
591
531
|
scoped_model.should_not be_valid
|
592
|
-
scoped_model.overlap?(
|
532
|
+
scoped_model.overlap?(span_model).should be_true
|
593
533
|
end
|
594
534
|
end
|
595
535
|
end
|
596
536
|
end
|
597
|
-
end
|
537
|
+
end
|