class Riddle::Configuration::Parser::InnerParser

Constants

SETTING_PATTERN

Public Class Methods

new(input) click to toggle source
# File lib/riddle/configuration/parser.rb, line 109
def initialize(input)
  @stream   = StringIO.new(input)
  @sections = {}
end

Public Instance Methods

parse!() click to toggle source
# File lib/riddle/configuration/parser.rb, line 114
def parse!
  while label = next_line do
    @sections[label] = next_settings
  end

  @sections
end

Private Instance Methods

next_line() click to toggle source
# File lib/riddle/configuration/parser.rb, line 124
def next_line
  line = @stream.gets
  return line if line.nil?

  line = line.strip
  line.empty? ? next_line : line
end
next_settings() click to toggle source
# File lib/riddle/configuration/parser.rb, line 132
def next_settings
  settings = Hash.new { |hash, key| hash[key] = [] }
  line = ''
  while line.empty? || line == '{' do
    line = next_line
  end

  while line != '}' do
    begin
      key, value = *SETTING_PATTERN.match(line).captures
      settings[key] << value
      while value[/\$/] do
        value = next_line
        settings[key].last << "\n" << value
      end
    rescue => error
      raise error, "Error handling line '#{line}': #{error.message}",
        error.backtrace
    end

    line = next_line
  end

  settings
end