class Translator::Expander

Public Instance Methods

map(tokens, reference_date) click to toggle source
# File lib/natural-date/translator/expander.rb, line 3
def map tokens, reference_date
  tokens
  .each_with_index
  .map { |token, index| process_tokens(tokens, token, index) }
  .flatten(1)
end

Private Instance Methods

create_interval(tokens, index) click to toggle source
# File lib/natural-date/translator/expander.rb, line 16
def create_interval tokens, index
  d1_key = tokens[index - 1].first
  d1_value = tokens[index - 1].last.to_s.split('_').last.to_i

  d2_key = tokens[index + 1].first
  d2_value = tokens[index + 1].last.to_s.split('_').last.to_i

  range = if d1_value == d2_value
            language_bundle.types_range[d1_key]

          elsif d1_value > d2_value
            upper_range = (d1_value..(language_bundle.types_range[d1_key].to_a.max)).to_a
            lower_range = (language_bundle.types_range[d1_key].to_a.min..d2_value).to_a

            upper_range + lower_range
          else
            d1_value..d2_value
          end

  range.to_a.map { |number| [d1_key, number] }
end
process_tokens(tokens, token, index) click to toggle source
# File lib/natural-date/translator/expander.rb, line 12
def process_tokens tokens, token, index
  token.first == :range ? create_interval(tokens, index) : [token]
end