Class: TimeKeeper::TimeRange

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations
Defined in:
lib/time_keeper/time_range.rb

Constant Summary collapse

TIME_FORMAT_REGEX =
/^([0-9]){1,2}(:[0-9]{2})?([ ])*(am|pm)?([ ])*(to|-)([ ])*([0-9]){1,2}(:[0-9]{2})?([ ])*(am|pm)?$/i

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(range) ⇒ TimeRange

Returns a new instance of TimeRange.



10
11
12
# File 'lib/time_keeper/time_range.rb', line 10

def initialize(range)
  @range = range.strip.downcase.gsub(/\s*(-|to)\s*/, '-')
end

Instance Attribute Details

#end_dayObject

Returns the value of attribute end_day.



4
5
6
# File 'lib/time_keeper/time_range.rb', line 4

def end_day
  @end_day
end

#end_timeObject

Returns the value of attribute end_time.



4
5
6
# File 'lib/time_keeper/time_range.rb', line 4

def end_time
  @end_time
end

#rangeObject

Returns the value of attribute range.



4
5
6
# File 'lib/time_keeper/time_range.rb', line 4

def range
  @range
end

#start_dayObject

Returns the value of attribute start_day.



4
5
6
# File 'lib/time_keeper/time_range.rb', line 4

def start_day
  @start_day
end

#start_timeObject

Returns the value of attribute start_time.



4
5
6
# File 'lib/time_keeper/time_range.rb', line 4

def start_time
  @start_time
end

Instance Method Details

#days_elapsedObject



24
25
26
# File 'lib/time_keeper/time_range.rb', line 24

def days_elapsed
  @start_time.in_seconds > @end_time.in_seconds ? 1 : 0
end

#duration_in_hoursObject



36
37
38
# File 'lib/time_keeper/time_range.rb', line 36

def duration_in_hours
  ((duration_in_seconds.to_f/3600)*100).round.to_f/100
end

#duration_in_minutesObject



32
33
34
# File 'lib/time_keeper/time_range.rb', line 32

def duration_in_minutes
  ((duration_in_seconds.to_f/60)*100).round.to_f/100
end

#duration_in_secondsObject



28
29
30
# File 'lib/time_keeper/time_range.rb', line 28

def duration_in_seconds
  (days_elapsed * 24 * 60 * 60) + (@end_time.in_seconds - @start_time.in_seconds)
end

#parseObject



14
15
16
17
18
19
20
21
22
# File 'lib/time_keeper/time_range.rb', line 14

def parse
  raise "The range data (#{range.inspect}) you have provided is invalid" unless self.valid?
  parsed_range = @range.gsub('to', '-').split('-').map(&:strip)
  @start_time = TimeKeeper::CustomTime.new(parsed_range.first).parse
  @end_time = TimeKeeper::CustomTime.new(parsed_range.last).parse
  @start_day = 0
  @end_day = days_elapsed
  self
end