Sha256: bf77ff99b19437089eafc3280a7550db37b2b256f6370f407d97b854956c7048

Contents?: true

Size: 549 Bytes

Versions: 4

Compression:

Stored size: 549 Bytes

Contents

# frozen_string_literal: true

module Attractor
  # converts a duration string into an amount of days
  class DurationParser
    TOKENS = {
      "d" => 1,
      "w" => 7,
      "m" => 30,
      "y" => 365
    }.freeze

    attr_reader :duration

    def initialize(input)
      @input = input
      @duration = @input.is_a?(Numeric) ? @input : 0
      return if @duration > 0

      parse
    end

    def parse
      @input.scan(/(\d+)(\w)/).each do |amount, measure|
        @duration += amount.to_i * TOKENS[measure]
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
attractor-2.6.0 lib/attractor/duration_parser.rb
attractor-2.5.0 lib/attractor/duration_parser.rb
attractor-2.4.0 lib/attractor/duration_parser.rb
attractor-2.3.0 lib/attractor/duration_parser.rb