class WsdlMapper::SvcDescParsing::Parser

Attributes

default_namespace[R]
description[R]
log_msgs[R]
namespaces[R]
parsers[R]
target_namespace[R]

Public Class Methods

new() click to toggle source
# File lib/wsdl_mapper/svc_desc_parsing/parser.rb, line 22
def initialize
  @base = self
  @description = WsdlMapper::SvcDesc::Wsdl11::Description.new

  @parsers = {
    MESSAGE => MessageParser.new(self),
    PORT_TYPE => PortTypeParser.new(self),
    SERVICE => ServiceParser.new(self),
    BINDING => BindingParser.new(self),
    TYPES => TypesParser.new(self)
    # TODO: import
  }

  @namespaces = Namespaces.new
  @target_namespace = nil
  @default_namespace = nil
  @log_msgs = []
  @linker = Linker.new @description
end

Public Instance Methods

log_msg(node, msg = '', source = self) click to toggle source

@param [Nokogiri::XML::Node] node @param [String, Symbol] msg

# File lib/wsdl_mapper/svc_desc_parsing/parser.rb, line 56
def log_msg(node, msg = '', source = self)
  log_msg = LogMsg.new(node, source, msg)
  log_msgs << log_msg
  # TODO: remove debugging output
  puts node.inspect
  puts msg
  puts caller
  puts "\n\n"
end
parse(doc) click to toggle source

@param [Nokogiri::XML::Document] doc @return [WsdlMapper::Dom::Schema]

# File lib/wsdl_mapper/svc_desc_parsing/parser.rb, line 44
def parse(doc)
  # Phase 1: Parsing
  parse_doc doc

  # Phase 2: Linking
  _, @schema = @linker.link

  [@description, @schema]
end
parse_documentation(node, obj) click to toggle source
# File lib/wsdl_mapper/svc_desc_parsing/parser.rb, line 66
def parse_documentation(node, obj)
  obj.documentation = node.text
end

Protected Instance Methods

get_root(doc) click to toggle source

@param [Nokogiri::XML::Document] doc @return [Nokogiri::XML::Node]

# File lib/wsdl_mapper/svc_desc_parsing/parser.rb, line 88
def get_root(doc)
  doc.root
  # TODO: handle invalid roots, namespaces
end
parse_doc(doc) click to toggle source

@param [Nokogiri::XML::Document] doc

# File lib/wsdl_mapper/svc_desc_parsing/parser.rb, line 72
def parse_doc(doc)
  parse_namespaces doc
  root = get_root doc
  @description.target_namespace = parse_target_namespace root
  @description.name = fetch_attribute_value 'name', root
  each_element root do |node|
    if get_name(node) == DOCUMENTATION
      parse_documentation node, @description
    else
      parse_node node
    end
  end
end