Sha256: bb79fc9c567b8247eaa1fcd100aa73f5e9e88644a281a58964eb6fa0622ca985

Contents?: true

Size: 840 Bytes

Versions: 4

Compression:

Stored size: 840 Bytes

Contents

# frozen_string_literal: true

module SolidusVolumePricing
  class RangeFromString
    attr_reader :range_string

    RANGE_FORMAT = /\A\(?(\d+)(\.{2,3})(\d+)\)?\z/.freeze
    OPEN_ENDED = /\(?[0-9]+\+\)?/.freeze

    def initialize(range_string)
      @range_string = range_string
    end

    def to_range
      ::Range.new(*options_from_string)
    end

    private

    def options_from_string
      case range_string
      when OPEN_ENDED
        [range_string.tr("^0-9", '').to_i, Float::INFINITY]
      when RANGE_FORMAT
        [
          Regexp.last_match[1].to_i,
          Regexp.last_match[3].to_i,
          Regexp.last_match[2].length == 3
        ]
      else
        raise ArgumentError,
          I18n.t(:could_not_convert_to_range, scope: 'activerecord.errors.messages', string: range_string)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
solidus_volume_pricing-1.2.0 lib/solidus_volume_pricing/range_from_string.rb
solidus_volume_pricing-1.1.1 lib/solidus_volume_pricing/range_from_string.rb
solidus_volume_pricing-1.1.0 lib/solidus_volume_pricing/range_from_string.rb
solidus_volume_pricing-1.0.0 lib/solidus_volume_pricing/range_from_string.rb