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.
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