module Timespan::Span

Attributes

duration[R]

Public Instance Methods

duration=(duration) click to toggle source
# File lib/timespan/extensions/time_lord.rb, line 55
def duration= duration
  @duration = if duration.kind_of? Numeric
     Duration.new duration
  else
    case duration
    when Timespan
      duration.duration
    when Duration
      duration
    when TimeLord::Period
      Duration.new start_date: duration.beginning, end_date: duration.ending
    when Hash
      Duration.new duration
    when String
      Duration.new parse_duration(duration)
    else
      raise ArgumentError, "Unsupported duration type: #{duration.inspect} of class #{duration.class}"
    end 
  end
  unless is_new?
    add_dirty :duration
    refresh!
    calculate!
  end
end

Protected Instance Methods

chronic_parse(text) click to toggle source
# File lib/timespan/span.rb, line 45
def chronic_parse text
        ChronicDuration.parse text
end
parse_duration(text) click to toggle source
# File lib/timespan/span.rb, line 33
def parse_duration text
        spanner_parse text
rescue Spanner::ParseError => e
        chronic_parse text
rescue ChronicDuration::DurationParseError => e
        raise Timespan::DurationParseError, "Internal error: neither Spanner or ChronicDuration could parse '#{duration}'"
end
spanner_parse(text) click to toggle source
# File lib/timespan/span.rb, line 41
def spanner_parse text
        Spanner.parse(text.gsub /and/, '')
end