class WsdlMapper::DomParsing::Parser

Attributes

default_namespace[R]
import_resolver[R]
log_msgs[R]
namespaces[R]
parsers[R]
schema[R]
target_namespace[R]

Public Class Methods

new(import_resolver: nil) click to toggle source

@param [WsdlMapper::DomParsing::AbstractResolver] import_resolver

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 27
def initialize(import_resolver: nil)
  @base = self
  @schema = WsdlMapper::Dom::Schema.new

  @parsers = {
    COMPLEX_TYPE => ComplexTypeParser.new(self),
    ANNOTATION => AnnotationParser.new(self),
    SIMPLE_TYPE => SimpleTypeParser.new(self),
    IMPORT => ImportParser.new(self),
    ELEMENT => ElementParser.new(self),
    ATTRIBUTE => AttributeParser.new(self)
  }

  @import_resolver = import_resolver
  @namespaces = Namespaces.new
  @target_namespace = nil
  @default_namespace = nil
  @linker = Linker.new schema
end

Public Instance Methods

dup() click to toggle source

@return [WsdlMapper::DomParsing::Parser]

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 64
def dup
  self.class.new import_resolver: @import_resolver
end
parse(doc, parse_only: false) click to toggle source

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

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 49
def parse(doc, parse_only: false)
  # Phase 1: Parsing
  parse_doc doc

  # Phase 2: Linking
  unless parse_only
    @linker.link
  end

  collect_logs

  @schema
end

Protected Instance Methods

collect_logs() click to toggle source
# File lib/wsdl_mapper/dom_parsing/parser.rb, line 69
def collect_logs
  @log_msgs ||= []
  @parsers.values.each do |parser|
    @log_msgs += parser.log_msgs
  end
  @log_msgs += @linker.log_msgs
end
get_schema_node(doc) click to toggle source

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

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 111
def get_schema_node(doc)
  return doc if is_element?(doc) && get_name(doc) == SCHEMA
  schema_node = first_element doc

  if schema_node.namespace.nil? || schema_node.namespace.href != NS
    raise InvalidNsException
  end

  unless name_matches? schema_node, SCHEMA
    raise InvalidRootException
  end

  schema_node
end
parse_attribute_form_default(node) click to toggle source

@param [Nokogiri::XML::Node] node

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 95
def parse_attribute_form_default(node)
  attr = node.attributes[ATTRIBUTE_FORM_DEFAULT]
  if attr && attr.value == 'qualified'
    @schema.qualified_attributes = true
  end
end
parse_attributes(schema_node) click to toggle source

@param [Nokogiri::XML::Node] schema_node

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 88
def parse_attributes(schema_node)
  @schema.target_namespace = parse_target_namespace schema_node
  parse_element_form_default schema_node
  parse_attribute_form_default schema_node
end
parse_doc(doc) click to toggle source

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

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 78
def parse_doc(doc)
  parse_namespaces doc
  schema_node = get_schema_node doc
  parse_attributes schema_node
  each_element schema_node do |node|
    parse_node node
  end
end
parse_element_form_default(node) click to toggle source

@param [Nokogiri::XML::Node] node

# File lib/wsdl_mapper/dom_parsing/parser.rb, line 103
def parse_element_form_default(node)
  attr = node.attributes[ELEMENT_FORM_DEFAULT]
  if attr && attr.value == 'qualified'
    @schema.qualified_elements = true
  end
end