class Humr::Splitter::Default

Public Instance Methods

sub_each_field(line) { |s, index| ... } click to toggle source
# File lib/humr/splitter/default.rb, line 8
def sub_each_field(line, &block)
  scanner = StringScanner.new(line)

  result = ''
  index = 1

  loop do
    if s = scanner.scan(/".*?"|\[.*?\]/)
      result << s[0]
      result << yield(s[1..-2], index)
      result << s[-1]
      index += 1
    elsif s = scanner.scan(/\S+/)
      result << yield(s, index)
      index += 1
    elsif not scanner.eos?
      result << scanner.scan(/\s*/)
    else
      break
    end
  end

  result
end