time_span 0.0.1.alpha05 → 0.0.1.beta.01
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.
- data/.gitignore +2 -0
- data/README.md +11 -0
- data/doc/TimeSpan/RelativeTime.html +28 -14
- data/doc/TimeSpan/TimeLine.html +50 -31
- data/doc/TimeSpan/TimeSpan.html +42 -26
- data/doc/created.rid +3 -3
- data/doc/index.html +2 -2
- data/doc/lib/time_span/version_rb.html +1 -1
- data/doc/lib/time_span_rb.html +1 -1
- data/lib/time_span/version.rb +1 -1
- data/lib/time_span.rb +112 -52
- data/spec/time_span/time_span_spec.rb +37 -8
- metadata +6 -4
data/.gitignore
CHANGED
data/README.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Time Span
|
2
|
+
==========
|
3
|
+
|
4
|
+
This gem is still in Alpha. The API might well break between now and release, use at your risk.
|
5
|
+
|
6
|
+
Better documentation will also follow, as I learn how to write Yard docs.
|
7
|
+
|
8
|
+
A RelativeTime can occur with more than one TimeSpan, so must also keep track of the TimeLine to TimeSpan relationship.
|
9
|
+
|
10
|
+
For now I am focused on spec coverage and core code functionality.
|
11
|
+
|
@@ -133,20 +133,34 @@
|
|
133
133
|
|
134
134
|
<div id="description" class="description">
|
135
135
|
|
136
|
+
<p>class <a href="RelativeTime.html">RelativeTime</a>
|
137
|
+
#</p>
|
138
|
+
|
136
139
|
<pre>#</pre>
|
137
140
|
|
138
|
-
<p>
|
139
|
-
|
140
|
-
equal in time, # otherwise, the time relationship are based on position
|
141
|
-
in the main array #</p>
|
141
|
+
<p>public methods:
|
142
|
+
#</p>
|
142
143
|
|
143
|
-
<pre
|
144
|
+
<pre>comparators: < <= == != >= > #
|
145
|
+
work on any two RelativeTime objects on the same TimeLine #
|
146
|
+
positioned? #
|
147
|
+
true if a RelativeTime has been put on a TimeLine # #
|
148
|
+
colinear_with?(RelativeTime.new) #
|
149
|
+
true if both RelativeTime objects are positioned and on same TimeLine #
|
150
|
+
#</pre>
|
151
|
+
|
152
|
+
<p>protected method:
|
153
|
+
#</p>
|
154
|
+
|
155
|
+
<pre>valid_and_comparable_with?(RelativeTime) #
|
156
|
+
true if #
|
157
|
+
#</pre>
|
144
158
|
|
145
159
|
<p>diff cannot be done, it makes no sense, due to the fuzziness
|
146
160
|
#</p>
|
147
161
|
|
148
|
-
<pre>
|
149
|
-
RelativeTime must be within a TimeLine
|
162
|
+
<pre> #
|
163
|
+
RelativeTime must be within a TimeLine #</pre>
|
150
164
|
|
151
165
|
</div><!-- description -->
|
152
166
|
|
@@ -228,7 +242,7 @@ RelativeTime must be within a TimeLine
|
|
228
242
|
|
229
243
|
<div class="method-source-code" id="new-source">
|
230
244
|
<pre>
|
231
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
245
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 261</span>
|
232
246
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-identifier">tline</span>, <span class="ruby-identifier">ref</span>
|
233
247
|
<span class="ruby-ivar">@timeline</span>= <span class="ruby-identifier">tline</span>
|
234
248
|
<span class="ruby-ivar">@reference_to</span>= <span class="ruby-identifier">ref</span>
|
@@ -268,9 +282,9 @@ RelativeTime must be within a TimeLine
|
|
268
282
|
|
269
283
|
<div class="method-source-code" id="colinear_with-3F-source">
|
270
284
|
<pre>
|
271
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
285
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 282</span>
|
272
286
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">colinear_with?</span>(<span class="ruby-identifier">b</span>)
|
273
|
-
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">equal?</span>(<span class="ruby-identifier">b</span>.<span class="ruby-identifier">timeline</span>)
|
287
|
+
<span class="ruby-identifier">b</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">class</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">positioned?</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">positioned?</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">equal?</span>(<span class="ruby-identifier">b</span>.<span class="ruby-identifier">timeline</span>)
|
274
288
|
<span class="ruby-keyword">end</span></pre>
|
275
289
|
</div><!-- colinear_with-3F-source -->
|
276
290
|
|
@@ -301,9 +315,9 @@ RelativeTime must be within a TimeLine
|
|
301
315
|
|
302
316
|
<div class="method-source-code" id="positioned-3F-source">
|
303
317
|
<pre>
|
304
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
318
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 278</span>
|
305
319
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">positioned?</span>
|
306
|
-
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">
|
320
|
+
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">timeline</span> <span class="ruby-operator">&&</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">indices_of</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-keyword">self</span>)
|
307
321
|
<span class="ruby-keyword">end</span></pre>
|
308
322
|
</div><!-- positioned-3F-source -->
|
309
323
|
|
@@ -334,7 +348,7 @@ RelativeTime must be within a TimeLine
|
|
334
348
|
|
335
349
|
<div class="method-source-code" id="to_s-source">
|
336
350
|
<pre>
|
337
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
351
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 266</span>
|
338
352
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
|
339
353
|
<span class="ruby-identifier">reference_to</span>.<span class="ruby-identifier">to_s</span>
|
340
354
|
<span class="ruby-keyword">end</span></pre>
|
@@ -373,7 +387,7 @@ RelativeTime must be within a TimeLine
|
|
373
387
|
|
374
388
|
<div class="method-source-code" id="valid_and_comparable_with-3F-source">
|
375
389
|
<pre>
|
376
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
390
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 289</span>
|
377
391
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">valid_and_comparable_with?</span>(<span class="ruby-identifier">b</span>)
|
378
392
|
<span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">b</span>.<span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">colinear_with?</span>(<span class="ruby-identifier">b</span>)
|
379
393
|
<span class="ruby-keyword">end</span></pre>
|
data/doc/TimeSpan/TimeLine.html
CHANGED
@@ -143,6 +143,33 @@
|
|
143
143
|
|
144
144
|
<div id="description" class="description">
|
145
145
|
|
146
|
+
<p>class <a href="TimeLine.html">TimeLine</a>
|
147
|
+
#</p>
|
148
|
+
|
149
|
+
<pre>#</pre>
|
150
|
+
|
151
|
+
<p><a href="TimeLine.html">TimeLine</a> is how <a
|
152
|
+
href="RelativeTime.html">RelativeTime</a> objects are related to each
|
153
|
+
other, they have to have the same #</p>
|
154
|
+
|
155
|
+
<pre>frame of reference. #
|
156
|
+
#</pre>
|
157
|
+
|
158
|
+
<p>instance methods:
|
159
|
+
#</p>
|
160
|
+
|
161
|
+
<pre> #
|
162
|
+
to_s -- convenience method to see which object we have #
|
163
|
+
position_of(obj) -- its location on the TimeLine #
|
164
|
+
increase_after(position, amount) -- make room in the index for an insertion #
|
165
|
+
append (obj) -- add obj to end of the TimeLine #
|
166
|
+
append_to_next(relative_object, object, relative) at relative offset to relative_object, put obj #
|
167
|
+
insert_before_next(relative_object, object, relative) inserts into new time slot relative to relative_object
|
168
|
+
insert_at(position, object) -- places object at position, appending if equal time exists #
|
169
|
+
remove(obj) -- remove object from the TimeLine #
|
170
|
+
compress! -- compresses the TimeLine, removing [] and adjusting the index accordingly #
|
171
|
+
#</pre>
|
172
|
+
|
146
173
|
</div><!-- description -->
|
147
174
|
|
148
175
|
|
@@ -240,7 +267,7 @@
|
|
240
267
|
|
241
268
|
<div class="method-source-code" id="new-source">
|
242
269
|
<pre>
|
243
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
270
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 156</span>
|
244
271
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">name</span>=<span class="ruby-string">""</span>)
|
245
272
|
<span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span>
|
246
273
|
<span class="ruby-ivar">@line</span> = []
|
@@ -275,13 +302,13 @@
|
|
275
302
|
|
276
303
|
<div class="method-description">
|
277
304
|
|
278
|
-
|
305
|
+
<p>add to the end of the <a href="TimeLine.html">TimeLine</a></p>
|
279
306
|
|
280
307
|
|
281
308
|
|
282
309
|
<div class="method-source-code" id="append-source">
|
283
310
|
<pre>
|
284
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
311
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 177</span>
|
285
312
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">append</span>(<span class="ruby-identifier">obj</span>)
|
286
313
|
<span class="ruby-identifier">insert_at</span>(<span class="ruby-ivar">@line</span>.<span class="ruby-identifier">size</span>, <span class="ruby-identifier">obj</span>)
|
287
314
|
<span class="ruby-keyword">end</span></pre>
|
@@ -308,13 +335,13 @@
|
|
308
335
|
|
309
336
|
<div class="method-description">
|
310
337
|
|
311
|
-
|
338
|
+
<p>inserts to the end of the relative object’s time, becoming equal with it</p>
|
312
339
|
|
313
340
|
|
314
341
|
|
315
342
|
<div class="method-source-code" id="append_to_next-source">
|
316
343
|
<pre>
|
317
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
344
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 182</span>
|
318
345
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">append_to_next</span>(<span class="ruby-identifier">relative_obj</span>, <span class="ruby-identifier">obj</span>, <span class="ruby-identifier">relative</span>=<span class="ruby-value">1</span>)
|
319
346
|
<span class="ruby-identifier">insert_at</span>(<span class="ruby-identifier">position_of</span>(<span class="ruby-identifier">relative_obj</span>)<span class="ruby-operator">+</span><span class="ruby-identifier">relative</span>, <span class="ruby-identifier">obj</span>)
|
320
347
|
<span class="ruby-keyword">end</span></pre>
|
@@ -350,24 +377,19 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
350
377
|
|
351
378
|
<div class="method-source-code" id="compress-21-source">
|
352
379
|
<pre>
|
353
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
380
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 219</span>
|
354
381
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">compress!</span>
|
355
|
-
|
356
382
|
<span class="ruby-identifier">mod_level</span> = <span class="ruby-value">0</span>
|
357
383
|
<span class="ruby-identifier">offsets</span> = []
|
358
384
|
<span class="ruby-value">0</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
|
359
385
|
<span class="ruby-identifier">mod_level</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@line</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">empty?</span>
|
360
386
|
<span class="ruby-identifier">offsets</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">mod_level</span>
|
361
387
|
<span class="ruby-keyword">end</span>
|
362
|
-
|
363
388
|
<span class="ruby-comment">## poor man's transaction. Don't do directly on indices_of so less chance of interruption</span>
|
364
389
|
<span class="ruby-identifier">indices</span> = <span class="ruby-identifier">indices_of</span>
|
365
|
-
|
366
|
-
<span class="ruby-comment">## refactor to use increase_after</span>
|
367
390
|
<span class="ruby-identifier">indices</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
|
368
391
|
<span class="ruby-identifier">indices</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">indices</span>[<span class="ruby-identifier">key</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">offsets</span>[<span class="ruby-identifier">indices</span>[<span class="ruby-identifier">key</span>]]
|
369
392
|
<span class="ruby-keyword">end</span>
|
370
|
-
|
371
393
|
<span class="ruby-identifier">indices_of</span> = <span class="ruby-identifier">indices</span>
|
372
394
|
<span class="ruby-ivar">@line</span>.<span class="ruby-identifier">delete</span>([])
|
373
395
|
<span class="ruby-keyword">end</span></pre>
|
@@ -400,7 +422,7 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
400
422
|
|
401
423
|
<div class="method-source-code" id="increase_after-source">
|
402
424
|
<pre>
|
403
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
425
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 168</span>
|
404
426
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">increase_after</span>(<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">by</span>=<span class="ruby-value">1</span>)
|
405
427
|
<span class="ruby-ivar">@indices_of</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
|
406
428
|
<span class="ruby-ivar">@indices_of</span>[<span class="ruby-identifier">key</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">by</span> <span class="ruby-keyword">if</span> (<span class="ruby-ivar">@indices_of</span>[<span class="ruby-identifier">key</span>] <span class="ruby-operator">>=</span> <span class="ruby-identifier">pos</span>)
|
@@ -429,24 +451,23 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
429
451
|
|
430
452
|
<div class="method-description">
|
431
453
|
|
432
|
-
<p>
|
454
|
+
<p>place obj at the numbered position</p>
|
433
455
|
|
434
456
|
|
435
457
|
|
436
458
|
<div class="method-source-code" id="insert_at-source">
|
437
459
|
<pre>
|
438
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
460
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 195</span>
|
439
461
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">insert_at</span>(<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">obj</span>)
|
440
|
-
|
441
462
|
<span class="ruby-identifier">raise</span> <span class="ruby-string">"can only add a time to its own timeline"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">timeline</span>.<span class="ruby-identifier">equal?</span> <span class="ruby-keyword">self</span>
|
442
463
|
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>].<span class="ruby-identifier">nil?</span>
|
443
464
|
<span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>] = [<span class="ruby-identifier">obj</span>]
|
444
|
-
<span class="ruby-ivar">@indices_of</span>[<span class="ruby-identifier">obj</span>] = <span class="ruby-identifier">pos</span>
|
445
465
|
<span class="ruby-keyword">else</span>
|
446
466
|
<span class="ruby-identifier">op</span> = <span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>].<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">Array</span>) <span class="ruby-operator">?</span> <span class="ruby-string">'<<'</span> <span class="ruby-operator">:</span> <span class="ruby-string">'='</span>
|
447
|
-
<span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>].<span class="ruby-identifier">send</span>(<span class="ruby-identifier">op</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">obj</span>)
|
448
|
-
<span class="ruby-
|
467
|
+
<span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>].<span class="ruby-identifier">send</span>(<span class="ruby-identifier">op</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">obj</span>).<span class="ruby-identifier">uniq!</span> <span class="ruby-comment"># no duplicates in same position</span>
|
468
|
+
<span class="ruby-comment"># dup in diff position overwrites below</span>
|
449
469
|
<span class="ruby-keyword">end</span>
|
470
|
+
<span class="ruby-ivar">@indices_of</span>[<span class="ruby-identifier">obj</span>] = <span class="ruby-identifier">pos</span>
|
450
471
|
<span class="ruby-keyword">end</span></pre>
|
451
472
|
</div><!-- insert_at-source -->
|
452
473
|
|
@@ -471,13 +492,13 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
471
492
|
|
472
493
|
<div class="method-description">
|
473
494
|
|
474
|
-
|
495
|
+
<p>inserts into a new space before the relative object (first parameter)</p>
|
475
496
|
|
476
497
|
|
477
498
|
|
478
499
|
<div class="method-source-code" id="insert_before_next-source">
|
479
500
|
<pre>
|
480
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
501
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 187</span>
|
481
502
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">insert_before_next</span>(<span class="ruby-identifier">relative_obj</span>, <span class="ruby-identifier">obj</span>, <span class="ruby-identifier">relative_offset</span>=<span class="ruby-value">1</span>)
|
482
503
|
<span class="ruby-identifier">relative_position</span> = <span class="ruby-identifier">position_of</span>(<span class="ruby-identifier">relative_obj</span>)
|
483
504
|
<span class="ruby-identifier">increase_after</span>(<span class="ruby-identifier">relative_position</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">relative_offset</span>, <span class="ruby-identifier">relative_offset</span>)
|
@@ -507,13 +528,13 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
507
528
|
|
508
529
|
<div class="method-description">
|
509
530
|
|
510
|
-
|
531
|
+
<p>indices methods</p>
|
511
532
|
|
512
533
|
|
513
534
|
|
514
535
|
<div class="method-source-code" id="position_of-source">
|
515
536
|
<pre>
|
516
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
537
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 164</span>
|
517
538
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">position_of</span>(<span class="ruby-identifier">obj</span>)
|
518
539
|
<span class="ruby-ivar">@indices_of</span>[<span class="ruby-identifier">obj</span>]
|
519
540
|
<span class="ruby-keyword">end</span></pre>
|
@@ -540,23 +561,21 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
540
561
|
|
541
562
|
<div class="method-description">
|
542
563
|
|
543
|
-
|
564
|
+
<p>cannot remove [] or the @<a
|
565
|
+
href="TimeLine.html#attribute-i-indices_of">indices_of</a> will be wrong
|
566
|
+
call compress to remove the extra []s</p>
|
544
567
|
|
545
568
|
|
546
569
|
|
547
570
|
<div class="method-source-code" id="remove-source">
|
548
571
|
<pre>
|
549
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
572
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 209</span>
|
550
573
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">remove</span>(<span class="ruby-identifier">obj</span>)
|
551
|
-
<span class="ruby-comment"># cannot remove [] or the @indices_of will be wrong</span>
|
552
|
-
<span class="ruby-comment"># call to #compress to remove the extra []s</span>
|
553
574
|
<span class="ruby-identifier">pos</span> = <span class="ruby-identifier">position_of</span>(<span class="ruby-identifier">obj</span>)
|
554
|
-
|
555
575
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-comment"># do nothing if it isn't there'</span>
|
556
|
-
<span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">obj</span>)
|
557
|
-
<span class="ruby-ivar">@indices_of</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">obj</span>)
|
576
|
+
<span class="ruby-ivar">@line</span>[<span class="ruby-identifier">pos</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">obj</span>) <span class="ruby-comment"># remove from list</span>
|
577
|
+
<span class="ruby-ivar">@indices_of</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">obj</span>) <span class="ruby-comment"># remove from index</span>
|
558
578
|
<span class="ruby-keyword">end</span>
|
559
|
-
|
560
579
|
<span class="ruby-keyword">end</span></pre>
|
561
580
|
</div><!-- remove-source -->
|
562
581
|
|
@@ -587,7 +606,7 @@ href="TimeLine.html#attribute-i-indices_of">indices_of</a></p>
|
|
587
606
|
|
588
607
|
<div class="method-source-code" id="to_s-source">
|
589
608
|
<pre>
|
590
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
609
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 152</span>
|
591
610
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
|
592
611
|
<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
|
593
612
|
<span class="ruby-keyword">end</span></pre>
|
data/doc/TimeSpan/TimeSpan.html
CHANGED
@@ -169,6 +169,13 @@
|
|
169
169
|
|
170
170
|
<div id="description" class="description">
|
171
171
|
|
172
|
+
<p>this classes’ object have a starting and ending <a
|
173
|
+
href="RelativeTime.html">RelativeTime</a>, and both times must be on the
|
174
|
+
same <a href="TimeLine.html">TimeLine</a></p>
|
175
|
+
|
176
|
+
<p>it implements a large selection of comparators, both for start / end times
|
177
|
+
(single time compartors), and also range comparators</p>
|
178
|
+
|
172
179
|
</div><!-- description -->
|
173
180
|
|
174
181
|
|
@@ -243,18 +250,18 @@
|
|
243
250
|
|
244
251
|
<div class="method-description">
|
245
252
|
|
246
|
-
|
253
|
+
|
247
254
|
|
248
255
|
|
249
256
|
|
250
257
|
<div class="method-source-code" id="new-source">
|
251
258
|
<pre>
|
252
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
259
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 14</span>
|
253
260
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">starting_at</span>, <span class="ruby-identifier">ending_at</span>)
|
254
261
|
<span class="ruby-identifier">raise</span> <span class="ruby-string">"Cannot make a span unless both points are on the same timeline"</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">starting_at</span>.<span class="ruby-identifier">colinear_with?</span>(<span class="ruby-identifier">ending_at</span>)
|
255
262
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">starts</span> = <span class="ruby-identifier">starting_at</span>
|
256
263
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">ends</span> = <span class="ruby-identifier">ending_at</span>
|
257
|
-
<span class="ruby-identifier">starting_at</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">RelativeTime</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">ending_at</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">RelativeTime</span>)
|
264
|
+
<span class="ruby-identifier">starting_at</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">RelativeTime</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">ending_at</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">RelativeTime</span>) <span class="ruby-operator">&&</span> (<span class="ruby-identifier">starting_at</span> <span class="ruby-operator"><=</span> <span class="ruby-identifier">ending_at</span>)
|
258
265
|
<span class="ruby-keyword">end</span></pre>
|
259
266
|
</div><!-- new-source -->
|
260
267
|
|
@@ -291,7 +298,7 @@
|
|
291
298
|
|
292
299
|
<div class="method-source-code" id="21-3D-source">
|
293
300
|
<pre>
|
294
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
301
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 98</span>
|
295
302
|
<span class="ruby-keyword">def</span> <span class="ruby-operator">!=</span> (<span class="ruby-identifier">b</span>)
|
296
303
|
<span class="ruby-operator">!</span><span class="ruby-identifier">end_with</span>(<span class="ruby-identifier">b</span>) <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">starts_with</span>(<span class="ruby-identifier">b</span>)
|
297
304
|
<span class="ruby-keyword">end</span></pre>
|
@@ -324,7 +331,7 @@
|
|
324
331
|
|
325
332
|
<div class="method-source-code" id="3C-source">
|
326
333
|
<pre>
|
327
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
334
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 102</span>
|
328
335
|
<span class="ruby-keyword">def</span> <span class="ruby-operator"><</span> (<span class="ruby-identifier">b</span>)
|
329
336
|
<span class="ruby-identifier">ends_before_other_starts?</span>(<span class="ruby-identifier">b</span>)
|
330
337
|
<span class="ruby-keyword">end</span></pre>
|
@@ -352,12 +359,16 @@
|
|
352
359
|
<div class="method-description">
|
353
360
|
|
354
361
|
<p>>= and <= intentionally not defined;</p>
|
362
|
+
|
363
|
+
<pre>logically can only mean starts_after? or ends_before? respectively
|
364
|
+
which are basically aliased to > & <
|
365
|
+
unless it is meant < XOR =</pre>
|
355
366
|
|
356
367
|
|
357
368
|
|
358
369
|
<div class="method-source-code" id="3D-3D-source">
|
359
370
|
<pre>
|
360
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
371
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 94</span>
|
361
372
|
<span class="ruby-keyword">def</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">b</span>)
|
362
373
|
<span class="ruby-identifier">ends_with?</span>(<span class="ruby-identifier">b</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">starts_with?</span>(<span class="ruby-identifier">b</span>)
|
363
374
|
<span class="ruby-keyword">end</span></pre>
|
@@ -390,7 +401,7 @@
|
|
390
401
|
|
391
402
|
<div class="method-source-code" id="3E-source">
|
392
403
|
<pre>
|
393
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
404
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 106</span>
|
394
405
|
<span class="ruby-keyword">def</span> <span class="ruby-operator">></span> (<span class="ruby-identifier">b</span>)
|
395
406
|
<span class="ruby-identifier">starts_after_other_ends?</span>(<span class="ruby-identifier">b</span>)
|
396
407
|
<span class="ruby-keyword">end</span></pre>
|
@@ -423,7 +434,7 @@
|
|
423
434
|
|
424
435
|
<div class="method-source-code" id="contained_fully_inside-3F-source">
|
425
436
|
<pre>
|
426
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
437
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 110</span>
|
427
438
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">contained_fully_inside?</span>(<span class="ruby-identifier">b</span>)
|
428
439
|
<span class="ruby-identifier">starts_after?</span>(<span class="ruby-identifier">b</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">ends_before?</span>(<span class="ruby-identifier">b</span>)
|
429
440
|
<span class="ruby-keyword">end</span></pre>
|
@@ -456,7 +467,7 @@
|
|
456
467
|
|
457
468
|
<div class="method-source-code" id="contained_inside-3F-source">
|
458
469
|
<pre>
|
459
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
470
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 114</span>
|
460
471
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">contained_inside?</span>(<span class="ruby-identifier">b</span>)
|
461
472
|
<span class="ruby-identifier">starts_on_or_after?</span>(<span class="ruby-identifier">b</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">ends_on_or_before?</span>(<span class="ruby-identifier">b</span>)
|
462
473
|
<span class="ruby-keyword">end</span></pre>
|
@@ -489,7 +500,7 @@
|
|
489
500
|
|
490
501
|
<div class="method-source-code" id="contains-3F-source">
|
491
502
|
<pre>
|
492
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
503
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 122</span>
|
493
504
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">contains?</span>(<span class="ruby-identifier">b</span>)
|
494
505
|
<span class="ruby-identifier">starts_before_or_with?</span>(<span class="ruby-identifier">b</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">ends_on_or_after?</span>(<span class="ruby-identifier">b</span>)
|
495
506
|
<span class="ruby-keyword">end</span></pre>
|
@@ -522,7 +533,7 @@
|
|
522
533
|
|
523
534
|
<div class="method-source-code" id="contains_fully-3F-source">
|
524
535
|
<pre>
|
525
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
536
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 118</span>
|
526
537
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">contains_fully?</span>(<span class="ruby-identifier">b</span>)
|
527
538
|
<span class="ruby-identifier">starts_before?</span>(<span class="ruby-identifier">b</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">ends_after?</span>(<span class="ruby-identifier">b</span>)
|
528
539
|
<span class="ruby-keyword">end</span></pre>
|
@@ -555,7 +566,7 @@
|
|
555
566
|
|
556
567
|
<div class="method-source-code" id="ends_after-3F-source">
|
557
568
|
<pre>
|
558
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
569
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 60</span>
|
559
570
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_after?</span>(<span class="ruby-identifier">b</span>)
|
560
571
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator">></span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
561
572
|
<span class="ruby-keyword">end</span></pre>
|
@@ -588,7 +599,7 @@
|
|
588
599
|
|
589
600
|
<div class="method-source-code" id="ends_as_other_starts-3F-source">
|
590
601
|
<pre>
|
591
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
602
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 72</span>
|
592
603
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_as_other_starts?</span>(<span class="ruby-identifier">b</span>)
|
593
604
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
594
605
|
<span class="ruby-keyword">end</span></pre>
|
@@ -621,7 +632,7 @@
|
|
621
632
|
|
622
633
|
<div class="method-source-code" id="ends_before-3F-source">
|
623
634
|
<pre>
|
624
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
635
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 48</span>
|
625
636
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_before?</span>(<span class="ruby-identifier">b</span>)
|
626
637
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
627
638
|
<span class="ruby-keyword">end</span></pre>
|
@@ -654,7 +665,7 @@
|
|
654
665
|
|
655
666
|
<div class="method-source-code" id="ends_before_other_starts-3F-source">
|
656
667
|
<pre>
|
657
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
668
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 68</span>
|
658
669
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_before_other_starts?</span>(<span class="ruby-identifier">b</span>)
|
659
670
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
660
671
|
<span class="ruby-keyword">end</span></pre>
|
@@ -687,7 +698,7 @@
|
|
687
698
|
|
688
699
|
<div class="method-source-code" id="ends_on_or_after-3F-source">
|
689
700
|
<pre>
|
690
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
701
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 56</span>
|
691
702
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_on_or_after?</span>(<span class="ruby-identifier">b</span>)
|
692
703
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator">>=</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
693
704
|
<span class="ruby-keyword">end</span></pre>
|
@@ -720,7 +731,7 @@
|
|
720
731
|
|
721
732
|
<div class="method-source-code" id="ends_on_or_before-3F-source">
|
722
733
|
<pre>
|
723
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
734
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 52</span>
|
724
735
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_on_or_before?</span>(<span class="ruby-identifier">b</span>)
|
725
736
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator"><=</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
726
737
|
<span class="ruby-keyword">end</span></pre>
|
@@ -753,7 +764,7 @@
|
|
753
764
|
|
754
765
|
<div class="method-source-code" id="ends_with-3F-source">
|
755
766
|
<pre>
|
756
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
767
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 64</span>
|
757
768
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ends_with?</span>(<span class="ruby-identifier">b</span>)
|
758
769
|
<span class="ruby-identifier">ends</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
759
770
|
<span class="ruby-keyword">end</span></pre>
|
@@ -786,7 +797,7 @@
|
|
786
797
|
|
787
798
|
<div class="method-source-code" id="starts_after-3F-source">
|
788
799
|
<pre>
|
789
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
800
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 31</span>
|
790
801
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_after?</span>(<span class="ruby-identifier">b</span>)
|
791
802
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator">></span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
792
803
|
<span class="ruby-keyword">end</span></pre>
|
@@ -819,7 +830,7 @@
|
|
819
830
|
|
820
831
|
<div class="method-source-code" id="starts_after_other_ends-3F-source">
|
821
832
|
<pre>
|
822
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
833
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 76</span>
|
823
834
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_after_other_ends?</span>(<span class="ruby-identifier">b</span>)
|
824
835
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator">></span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
825
836
|
<span class="ruby-keyword">end</span></pre>
|
@@ -852,7 +863,7 @@
|
|
852
863
|
|
853
864
|
<div class="method-source-code" id="starts_as_other_ends-3F-source">
|
854
865
|
<pre>
|
855
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
866
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 80</span>
|
856
867
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_as_other_ends?</span>(<span class="ruby-identifier">b</span>)
|
857
868
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">ends</span>
|
858
869
|
<span class="ruby-keyword">end</span></pre>
|
@@ -879,13 +890,18 @@
|
|
879
890
|
|
880
891
|
<div class="method-description">
|
881
892
|
|
882
|
-
|
893
|
+
<pre>#</pre>
|
894
|
+
|
895
|
+
<p>single <a href="RelativeTime.html">RelativeTime</a> comparators
|
896
|
+
#</p>
|
897
|
+
|
898
|
+
<pre>#</pre>
|
883
899
|
|
884
900
|
|
885
901
|
|
886
902
|
<div class="method-source-code" id="starts_before-3F-source">
|
887
903
|
<pre>
|
888
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
904
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 27</span>
|
889
905
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_before?</span>(<span class="ruby-identifier">b</span>)
|
890
906
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
891
907
|
<span class="ruby-keyword">end</span></pre>
|
@@ -918,7 +934,7 @@
|
|
918
934
|
|
919
935
|
<div class="method-source-code" id="starts_before_or_with-3F-source">
|
920
936
|
<pre>
|
921
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
937
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 44</span>
|
922
938
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_before_or_with?</span>(<span class="ruby-identifier">b</span>)
|
923
939
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator"><=</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
924
940
|
<span class="ruby-keyword">end</span></pre>
|
@@ -951,7 +967,7 @@
|
|
951
967
|
|
952
968
|
<div class="method-source-code" id="starts_on_or_after-3F-source">
|
953
969
|
<pre>
|
954
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
970
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 35</span>
|
955
971
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_on_or_after?</span>(<span class="ruby-identifier">b</span>)
|
956
972
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator">>=</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
957
973
|
<span class="ruby-keyword">end</span></pre>
|
@@ -984,7 +1000,7 @@
|
|
984
1000
|
|
985
1001
|
<div class="method-source-code" id="starts_with-3F-source">
|
986
1002
|
<pre>
|
987
|
-
<span class="ruby-comment"># File lib/time_span.rb, line
|
1003
|
+
<span class="ruby-comment"># File lib/time_span.rb, line 40</span>
|
988
1004
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">starts_with?</span>(<span class="ruby-identifier">b</span>)
|
989
1005
|
<span class="ruby-identifier">starts</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">starts</span>
|
990
1006
|
<span class="ruby-keyword">end</span></pre>
|
data/doc/created.rid
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
Sun, 05 Feb 2012 20:05:38 -0800
|
2
2
|
./spec/spec_helper.rb Mon, 30 Jan 2012 19:58:16 -0800
|
3
3
|
./spec/time_span/time_span_spec.rb Sat, 04 Feb 2012 20:55:54 -0800
|
4
|
-
./lib/time_span/version.rb Sat, 04 Feb 2012
|
5
|
-
./lib/time_span.rb
|
4
|
+
./lib/time_span/version.rb Sat, 04 Feb 2012 21:03:20 -0800
|
5
|
+
./lib/time_span.rb Sun, 05 Feb 2012 20:01:10 -0800
|
6
6
|
./Gemfile Mon, 30 Jan 2012 19:39:04 -0800
|
7
7
|
./Rakefile Mon, 30 Jan 2012 19:39:04 -0800
|
data/doc/index.html
CHANGED
@@ -123,10 +123,10 @@
|
|
123
123
|
|
124
124
|
<li><a href="TimeSpan/TimeSpan.html#method-i-starts_with-3F">#starts_with? — TimeSpan::TimeSpan</a></li>
|
125
125
|
|
126
|
-
<li><a href="TimeSpan/RelativeTime.html#method-i-to_s">#to_s — TimeSpan::RelativeTime</a></li>
|
127
|
-
|
128
126
|
<li><a href="TimeSpan/TimeLine.html#method-i-to_s">#to_s — TimeSpan::TimeLine</a></li>
|
129
127
|
|
128
|
+
<li><a href="TimeSpan/RelativeTime.html#method-i-to_s">#to_s — TimeSpan::RelativeTime</a></li>
|
129
|
+
|
130
130
|
<li><a href="TimeSpan/RelativeTime.html#method-i-valid_and_comparable_with-3F">#valid_and_comparable_with? — TimeSpan::RelativeTime</a></li>
|
131
131
|
|
132
132
|
</ul>
|
data/doc/lib/time_span_rb.html
CHANGED
data/lib/time_span/version.rb
CHANGED
data/lib/time_span.rb
CHANGED
@@ -2,21 +2,34 @@
|
|
2
2
|
|
3
3
|
module TimeSpan
|
4
4
|
|
5
|
+
#######################################################################################################
|
6
|
+
# this classes' object have a starting and ending RelativeTime, and both times must be on the same TimeLine
|
7
|
+
#
|
8
|
+
# it implements a large selection of comparators, both for start / end times (single time compartors),
|
9
|
+
# and also range comparators
|
5
10
|
class TimeSpan
|
6
11
|
|
7
|
-
attr_accessor :starts, :ends # RelativeTime objects
|
12
|
+
attr_accessor :starts, :ends, :time_line, :name # RelativeTime objects
|
8
13
|
|
9
|
-
|
10
|
-
|
11
|
-
|
14
|
+
def initialize(starting_at, ending_at, t_line, nom="(unnamed)")
|
15
|
+
raise "Cannot make a span unless both points are on the same time_line" unless starting_at.colinear_with?(ending_at)
|
16
|
+
self.starts = starting_at
|
17
|
+
self.ends = ending_at
|
18
|
+
self.time_line = t_line
|
19
|
+
self.time_line.spans << self
|
20
|
+
self.name = nom
|
21
|
+
starting_at.kind_of?(RelativeTime) && ending_at.kind_of?(RelativeTime) && (starting_at <= ending_at)
|
22
|
+
end
|
12
23
|
|
13
|
-
def
|
14
|
-
|
15
|
-
self.starts = starting_at
|
16
|
-
self.ends = ending_at
|
17
|
-
starting_at.kind_of?(RelativeTime) && ending_at.kind_of?(RelativeTime)
|
24
|
+
def endpoint_statuses
|
25
|
+
{self => [self.starts.reference_to, self.ends.reference_to]}
|
18
26
|
end
|
19
27
|
|
28
|
+
#######################################################################################################
|
29
|
+
# #
|
30
|
+
# single RelativeTime comparators #
|
31
|
+
# #
|
32
|
+
#######################################################################################################
|
20
33
|
|
21
34
|
def starts_before?(b)
|
22
35
|
starts < b.starts
|
@@ -80,6 +93,9 @@ module TimeSpan
|
|
80
93
|
##################################
|
81
94
|
|
82
95
|
## >= and <= intentionally not defined;
|
96
|
+
## logically can only mean starts_after? or ends_before? respectively
|
97
|
+
## which are basically aliased to > & <
|
98
|
+
## unless it is meant < XOR =
|
83
99
|
|
84
100
|
|
85
101
|
def == (b)
|
@@ -115,39 +131,84 @@ module TimeSpan
|
|
115
131
|
end
|
116
132
|
|
117
133
|
end
|
118
|
-
|
134
|
+
|
135
|
+
|
136
|
+
#######################################################################################################
|
137
|
+
# class TimeLine #
|
138
|
+
# #
|
139
|
+
# TimeLine is how RelativeTime objects are related to each other, they have to have the same #
|
140
|
+
# frame of reference. #
|
141
|
+
# #
|
142
|
+
# instance methods: #
|
143
|
+
# #
|
144
|
+
# to_s -- convenience method to see which object we have #
|
145
|
+
# position_of(obj) -- its location on the TimeLine #
|
146
|
+
# increase_after(position, amount) -- make room in the index for an insertion #
|
147
|
+
# append (obj) -- add obj to end of the TimeLine #
|
148
|
+
# append_to_next(relative_object, object, relative) at relative offset to relative_object, put obj #
|
149
|
+
# insert_before_next(relative_object, object, relative) inserts into new time slot relative to relative_object
|
150
|
+
# insert_at(position, object) -- places object at position, appending if equal time exists #
|
151
|
+
# remove(obj) -- remove object from the TimeLine #
|
152
|
+
# compress! -- compresses the TimeLine, removing [] and adjusting the index accordingly #
|
153
|
+
# #
|
154
|
+
#######################################################################################################
|
119
155
|
class TimeLine < Array
|
120
156
|
|
121
|
-
attr_accessor :line, :indices_of, :name
|
157
|
+
attr_accessor :line, :indices_of, :name, :spans
|
122
158
|
|
123
159
|
def to_s
|
124
160
|
name.to_s
|
125
161
|
end
|
126
162
|
|
163
|
+
def inspect
|
164
|
+
line.inspect + name
|
165
|
+
end
|
166
|
+
|
167
|
+
def all_endpoint_statuses
|
168
|
+
spans.inject({}){ |acc, span| acc.merge!(span.endpoint_statuses) }
|
169
|
+
end
|
170
|
+
|
171
|
+
## attached times only
|
172
|
+
def relative_times
|
173
|
+
indices_of.keys
|
174
|
+
end
|
175
|
+
|
176
|
+
def all_relative_time_statuses
|
177
|
+
relative_times.inject([]) {|acc, v| acc << v.reference_to }
|
178
|
+
end
|
179
|
+
|
127
180
|
def initialize(name="")
|
128
181
|
@name = name
|
129
182
|
@line = []
|
130
183
|
@indices_of = {}
|
184
|
+
@spans = []
|
131
185
|
end
|
132
186
|
|
187
|
+
## indices methods
|
188
|
+
|
133
189
|
def position_of(obj)
|
134
190
|
@indices_of[obj]
|
135
191
|
end
|
136
192
|
|
137
|
-
def append(obj)
|
138
|
-
insert_at(@line.size, obj)
|
139
|
-
end
|
140
|
-
|
141
193
|
def increase_after(pos, by=1)
|
142
194
|
@indices_of.each_key do |key|
|
143
195
|
@indices_of[key] += by if (@indices_of[key] >= pos)
|
144
196
|
end
|
145
197
|
end
|
146
198
|
|
199
|
+
## insertion
|
200
|
+
|
201
|
+
# add to the end of the TimeLine
|
202
|
+
def append(obj)
|
203
|
+
insert_at(@line.size, obj)
|
204
|
+
end
|
205
|
+
|
206
|
+
# inserts to the end of the relative object's time, becoming equal with it
|
147
207
|
def append_to_next(relative_obj, obj, relative=1)
|
148
208
|
insert_at(position_of(relative_obj)+relative, obj)
|
149
209
|
end
|
150
210
|
|
211
|
+
## inserts into a new space before the relative object (first parameter)
|
151
212
|
def insert_before_next(relative_obj, obj, relative_offset=1)
|
152
213
|
relative_position = position_of(relative_obj)
|
153
214
|
increase_after(relative_position + relative_offset, relative_offset)
|
@@ -155,76 +216,75 @@ module TimeSpan
|
|
155
216
|
insert_at(relative_position+relative_offset, obj)
|
156
217
|
end
|
157
218
|
|
158
|
-
##
|
219
|
+
## place obj at the numbered position
|
159
220
|
def insert_at(pos, obj)
|
160
|
-
|
161
|
-
raise "can only add a time to its own timeline" unless obj.timeline.equal? self
|
221
|
+
raise "can only add a time to its own time_line" unless obj.time_line.equal? self
|
162
222
|
if @line[pos].nil?
|
163
223
|
@line[pos] = [obj]
|
164
|
-
@indices_of[obj] = pos
|
165
224
|
else
|
166
225
|
op = @line[pos].kind_of?(Array) ? '<<' : '='
|
167
|
-
@line[pos].send(op.to_sym, obj)
|
168
|
-
|
226
|
+
@line[pos].send(op.to_sym, obj).uniq! # no duplicates in same position
|
227
|
+
# dup in diff position overwrites below
|
169
228
|
end
|
229
|
+
@indices_of[obj] = pos
|
170
230
|
end
|
171
231
|
|
232
|
+
# cannot remove [] or the @indices_of will be wrong
|
233
|
+
# call #compress to remove the extra []s
|
172
234
|
def remove(obj)
|
173
|
-
# cannot remove [] or the @indices_of will be wrong
|
174
|
-
# call to #compress to remove the extra []s
|
175
235
|
pos = position_of(obj)
|
176
|
-
|
177
236
|
if pos # do nothing if it isn't there'
|
178
|
-
@line[pos].delete(obj)
|
179
|
-
@indices_of.delete(obj)
|
237
|
+
@line[pos].delete(obj) # remove from list
|
238
|
+
@indices_of.delete(obj) # remove from index
|
180
239
|
end
|
181
|
-
|
182
240
|
end
|
183
241
|
|
184
242
|
## removes all [] elements, and decrements accordingly the @indices_of
|
185
243
|
## ideally this should be transactional
|
186
|
-
|
187
244
|
def compress!
|
188
|
-
|
189
245
|
mod_level = 0
|
190
246
|
offsets = []
|
191
247
|
0.upto(line.size-1) do |i|
|
192
248
|
mod_level -= 1 if @line[i].empty?
|
193
249
|
offsets << mod_level
|
194
250
|
end
|
195
|
-
|
196
251
|
## poor man's transaction. Don't do directly on indices_of so less chance of interruption
|
197
252
|
indices = indices_of
|
198
|
-
|
199
|
-
## refactor to use increase_after
|
200
253
|
indices.each_key do |key|
|
201
254
|
indices[key] = indices[key] + offsets[indices[key]]
|
202
255
|
end
|
203
|
-
|
204
256
|
indices_of = indices
|
205
257
|
@line.delete([])
|
206
258
|
end
|
207
259
|
|
208
260
|
end
|
209
261
|
|
210
|
-
|
211
|
-
#
|
212
|
-
#
|
213
|
-
#
|
214
|
-
#
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
|
220
|
-
|
262
|
+
#######################################################################################################
|
263
|
+
# class RelativeTime #
|
264
|
+
# #
|
265
|
+
# public methods: #
|
266
|
+
# comparators: < <= == != >= > #
|
267
|
+
# work on any two RelativeTime objects on the same TimeLine #
|
268
|
+
# positioned? #
|
269
|
+
# true if a RelativeTime has been put on a TimeLine # #
|
270
|
+
# colinear_with?(RelativeTime.new) #
|
271
|
+
# true if both RelativeTime objects are positioned and on same TimeLine #
|
272
|
+
# #
|
273
|
+
# protected method: #
|
274
|
+
# valid_and_comparable_with?(RelativeTime) #
|
275
|
+
# true if #
|
276
|
+
# #
|
277
|
+
# diff cannot be done, it makes no sense, due to the fuzziness #
|
278
|
+
# #
|
279
|
+
# RelativeTime must be within a TimeLine #
|
280
|
+
#######################################################################################################
|
221
281
|
class RelativeTime
|
222
282
|
|
223
|
-
attr_accessor :
|
283
|
+
attr_accessor :time_line, :reference_to # reference_to should respond_to? :to_s
|
224
284
|
|
225
|
-
# create a realtive time *within a
|
285
|
+
# create a realtive time *within a time_line* after position
|
226
286
|
def initialize tline, ref
|
227
|
-
@
|
287
|
+
@time_line= tline
|
228
288
|
@reference_to= ref
|
229
289
|
end
|
230
290
|
|
@@ -235,24 +295,24 @@ module TimeSpan
|
|
235
295
|
## any method on fixnum with 1 RelativeTime param can be in the list below
|
236
296
|
%w{< <= == != >= >}.each{ |meth|
|
237
297
|
self.send(:define_method, meth) {|b|
|
238
|
-
raise "can only compare to other times on the same
|
239
|
-
self.
|
298
|
+
raise "can only compare to other times on the same time_line." unless valid_and_comparable_with?(b) # can NOT compare across TimeLines
|
299
|
+
self.time_line.position_of(self).send(meth, b.time_line.position_of(b))
|
240
300
|
}
|
241
301
|
}
|
242
302
|
|
243
303
|
def positioned?
|
244
|
-
self.
|
304
|
+
self.time_line && self.time_line.indices_of.include?(self)
|
245
305
|
end
|
246
306
|
|
247
307
|
def colinear_with?(b)
|
248
|
-
self.
|
308
|
+
b.kind_of?(self.class) && b.positioned? && positioned? && time_line.equal?(b.time_line)
|
249
309
|
end
|
250
310
|
|
251
311
|
|
252
312
|
protected
|
253
313
|
|
254
314
|
def valid_and_comparable_with?(b)
|
255
|
-
!self.
|
315
|
+
!self.time_line.nil? && !b.time_line.nil? && colinear_with?(b)
|
256
316
|
end
|
257
317
|
|
258
318
|
|
@@ -22,20 +22,40 @@ describe "TimeSpan" do
|
|
22
22
|
TimeSpan::RelativeTime.new timeline, "Some timepoint d"
|
23
23
|
end
|
24
24
|
|
25
|
+
let (:time_span) do
|
26
|
+
TimeSpan::TimeSpan.new(time_a, time_c, timeline, "testing time span")
|
27
|
+
end
|
28
|
+
|
29
|
+
|
25
30
|
before(:each) do
|
26
31
|
timeline.append time_a
|
27
32
|
timeline.append time_b
|
28
33
|
timeline.append time_c
|
29
34
|
end
|
30
35
|
|
31
|
-
let (:time_span) do
|
32
|
-
TimeSpan::TimeSpan.new(time_a, time_c)
|
33
|
-
end
|
34
36
|
|
35
37
|
context "TimeSpan::TimeLine" do
|
36
38
|
|
37
39
|
context "instance methods" do
|
38
40
|
|
41
|
+
context "statues" do
|
42
|
+
|
43
|
+
it "should get all the endpoint statuses" do
|
44
|
+
timeline.all_endpoint_statuses.should == {time_span => [time_span.starts.reference_to, time_span.ends.reference_to]}
|
45
|
+
end
|
46
|
+
|
47
|
+
it "knows the statuses for all associated TimeSpan objects" do
|
48
|
+
timeline.all_relative_time_statuses.sort.should == ["Some timepoint a", "Some timepoint b", "Some timepoint c"]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
context "spans" do
|
54
|
+
it "the TimeLine knows its TimeSpan list" do
|
55
|
+
timeline.spans.should include(time_span)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
39
59
|
context "insertion" do
|
40
60
|
|
41
61
|
it "inserts a TimeSpan::RelativeTime into the timeline." do
|
@@ -172,12 +192,21 @@ describe "TimeSpan" do
|
|
172
192
|
|
173
193
|
end
|
174
194
|
|
195
|
+
context "relative status methods" do
|
196
|
+
|
197
|
+
it "should get the relative statuses for the endpoints" do
|
198
|
+
time_span.endpoint_statuses.should == { time_span => [time_a.reference_to, time_c.reference_to]}
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
|
175
204
|
context "single time point comparators" do
|
176
205
|
|
177
206
|
context "same end time, time_span starts before other time_span" do
|
178
207
|
|
179
208
|
let (:time_span_2) do
|
180
|
-
TimeSpan::TimeSpan.new(time_b, time_c)
|
209
|
+
TimeSpan::TimeSpan.new(time_b, time_c, timeline)
|
181
210
|
end
|
182
211
|
|
183
212
|
it "start before other time_span" do
|
@@ -243,19 +272,19 @@ describe "TimeSpan" do
|
|
243
272
|
end
|
244
273
|
|
245
274
|
let (:time_span_mid) do
|
246
|
-
TimeSpan::TimeSpan.new(time_b, time_c)
|
275
|
+
TimeSpan::TimeSpan.new(time_b, time_c, timeline)
|
247
276
|
end
|
248
277
|
|
249
278
|
let(:time_span_all) do
|
250
|
-
TimeSpan::TimeSpan.new(time_a, time_e)
|
279
|
+
TimeSpan::TimeSpan.new(time_a, time_e, timeline)
|
251
280
|
end
|
252
281
|
|
253
282
|
let (:time_span_last) do
|
254
|
-
TimeSpan::TimeSpan.new(time_d, time_e)
|
283
|
+
TimeSpan::TimeSpan.new(time_d, time_e, timeline)
|
255
284
|
end
|
256
285
|
|
257
286
|
it "identical start and end times should return == as true" do
|
258
|
-
time_span_3 = TimeSpan::TimeSpan.new(time_a, time_c)
|
287
|
+
time_span_3 = TimeSpan::TimeSpan.new(time_a, time_c, timeline)
|
259
288
|
time_span.should == time_span_3
|
260
289
|
end
|
261
290
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_span
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.beta.01
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &77411640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *77411640
|
25
25
|
description: Time spans, including many comparators
|
26
26
|
email:
|
27
27
|
- craig.a.cook@gmail.com
|
@@ -31,6 +31,7 @@ extra_rdoc_files: []
|
|
31
31
|
files:
|
32
32
|
- .gitignore
|
33
33
|
- Gemfile
|
34
|
+
- README.md
|
34
35
|
- Rakefile
|
35
36
|
- doc/Gemfile.html
|
36
37
|
- doc/Rakefile.html
|
@@ -100,3 +101,4 @@ signing_key:
|
|
100
101
|
specification_version: 3
|
101
102
|
summary: Time Span
|
102
103
|
test_files: []
|
104
|
+
has_rdoc:
|