time_span 0.0.1.beta.01 → 0.0.2
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 -1
- data/Gemfile.lock +24 -0
- data/README.md +12 -3
- data/doc/TimeSpan/RelativeTime.html +646 -329
- data/doc/TimeSpan/TimeLine.html +1705 -542
- data/doc/TimeSpan/TimeSpan.html +2764 -889
- data/doc/TimeSpan.html +118 -142
- data/doc/_index.html +135 -0
- data/doc/class_list.html +47 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +55 -0
- data/doc/css/style.css +322 -0
- data/doc/file.README.html +85 -0
- data/doc/file_list.html +49 -0
- data/doc/frames.html +13 -0
- data/doc/index.html +69 -124
- data/doc/js/app.js +205 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +13 -29
- data/doc/method_list.html +462 -0
- data/doc/top-level-namespace.html +105 -0
- data/lib/time_span/version.rb +1 -1
- data/lib/time_span.rb +196 -72
- data/spec/time_span/time_span_spec.rb +12 -3
- metadata +21 -9
data/lib/time_span.rb
CHANGED
@@ -1,18 +1,29 @@
|
|
1
|
-
|
1
|
+
require "time_span/version"
|
2
2
|
|
3
|
+
# @author Craig A. Cook
|
3
4
|
module TimeSpan
|
4
5
|
|
5
|
-
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# and also range comparators
|
6
|
+
# this class' objects have a starting and ending TimeSpan::RelativeTime, and both times must be on the same TimeSpan::TimeLine
|
7
|
+
# implements a large selection of comparators, both for start / end times (single time compartors),
|
8
|
+
# and also range comparators
|
9
|
+
# @author Craig A. Cook
|
10
10
|
class TimeSpan
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
# TimeSpan::RelativeTime start time
|
13
|
+
attr_accessor :starts
|
14
|
+
# TimeSpan::RelativeTime end time
|
15
|
+
attr_accessor :ends
|
16
|
+
# TimeSpan::TimeLine this TimeSpan is associated with
|
17
|
+
attr_accessor :time_line
|
18
|
+
attr_accessor :name
|
19
|
+
|
20
|
+
# @param [TimeSpan::RelativeTime] starting_at is when the span starts
|
21
|
+
# @param [TimeSpan::RelativeTime] ending_at is when the spa nends
|
22
|
+
# @param [TimeSpan::TimeLIne] is the associated TimeLine
|
23
|
+
# @param [String] The name of the TimeSpan (Actually any Ruby Object for which '#respond_to?(:to_s) == true')
|
24
|
+
# @return [Boolean] true if passed arguments are valid to create a TimeSpan
|
14
25
|
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)
|
26
|
+
raise ArgumentError, "Cannot make a span unless both points are on the same time_line" unless starting_at.colinear_with?(ending_at)
|
16
27
|
self.starts = starting_at
|
17
28
|
self.ends = ending_at
|
18
29
|
self.time_line = t_line
|
@@ -21,6 +32,8 @@ module TimeSpan
|
|
21
32
|
starting_at.kind_of?(RelativeTime) && ending_at.kind_of?(RelativeTime) && (starting_at <= ending_at)
|
22
33
|
end
|
23
34
|
|
35
|
+
# returns the 'statuses' for the start and end times
|
36
|
+
# @return start and end time statuses in a hash with key is self
|
24
37
|
def endpoint_statuses
|
25
38
|
{self => [self.starts.reference_to, self.ends.reference_to]}
|
26
39
|
end
|
@@ -31,61 +44,102 @@ module TimeSpan
|
|
31
44
|
# #
|
32
45
|
#######################################################################################################
|
33
46
|
|
34
|
-
|
35
|
-
|
47
|
+
# tests if one TimeSpan starts before another (on the same TimeLine)
|
48
|
+
# @param [TimeSpan::TimeSpan] other_time_span the TimeSpan being compared to self
|
49
|
+
# @return true if self starts before b starts
|
50
|
+
def starts_before?(other_time_span)
|
51
|
+
starts < other_time_span.starts
|
36
52
|
end
|
37
53
|
|
38
|
-
|
39
|
-
|
54
|
+
# tests if one TimeSpan starts after another (on the same TimeLine)
|
55
|
+
# @param (see #starts_before? )
|
56
|
+
# @return true if self starts after other_time_span starts
|
57
|
+
def starts_after?(other_time_span)
|
58
|
+
starts > other_time_span.starts
|
40
59
|
end
|
41
60
|
|
42
|
-
|
43
|
-
|
61
|
+
# tests if one TimeSpan starts with or after another (on the same TimeLine)
|
62
|
+
# @param (see #starts_before? )
|
63
|
+
# @return true if self starts on or after other_time_span starts
|
64
|
+
def starts_on_or_after?(other_time_span)
|
65
|
+
starts >= other_time_span.starts
|
44
66
|
end
|
45
67
|
|
46
|
-
|
47
|
-
|
48
|
-
|
68
|
+
# tests if one TimeSpan starts at the same time as another (on the same TimeLine)
|
69
|
+
# @param (see #starts_before? )
|
70
|
+
# @return true if self starts at the same time as other_time_span starts
|
71
|
+
def starts_with?(other_time_span)
|
72
|
+
starts == other_time_span.starts
|
49
73
|
end
|
50
74
|
|
51
|
-
|
52
|
-
|
75
|
+
# tests if one TimeSpan starts before or at the same time as another (on the same TimeLine)
|
76
|
+
# @param (see #starts_before? )
|
77
|
+
# @return true if self starts before or at the same time as other_time_span starts
|
78
|
+
def starts_before_or_with?(other_time_span)
|
79
|
+
starts <= other_time_span.starts
|
53
80
|
end
|
54
81
|
|
55
|
-
|
56
|
-
|
82
|
+
# tests if one TimeSpan ends before another starts (on the same TimeLine)
|
83
|
+
# @param (see #starts_before? )
|
84
|
+
# @return true if self ends before another time_span starts
|
85
|
+
def ends_before?(other_time_span)
|
86
|
+
ends < other_time_span.ends
|
57
87
|
end
|
58
88
|
|
59
|
-
|
60
|
-
|
89
|
+
# tests if one TimeSpan end before or at the same time as another ends (on the same TimeLine)
|
90
|
+
# @param (see #starts_before? )
|
91
|
+
# @return true if self ends before or at the same time as another time_span ends
|
92
|
+
def ends_on_or_before?(other_time_span)
|
93
|
+
ends <= other_time_span.ends
|
61
94
|
end
|
62
95
|
|
63
|
-
|
64
|
-
|
96
|
+
# tests if one TimeSpan ends after or at the same time as another (on the same TimeLine)
|
97
|
+
# @param (see #starts_before? )
|
98
|
+
# @return true if self ends after or at the same time as another time_span ends
|
99
|
+
def ends_on_or_after?(other_time_span)
|
100
|
+
ends >= other_time_span.ends
|
65
101
|
end
|
66
102
|
|
67
|
-
|
68
|
-
|
103
|
+
# tests if one TimeSpan ends after another (on the same TimeLine)
|
104
|
+
# @param (see #starts_before? )
|
105
|
+
# @return true if self ends after another time_span ends
|
106
|
+
def ends_after?(other_time_span)
|
107
|
+
ends > other_time_span.ends
|
69
108
|
end
|
70
109
|
|
71
|
-
|
72
|
-
|
110
|
+
# tests if one TimeSpan ends at the same time as another (on the same TimeLine)
|
111
|
+
# @param (see #starts_before? )
|
112
|
+
# @return true if self ends at the same time as another time_span ends
|
113
|
+
def ends_with?(other_time_span)
|
114
|
+
ends == other_time_span.ends
|
73
115
|
end
|
74
116
|
|
75
|
-
|
76
|
-
|
117
|
+
# tests if one TimeSpan ends before another starts (on the same TimeLine)
|
118
|
+
# @param (see #starts_before? )
|
119
|
+
# @return true if self ends before another time_span starts
|
120
|
+
def ends_before_other_starts?(other_time_span)
|
121
|
+
ends < other_time_span.starts
|
77
122
|
end
|
78
123
|
|
79
|
-
|
80
|
-
|
124
|
+
# tests if one TimeSpan ends at the same time as another starts (on the same TimeLine)
|
125
|
+
# @param (see #starts_before? )
|
126
|
+
# @return true if self ends at the same time as another time_span starts (no gap)
|
127
|
+
def ends_as_other_starts?(other_time_span)
|
128
|
+
ends == other_time_span.starts
|
81
129
|
end
|
82
130
|
|
83
|
-
|
84
|
-
|
131
|
+
# tests if one TimeSpan ends at the same time as another (on the same TimeLine)
|
132
|
+
# @param (see #starts_before? )
|
133
|
+
# @return true if self ends at the same time as another time_span ends
|
134
|
+
def starts_after_other_ends?(other_time_span)
|
135
|
+
starts > other_time_span.ends
|
85
136
|
end
|
86
137
|
|
87
|
-
|
88
|
-
|
138
|
+
# tests if one TimeSpan starts at the same time as another ends (on the same TimeLine)
|
139
|
+
# @param (see #starts_before? )
|
140
|
+
# @return true if self starts at the same time as another time_span ends
|
141
|
+
def starts_as_other_ends?(other_time_span)
|
142
|
+
starts == other_time_span.ends
|
89
143
|
end
|
90
144
|
|
91
145
|
##################################
|
@@ -98,36 +152,62 @@ module TimeSpan
|
|
98
152
|
## unless it is meant < XOR =
|
99
153
|
|
100
154
|
|
101
|
-
|
102
|
-
|
155
|
+
# tests if one TimeSpan is the same as another (on the same TimeLine)
|
156
|
+
# @param (see #starts_before? )
|
157
|
+
# @return [Boolean] true if same as the other
|
158
|
+
def == (other_time_span)
|
159
|
+
ends_with?(other_time_span) && starts_with?(other_time_span)
|
103
160
|
end
|
104
161
|
|
105
|
-
|
106
|
-
|
162
|
+
# tests if one TimeSpan is not the same as another (on the same TimeLine)
|
163
|
+
# @param (see #starts_before? )
|
164
|
+
# @return [Boolean] true if not same as the other
|
165
|
+
def != (other_time_span)
|
166
|
+
!end_with(other_time_span) || !starts_with(other_time_span)
|
107
167
|
end
|
108
168
|
|
109
|
-
|
110
|
-
|
169
|
+
# tests if one TimeSpan ends before another starts (on the same TimeLine)
|
170
|
+
# alias for '#ends_before_other_starts'
|
171
|
+
# @param (see #starts_before? )
|
172
|
+
# @return [Boolean] true if self ends before another starts
|
173
|
+
def < (other_time_span)
|
174
|
+
ends_before_other_starts?(other_time_span)
|
111
175
|
end
|
112
176
|
|
113
|
-
|
114
|
-
|
177
|
+
# tests if one TimeSpan starts after another ends (on the same TimeLine)
|
178
|
+
# alias for '#starts_after_other_ends'
|
179
|
+
# @param (see #starts_before? )
|
180
|
+
# @return [Boolean] true if self starts after another ends
|
181
|
+
def > (other_time_span)
|
182
|
+
starts_after_other_ends?(other_time_span)
|
115
183
|
end
|
116
184
|
|
117
|
-
|
118
|
-
|
185
|
+
# tests if one TimeSpan is contained within another (on the same TimeLine)
|
186
|
+
# @param (see #starts_before? )
|
187
|
+
# @return true if self contained inside another
|
188
|
+
def contained_fully_inside?(other_time_span)
|
189
|
+
starts_after?(other_time_span) && ends_before?(other_time_span)
|
119
190
|
end
|
120
191
|
|
121
|
-
|
122
|
-
|
192
|
+
# tests if one TimeSpan is contained within another, possibly begining as or ends as another (on the same TimeLine)
|
193
|
+
# @param (see #starts_before? )
|
194
|
+
# @return true if self contained inside another, including same endpoints
|
195
|
+
def contained_inside?(other_time_span)
|
196
|
+
starts_on_or_after?(other_time_span) && ends_on_or_before?(other_time_span)
|
123
197
|
end
|
124
198
|
|
125
|
-
|
126
|
-
|
199
|
+
# tests if one TimeSpan contains another (on the same TimeLine)
|
200
|
+
# @param (see #starts_before? )
|
201
|
+
# @return true if self contains another
|
202
|
+
def contains_fully?(other_time_span)
|
203
|
+
starts_before?(other_time_span) && ends_after?(other_time_span)
|
127
204
|
end
|
128
205
|
|
129
|
-
|
130
|
-
|
206
|
+
# tests if one TimeSpan contains within another (on the same TimeLine)
|
207
|
+
# @param (see #starts_before? )
|
208
|
+
# @return true if self contains another
|
209
|
+
def contains?(other_time_span)
|
210
|
+
starts_before_or_with?(other_time_span) && ends_on_or_after?(other_time_span)
|
131
211
|
end
|
132
212
|
|
133
213
|
end
|
@@ -152,44 +232,58 @@ module TimeSpan
|
|
152
232
|
# compress! -- compresses the TimeLine, removing [] and adjusting the index accordingly #
|
153
233
|
# #
|
154
234
|
#######################################################################################################
|
235
|
+
# @author Craig A. .Cook
|
155
236
|
class TimeLine < Array
|
156
237
|
|
157
238
|
attr_accessor :line, :indices_of, :name, :spans
|
158
239
|
|
240
|
+
|
241
|
+
def initialize(name="")
|
242
|
+
@name = name
|
243
|
+
@line = []
|
244
|
+
@indices_of = {}
|
245
|
+
@spans = []
|
246
|
+
end
|
247
|
+
|
248
|
+
# returns the TimeLine's name
|
249
|
+
# @return [String] TimeLine's name'
|
159
250
|
def to_s
|
160
251
|
name.to_s
|
161
252
|
end
|
162
253
|
|
254
|
+
# endpoint statuses for all TimeSpans on the TimeLine, plus TimeLine name
|
255
|
+
# @return [String] TimeSpan endpoint statuses + TimeLine name
|
163
256
|
def inspect
|
164
257
|
line.inspect + name
|
165
258
|
end
|
166
259
|
|
260
|
+
# @return [Array] endpoint statuses for all TimeSpan s on the TimeLine
|
167
261
|
def all_endpoint_statuses
|
168
262
|
spans.inject({}){ |acc, span| acc.merge!(span.endpoint_statuses) }
|
169
263
|
end
|
170
264
|
|
171
|
-
## attached times only
|
265
|
+
## attached times only (internal API)
|
266
|
+
# @return [Array] indices of keys
|
172
267
|
def relative_times
|
173
268
|
indices_of.keys
|
174
269
|
end
|
175
270
|
|
271
|
+
# all statuses on the TimeLine
|
272
|
+
# @return [Array] statuses for all attached RelativeTime s on the TimeLine
|
176
273
|
def all_relative_time_statuses
|
177
274
|
relative_times.inject([]) {|acc, v| acc << v.reference_to }
|
178
275
|
end
|
179
276
|
|
180
|
-
def initialize(name="")
|
181
|
-
@name = name
|
182
|
-
@line = []
|
183
|
-
@indices_of = {}
|
184
|
-
@spans = []
|
185
|
-
end
|
186
|
-
|
187
277
|
## indices methods
|
188
278
|
|
279
|
+
## find the position of a RelativeTime on the TimeLine
|
280
|
+
# @return [Fixnum] RelativeTime's position on the TimeLine (self)
|
189
281
|
def position_of(obj)
|
190
282
|
@indices_of[obj]
|
191
283
|
end
|
192
284
|
|
285
|
+
# bump up indices after a point, so that a RelativeTime may be inserted
|
286
|
+
# @return nil no return value, helper method to keep data structures up to date.
|
193
287
|
def increase_after(pos, by=1)
|
194
288
|
@indices_of.each_key do |key|
|
195
289
|
@indices_of[key] += by if (@indices_of[key] >= pos)
|
@@ -199,16 +293,25 @@ module TimeSpan
|
|
199
293
|
## insertion
|
200
294
|
|
201
295
|
# add to the end of the TimeLine
|
296
|
+
# @param obj object to be inserted into the TimeLine
|
297
|
+
# @return (see #insert_at)
|
202
298
|
def append(obj)
|
203
299
|
insert_at(@line.size, obj)
|
204
300
|
end
|
205
301
|
|
206
302
|
# inserts to the end of the relative object's time, becoming equal with it
|
303
|
+
# @param relative_obj object after which to insert obj
|
304
|
+
# @param obj object inserted after relative_object
|
305
|
+
# @return (see #insert_at)
|
207
306
|
def append_to_next(relative_obj, obj, relative=1)
|
208
307
|
insert_at(position_of(relative_obj)+relative, obj)
|
209
308
|
end
|
210
309
|
|
211
310
|
## inserts into a new space before the relative object (first parameter)
|
311
|
+
# inserts obj before relative_obj by offset
|
312
|
+
# @param relative_obj object for computing position where obj is inserted
|
313
|
+
# @param the inserted object
|
314
|
+
# @return (see #insert_at)
|
212
315
|
def insert_before_next(relative_obj, obj, relative_offset=1)
|
213
316
|
relative_position = position_of(relative_obj)
|
214
317
|
increase_after(relative_position + relative_offset, relative_offset)
|
@@ -217,8 +320,11 @@ module TimeSpan
|
|
217
320
|
end
|
218
321
|
|
219
322
|
## place obj at the numbered position
|
323
|
+
# @param pos where to insert obj in the TimeLIne
|
324
|
+
# @param obj obj inserted into the TimeLIne
|
325
|
+
# @return [Fixnum] ]the (relative) position where the object was inserted
|
220
326
|
def insert_at(pos, obj)
|
221
|
-
raise "can only add a time to its own time_line" unless obj.time_line.equal? self
|
327
|
+
raise ArgumentError, "can only add a time to its own time_line" unless obj.time_line.equal? self
|
222
328
|
if @line[pos].nil?
|
223
329
|
@line[pos] = [obj]
|
224
330
|
else
|
@@ -231,6 +337,8 @@ module TimeSpan
|
|
231
337
|
|
232
338
|
# cannot remove [] or the @indices_of will be wrong
|
233
339
|
# call #compress to remove the extra []s
|
340
|
+
# @param obj object to be removed from the TimeLIne
|
341
|
+
# @return []nil|Fixnum] position of deleted object
|
234
342
|
def remove(obj)
|
235
343
|
pos = position_of(obj)
|
236
344
|
if pos # do nothing if it isn't there'
|
@@ -241,6 +349,7 @@ module TimeSpan
|
|
241
349
|
|
242
350
|
## removes all [] elements, and decrements accordingly the @indices_of
|
243
351
|
## ideally this should be transactional
|
352
|
+
# @return [nil] cleanup method
|
244
353
|
def compress!
|
245
354
|
mod_level = 0
|
246
355
|
offsets = []
|
@@ -278,41 +387,56 @@ module TimeSpan
|
|
278
387
|
# #
|
279
388
|
# RelativeTime must be within a TimeLine #
|
280
389
|
#######################################################################################################
|
390
|
+
#
|
391
|
+
# @author Craig A. Cook
|
281
392
|
class RelativeTime
|
282
393
|
|
283
|
-
attr_accessor :time_line
|
394
|
+
attr_accessor :time_line # TimeLine on which this RelativeTime is placed
|
395
|
+
attr_accessor :reference_to # Object (PORO) reference_to should respond_to? :to_s
|
284
396
|
|
285
397
|
# create a realtive time *within a time_line* after position
|
398
|
+
# @param tline [TimeSpan::TimeLine] TimeLIne on which this RelativeTime is placed
|
399
|
+
# @param ref [Object] the object placed on the timeline
|
400
|
+
# @return the .to_s of the referenced object
|
286
401
|
def initialize tline, ref
|
287
402
|
@time_line= tline
|
288
403
|
@reference_to= ref
|
289
404
|
end
|
290
405
|
|
406
|
+
# @return [String] the string representation of referenced object
|
291
407
|
def to_s
|
292
|
-
reference_to.to_s
|
408
|
+
@reference_to.to_s
|
293
409
|
end
|
294
410
|
|
411
|
+
# comparator methods
|
412
|
+
# @param [TimeSpan::RelativeTime] other_relative_time time being compared to
|
413
|
+
# @return [Boolean] depending on the relationship
|
295
414
|
## any method on fixnum with 1 RelativeTime param can be in the list below
|
296
415
|
%w{< <= == != >= >}.each{ |meth|
|
297
|
-
self.send(:define_method, meth) {|
|
298
|
-
raise "can only compare to other times on the same time_line." unless valid_and_comparable_with?(
|
299
|
-
self.time_line.position_of(self).send(meth,
|
416
|
+
self.send(:define_method, meth) {|other_relative_time|
|
417
|
+
raise ArgumentError, "can only compare to other times on the same time_line." unless valid_and_comparable_with?(other_relative_time) # can NOT compare across TimeLines
|
418
|
+
self.time_line.position_of(self).send(meth, other_relative_time.time_line.position_of(other_relative_time))
|
300
419
|
}
|
301
420
|
}
|
302
421
|
|
422
|
+
# @return [Boolean] true if self has been properly placed on a TimeLine
|
303
423
|
def positioned?
|
304
424
|
self.time_line && self.time_line.indices_of.include?(self)
|
305
425
|
end
|
306
426
|
|
307
|
-
|
308
|
-
|
427
|
+
# @param [TimeSpan::RelativeTime] other time to be sure is on self's TimeLIne
|
428
|
+
# @return [Boolean] true if both are on the same TimeLine
|
429
|
+
def colinear_with?(other_relative_time)
|
430
|
+
other_relative_time.kind_of?(self.class) && other_relative_time.positioned? && positioned? && time_line.equal?(other_relative_time.time_line)
|
309
431
|
end
|
310
432
|
|
311
433
|
|
312
434
|
protected
|
313
435
|
|
314
|
-
|
315
|
-
|
436
|
+
# @param [TimeSpan::RelativeTime] RelativeTime to check for comparability with
|
437
|
+
# @return [Boolean] true if they can be compared
|
438
|
+
def valid_and_comparable_with?(other_relative_time)
|
439
|
+
!self.time_line.nil? && !other_relative_time.time_line.nil? && colinear_with?(other_relative_time)
|
316
440
|
end
|
317
441
|
|
318
442
|
|
@@ -31,6 +31,7 @@ describe "TimeSpan" do
|
|
31
31
|
timeline.append time_a
|
32
32
|
timeline.append time_b
|
33
33
|
timeline.append time_c
|
34
|
+
timeline.spans << time_span
|
34
35
|
end
|
35
36
|
|
36
37
|
|
@@ -40,6 +41,10 @@ describe "TimeSpan" do
|
|
40
41
|
|
41
42
|
context "statues" do
|
42
43
|
|
44
|
+
it "should have non-empty endpoint statuses" do
|
45
|
+
timeline.all_endpoint_statuses.should_not be_empty
|
46
|
+
end
|
47
|
+
|
43
48
|
it "should get all the endpoint statuses" do
|
44
49
|
timeline.all_endpoint_statuses.should == {time_span => [time_span.starts.reference_to, time_span.ends.reference_to]}
|
45
50
|
end
|
@@ -69,7 +74,7 @@ describe "TimeSpan" do
|
|
69
74
|
it "won't insert into the wrong timeline" do
|
70
75
|
timeline_b = TimeSpan::TimeLine.new "Another Timeline"
|
71
76
|
lambda {
|
72
|
-
timeline_b.append(time_a) }.should raise_error
|
77
|
+
timeline_b.append(time_a) }.should raise_error ArgumentError
|
73
78
|
end
|
74
79
|
|
75
80
|
it "populates the index hash" do
|
@@ -182,12 +187,16 @@ describe "TimeSpan" do
|
|
182
187
|
|
183
188
|
context "creation" do
|
184
189
|
|
190
|
+
it "should have a timeline associated" do
|
191
|
+
timeline.spans.should_not be_empty
|
192
|
+
end
|
193
|
+
|
185
194
|
it "should not allow creation when RelativeTime elements which are not on the same TimeLine" do
|
186
195
|
other_timeline = TimeSpan::TimeLine.new "another timeline"
|
187
196
|
time_other = TimeSpan::RelativeTime.new other_timeline, "Time on other timeline"
|
188
197
|
lambda {
|
189
198
|
TimeSpan::TimeSpan.new(time_a, time_other)
|
190
|
-
}.should raise_error
|
199
|
+
}.should raise_error ArgumentError
|
191
200
|
end
|
192
201
|
|
193
202
|
end
|
@@ -353,4 +362,4 @@ describe "TimeSpan" do
|
|
353
362
|
|
354
363
|
end
|
355
364
|
|
356
|
-
end
|
365
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_span
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Craig A. Cook
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02
|
12
|
+
date: 2012-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &73419500 !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: *73419500
|
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
|
+
- Gemfile.lock
|
34
35
|
- README.md
|
35
36
|
- Rakefile
|
36
37
|
- doc/Gemfile.html
|
@@ -39,7 +40,15 @@ files:
|
|
39
40
|
- doc/TimeSpan/RelativeTime.html
|
40
41
|
- doc/TimeSpan/TimeLine.html
|
41
42
|
- doc/TimeSpan/TimeSpan.html
|
43
|
+
- doc/_index.html
|
44
|
+
- doc/class_list.html
|
42
45
|
- doc/created.rid
|
46
|
+
- doc/css/common.css
|
47
|
+
- doc/css/full_list.css
|
48
|
+
- doc/css/style.css
|
49
|
+
- doc/file.README.html
|
50
|
+
- doc/file_list.html
|
51
|
+
- doc/frames.html
|
43
52
|
- doc/images/brick.png
|
44
53
|
- doc/images/brick_link.png
|
45
54
|
- doc/images/bug.png
|
@@ -61,15 +70,19 @@ files:
|
|
61
70
|
- doc/images/wrench_orange.png
|
62
71
|
- doc/images/zoom.png
|
63
72
|
- doc/index.html
|
73
|
+
- doc/js/app.js
|
64
74
|
- doc/js/darkfish.js
|
75
|
+
- doc/js/full_list.js
|
65
76
|
- doc/js/jquery.js
|
66
77
|
- doc/js/quicksearch.js
|
67
78
|
- doc/js/thickbox-compressed.js
|
68
79
|
- doc/lib/time_span/version_rb.html
|
69
80
|
- doc/lib/time_span_rb.html
|
81
|
+
- doc/method_list.html
|
70
82
|
- doc/rdoc.css
|
71
83
|
- doc/spec/spec_helper_rb.html
|
72
84
|
- doc/spec/time_span/time_span_spec_rb.html
|
85
|
+
- doc/top-level-namespace.html
|
73
86
|
- lib/time_span.rb
|
74
87
|
- lib/time_span/version.rb
|
75
88
|
- spec/spec_helper.rb
|
@@ -91,14 +104,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
105
|
none: false
|
93
106
|
requirements:
|
94
|
-
- - ! '
|
107
|
+
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
109
|
+
version: '0'
|
97
110
|
requirements: []
|
98
111
|
rubyforge_project: time_span
|
99
|
-
rubygems_version: 1.8.
|
112
|
+
rubygems_version: 1.8.11
|
100
113
|
signing_key:
|
101
114
|
specification_version: 3
|
102
115
|
summary: Time Span
|
103
116
|
test_files: []
|
104
|
-
has_rdoc:
|