class Rabbit::Parser::RD::Ext::Base

Public Class Methods

add_extension(name) click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 21
def add_extension(name)
  extensions.push(name)
end
extensions() click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 25
def extensions
  self::EXTENSIONS
end
inherited(klass) click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 17
def inherited(klass)
  klass.const_set("EXTENSIONS", [])
end
method_added(name) click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 29
def method_added(name)
  if /^ext_/ =~ name.to_s
    add_extension(name.to_s)
  end
end

Public Instance Methods

apply(label, source, content, visitor) click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 36
def apply(label, source, content, visitor)
  result = nil
  extensions.find do |entry|
    begin
      result = __send__(entry, label, source, content, visitor)
    rescue NameError
      visitor.logger.error($!)
      raise
    end
  end
  result
end
extensions() click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 49
def extensions
  self.class.extensions
end

Private Instance Methods

parse_source(source) click to toggle source
# File lib/rabbit/parser/rd/ext/base.rb, line 54
def parse_source(source)
  prop = {}
  in_src = false
  src = ""
  source.each_line do |line|
    if in_src
      src << line
    else
      case line
      when /^\s*$/
        in_src = true
      when /^(?:#\s*)?(\S+)\s*=\s*(.+)\s*$/
        prop[$1] = $2
      else
        in_src = true
        src << line
      end
    end
  end
  [src, prop]
end