class Riddle::Configuration::Parser::InnerParser

Constants

SETTING_PATTERN

Public Class Methods

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

Public Instance Methods

parse!() click to toggle source
# File lib/riddle/configuration/parser.rb, line 138
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 148
def next_line
  line = @stream.gets
  return line if line.nil?

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

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

    line = next_line
  end

  settings
end