class WsdlMapper::Parsing::Base

Constants

NS_DECL_PREFIX
TARGET_NS

Public Class Methods

get_name(node) click to toggle source

@param [Nokogiri::XML::Node] node @return [WsdlMapper::Dom::Name]

# File lib/wsdl_mapper/parsing/base.rb, line 22
def self.get_name(node)
  ns = node.namespace ? node.namespace.href : nil
  name = node.name

  Name.get ns, name
end
new(base) click to toggle source
# File lib/wsdl_mapper/parsing/base.rb, line 15
def initialize(base)
  @base = base
  @log_msgs = []
end

Protected Instance Methods

each_element(node) { |child| ... } click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 107
def each_element(node)
  node.children.each do |child|
    next unless is_element? child
    yield child
  end
end
fetch_attribute_value(name, node, default_value = nil) click to toggle source

@param [String] name @param [Nokogiri::XML::Node] node @param [String] default_value @return [String]

# File lib/wsdl_mapper/parsing/base.rb, line 118
def fetch_attribute_value(name, node, default_value = nil)
  attr = node.attributes[name]
  attr ? attr.value : default_value
end
find_node(node, name) click to toggle source

@param [Nokogiri::XML::Node] node @param [WsdlMapper::Dom::Name] name

# File lib/wsdl_mapper/parsing/base.rb, line 93
def find_node(node, name)
  node.children.find { |n| is_element?(n) && name_matches?(n, name) }
end
first_element(node) click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 75
def first_element(node)
  node.children.find { |n| is_element? n }
end
first_element!(node) click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 80
def first_element!(node)
  first_element(node) ||
    raise(ArgumentError.new("#{node.name} has no child elements."))
end
get_name(node) click to toggle source

@param [Nokogiri::XML::Node] node @return [WsdlMapper::Dom::Name]

# File lib/wsdl_mapper/parsing/base.rb, line 65
def get_name(node)
  self.class.get_name node
end
is_element?(node) click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 70
def is_element?(node)
  node.is_a? Nokogiri::XML::Element
end
name_matches?(node, name) click to toggle source

@param [Nokogiri::XML::Node] node @param [WsdlMapper::Dom::Name] name

# File lib/wsdl_mapper/parsing/base.rb, line 99
def name_matches?(node, name)
  return node.name == name.name && name.ns.nil? if node.namespace.nil?

  node.name == name.name && node.namespace.href == name.ns
end
parse_name(name_str, node) click to toggle source

@param [String] name_str @return [WsdlMapper::Dom::Name]

# File lib/wsdl_mapper/parsing/base.rb, line 134
def parse_name(name_str, node)
  name, ns_code = name_str.split(':').reverse
  ns = if ns_code.nil?
    @base.target_namespace
  elsif ns_code == 'xml'
    'http://www.w3.org/XML/1998/namespace'
  else
    node.namespaces["xmlns:#{ns_code}"]
  end

  Name.get ns, name
end
parse_name_in_attribute(name, node) click to toggle source

@param [String] name @param [Nokogiri::XML::Node] node @return [WsdlMapper::Dom::Name]

# File lib/wsdl_mapper/parsing/base.rb, line 126
def parse_name_in_attribute(name, node)
  val = fetch_attribute_value name, node
  return unless val
  parse_name val, node
end
parse_namespaces(doc) click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 44
def parse_namespaces(doc)
  doc.namespaces.each do |key, ns|
    if key == NS_DECL_PREFIX
      @default_namespace = ns
    else
      code = key.sub /^#{NS_DECL_PREFIX}\:/, ''
      @namespaces[code] = ns
    end
  end
end
parse_node(node) click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 31
def parse_node(node)
  name = get_name(node)

  parser = @base.parsers[name]

  if parser
    parser.parse node
  else
    log_msg node, :unknown
  end
end
parse_target_namespace(node) click to toggle source

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

# File lib/wsdl_mapper/parsing/base.rb, line 56
def parse_target_namespace(node)
  attr = node.attributes[TARGET_NS]
  if attr
    @target_namespace = attr.value
  end
end
select_nodes(node, name) click to toggle source

@param [Nokogiri::XML::Node] node @param [WsdlMapper::Dom::Name] name

# File lib/wsdl_mapper/parsing/base.rb, line 87
def select_nodes(node, name)
  node.children.select { |n| is_element?(n) && name_matches?(n, name) }
end