Sha256: 6c8052876892eaf96b0fbacf58fbc3b224b9387718f65e9872094664cb3c9a0a

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

module Dentaku
  class DateArithmetic
    def initialize(date)
      @base = date
    end

    def add(duration)
      case duration
      when Numeric
        @base + duration
      when Dentaku::AST::Duration::Value
        case duration.unit
        when :year
          Time.local(@base.year + duration.value, @base.month, @base.day).to_datetime
        when :month
          @base >> duration.value
        when :day
          @base + duration.value
        end
      else
        raise Dentaku::ArgumentError.for(:incompatible_type, value: duration, for: Numeric),
          "'#{duration || duration.class}' is not coercible for date arithmetic"
      end
    end

    def sub(duration)
      case duration
      when Numeric
        @base - duration
      when Dentaku::AST::Duration::Value
        case duration.unit
        when :year
          Time.local(@base.year - duration.value, @base.month, @base.day).to_datetime
        when :month
          @base << duration.value
        when :day
          @base - duration.value
        end
      else
        raise Dentaku::ArgumentError.for(:incompatible_type, value: duration, for: Numeric),
          "'#{duration || duration.class}' is not coercible for date arithmetic"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dentaku-3.3.4 lib/dentaku/date_arithmetic.rb
dentaku-3.3.3 lib/dentaku/date_arithmetic.rb