Sha256: eeff73c2fb142525f55c6067e2908fb7b7398ab9d01fa9d967261fa8e2009c21

Contents?: true

Size: 693 Bytes

Versions: 1

Compression:

Stored size: 693 Bytes

Contents

# frozen_string_literal: true

module Hearken
  class RangeExpander
    def expand(text)
      text.split(/[^0-9a-z-]/).inject([]) { |acc, term| acc + expand_term(term) }
    end

    def expand_to_ids(text)
      expand(text).map { |number| from_number number }
    end

    private

    def expand_term(term)
      words = term.split "-"
      words.empty? ? [] : range(words.first, words.last)
    end

    def range(from, to)
      f = to_number(from)
      t = to_number(to)
      t = to_number(from.slice(0...from.size - to.size) + to) if t < f
      (f..t).to_a
    end

    def from_number(term)
      term.to_s 36
    end

    def to_number(term)
      term.to_i 36
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hearken-0.1.3 lib/hearken/range_expander.rb