# File lib/riddle/configuration/parser.rb, line 109 def initialize(input) @stream = StringIO.new(input) @sections = {} end
# File lib/riddle/configuration/parser.rb, line 114 def parse! while label = next_line do @sections[label] = next_settings end @sections end
# 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
# 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