Sha256: 3ddc16694166540d364684b3c60eac70401bc0552f42df4988fc679ada04dd63

Contents?: true

Size: 919 Bytes

Versions: 4

Compression:

Stored size: 919 Bytes

Contents

require 'date'
require 'working_hours/computation'

module WorkingHours
  class Duration
    include Computation

    attr_accessor :value, :kind

    SUPPORTED_KINDS = [:days, :hours, :minutes, :seconds]

    def initialize(value, kind)
      raise ArgumentError.new("Invalid working time unit: #{kind}") unless SUPPORTED_KINDS.include?(kind)
      @value = value
      @kind = kind
    end

    # Computation methods
    def until(time = ::Time.current)
      send("add_#{@kind}", time, -@value)
    end
    alias :ago :until

    def since(time = ::Time.current)
      send("add_#{@kind}", time, @value)
    end
    alias :from_now :since

    # Value object methods
    def -@
      Duration.new(-value, kind)
    end

    def ==(other)
      self.class == other.class and kind == other.kind and value == other.value
    end
    alias :eql? :==

    def hash
      [self.class, kind, value].hash
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
working_hours-1.0.2 lib/working_hours/duration.rb
working_hours-1.0.1 lib/working_hours/duration.rb
working_hours-1.0.0 lib/working_hours/duration.rb
working_hours-0.9.0 lib/working_hours/duration.rb