acts_as_span 0.0.5 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -3
  3. data/.rspec +2 -0
  4. data/.tool-versions +1 -0
  5. data/.travis.yml +12 -0
  6. data/Gemfile +0 -3
  7. data/README.rdoc +4 -16
  8. data/Rakefile +5 -1
  9. data/acts_as_span.gemspec +31 -14
  10. data/config/locales/en/acts_as_span.yml +15 -0
  11. data/lib/acts_as_span.rb +69 -98
  12. data/lib/acts_as_span/end_date_propagator.rb +198 -0
  13. data/lib/acts_as_span/no_overlap_validator.rb +86 -0
  14. data/lib/acts_as_span/span_instance.rb +24 -32
  15. data/lib/acts_as_span/span_instance/status.rb +12 -27
  16. data/lib/acts_as_span/span_instance/validations.rb +11 -53
  17. data/lib/acts_as_span/span_klass.rb +11 -19
  18. data/lib/acts_as_span/span_klass/status.rb +43 -12
  19. data/lib/acts_as_span/version.rb +6 -4
  20. data/lib/acts_as_span/within_parent_date_span_validator.rb +44 -0
  21. data/spec/lib/acts_as_span_spec.rb +38 -35
  22. data/spec/lib/delegation_spec.rb +45 -78
  23. data/spec/lib/end_date_propagator_spec.rb +319 -0
  24. data/spec/lib/no_overlap_validator_spec.rb +129 -0
  25. data/spec/lib/span_instance/named_scopes_on_spec.rb +193 -193
  26. data/spec/lib/span_instance/named_scopes_spec.rb +193 -191
  27. data/spec/lib/span_instance/overlap_spec.rb +193 -253
  28. data/spec/lib/span_instance/status_spec.rb +22 -35
  29. data/spec/lib/span_instance/validations_spec.rb +8 -44
  30. data/spec/lib/span_instance_spec.rb +17 -30
  31. data/spec/lib/span_klass/status_spec.rb +38 -0
  32. data/spec/lib/within_parent_date_span_validator_spec.rb +126 -0
  33. data/spec/spec_helper.rb +19 -6
  34. data/spec/spec_models.rb +226 -0
  35. metadata +167 -61
  36. data/Gemfile.lock +0 -47
  37. data/lib/acts_as_span/span_instance/overlap.rb +0 -17
  38. data/lib/acts_as_span/span_klass/overlap.rb +0 -21
  39. data/spec/lib/negative_spec.rb +0 -30
  40. 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
- before(:each) do
5
- build_model :multiple_scoped_model do
6
- integer :parent_1_id
7
- integer :parent_2_id
8
- string :description
9
- date :start_date
10
- date :end_date
11
-
12
- acts_as_span :span_overlap_count => 1, :span_overlap_scope => [:parent_1_id, :parent_2_id]
13
- end
14
-
15
- build_model :single_scoped_model do
16
- integer :parent_1_id
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
- build_model :span_model do
33
- string :description
34
- date :start_date
35
- date :end_date
36
-
37
- acts_as_span :span_overlap_count => nil
38
- end
39
-
40
- ScopedModel.all.each(&:destroy)
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
- before(:each) do
114
- @span_model = ScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day)
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?(@span_model).should be_false
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_false
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_false
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_false
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?(@span_model).should be_true
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
- @span_model = ScopedModel.create!(:start_date => Date.today - 2.days, :end_date => nil)
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?(@span_model).should be_false
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_false
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?(@span_model).should be_true
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
- @span_model = ScopedModel.create!(:start_date => nil, :end_date => Date.today + 2.day)
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_false
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_false
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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
- @span_model = ScopedModel.create!(:start_date => nil, :end_date => nil)
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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?(@span_model).should be_true
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