class SOML::Document

Public Class Methods

new(fields = []) click to toggle source
# File lib/soml/document.rb, line 5
def initialize(fields = [])
    @fields = fields
end
parse(soml) click to toggle source
# File lib/soml/document.rb, line 25
def self.parse(soml)
    in_field = false
    state = Struct.new(:key, :value, :fields, :delim).new(nil, [], [], nil)

    soml.lines.map(&:chomp).each do |line|
        if in_field && line == state.delim
            state.fields << Field.new(state.key, Util.dedent(state.value.join("\n")))
            in_field = false
        elsif in_field
            state.value << line
        else
            next if line.strip[0] == '#'
            state.key, value = line.strip.split(' ', 2)
            if value =~ /<<(.*)/
                in_field = true
                state.value = []
                state.delim = $1
            else
                state.fields << Field.new(state.key, value)
            end
        end
    end

    Document.new(state.fields)
end

Public Instance Methods

[](i) click to toggle source
# File lib/soml/document.rb, line 13
def [](i)
    @fields[i]
end
add(name, value) click to toggle source
# File lib/soml/document.rb, line 21
def add(name, value)
    @fields << Field.new(name, value)
end
each(&block) click to toggle source
# File lib/soml/document.rb, line 9
def each(&block)
    @fields.each(&block)
end
to_s() click to toggle source
# File lib/soml/document.rb, line 17
def to_s
    @fields.join("\n")
end