Class: TaskJuggler::ScoreboardInterval

Inherits:
Interval show all
Defined in:
lib/taskjuggler/Interval.rb

Overview

This class describes an interval of a scoreboard. The start and end of the interval are stored as indexes but can always be converted back to TjTime objects if needed.

Instance Attribute Summary collapse

Attributes inherited from Interval

#end, #start

Instance Method Summary collapse

Methods inherited from Interval

#<=>, #==, #combine, #contains?, #intersection, #overlaps?

Constructor Details

#initialize(*args) ⇒ ScoreboardInterval

Create a new ScoreboardInterval. args can be three different kind of arguments.

sbStart must be a TjTime of the scoreboard start slotDuration must be the duration of the scoreboard slots in seconds a and b should be TjTime or Integer objects that describe the start and end time or index of the interval.

TimeInterval.new(iv) TimeInterval.new(sbStart, slotDuration, a) TimeInterval.new(sbStart, slotDuration, a, b)



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/taskjuggler/Interval.rb', line 177

def initialize(*args)
  case args.length
  when 1
    # If there is only one argument, it must be a ScoreboardInterval.
    if args[0].is_a?(ScoreboardInterval)
      @sbStart = args[0].sbStart
      @slotDuration = args[0].slotDuration
      # Just one argument, a TimeInterval
      super(args[0].start, args[0].end)
    else
      raise ArgumentError, "Illegal argument 1: #{args[0].class}"
    end
  when 3
    @sbStart = args[0]
    @slotDuration = args[1]
    # If the third argument is a date we convert it to a scoreboard index.
    args[2] = dateToIndex(args[2]) if args[2].is_a?(TjTime)

    if args[2].is_a?(Integer)
      super(args[2], args[2])
    else
      raise ArgumentError, "Illegal argument 3: #{args[0].class}"
    end
  when 4
    @sbStart = args[0]
    @slotDuration = args[1]
    # If the third and forth arguments are a date we convert them to a
    # scoreboard index.
    args[2] = dateToIndex(args[2]) if args[2].is_a?(TjTime)
    args[3] = dateToIndex(args[3]) if args[3].is_a?(TjTime)

    if !(args[2].is_a?(Integer))
      raise ArgumentError, "Interval start must be an index or TjTime, " +
            "not a #{args[2].class}"
    end
    if !(args[3].is_a?(Integer))
      raise ArgumentError, "Interval end must be an index or TjTime, " +
            "not a #{args[3].class}"
    end
    super(args[2], args[3])
  else
    raise ArgumentError, "Wrong number of arguments: #{args.length}"
  end

  unless @sbStart.is_a?(TjTime)
    raise ArgumentError, "sbStart must be a TjTime object, not a" +
          "#{@sbStart.class}"
  end
  unless @slotDuration.is_a?(Integer)
    raise ArgumentError, "slotDuration must be an Integer, not a " +
          "#{@slotDuration.class}"
  end

end

Instance Attribute Details

#sbStartObject (readonly)

Returns the value of attribute sbStart.



163
164
165
# File 'lib/taskjuggler/Interval.rb', line 163

def sbStart
  @sbStart
end

#slotDurationObject (readonly)

Returns the value of attribute slotDuration.



163
164
165
# File 'lib/taskjuggler/Interval.rb', line 163

def slotDuration
  @slotDuration
end

Instance Method Details

#durationObject

Return the duration of the ScoreboardInterval.



269
270
271
# File 'lib/taskjuggler/Interval.rb', line 269

def duration
  indexToDate(@end) - indexToDate(@start)
end

#end=(arg) ⇒ Object

Assign the start of the interval. arg can be an Integer or TjTime object.



247
248
249
250
251
252
253
254
255
256
# File 'lib/taskjuggler/Interval.rb', line 247

def end=(arg)
  case arg
  when Integer
    @end = arg
  when TjTime
    @end = dateToIndex(arg)
  else
    raise ArgumentError, "Unsupported class #{arg.class}"
  end
end

#endDateObject

Return the interval end as TjTime object.



264
265
266
# File 'lib/taskjuggler/Interval.rb', line 264

def endDate
  indexToDate(@end)
end

#start=(arg) ⇒ Object

Assign the start of the interval. arg can be an Integer or TjTime object.



234
235
236
237
238
239
240
241
242
243
# File 'lib/taskjuggler/Interval.rb', line 234

def start=(arg)
  case arg
  when Integer
    @start = arg
  when TjTime
    @start = dateToIndex(arg)
  else
    raise ArgumentError, "Unsupported class #{arg.class}"
  end
end

#startDateObject

Return the interval start as TjTime object.



259
260
261
# File 'lib/taskjuggler/Interval.rb', line 259

def startDate
  indexToDate(@start)
end

#to_sObject

Turn the ScoreboardInterval into a human readable form.



274
275
276
# File 'lib/taskjuggler/Interval.rb', line 274

def to_s
  indexToDate(@start).to_s + ' - ' + indexToDate(@end).to_s
end