class WsdlMapper::Parsing::Base
Constants
- NS_DECL_PREFIX
- TARGET_NS
Public Class Methods
@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
# File lib/wsdl_mapper/parsing/base.rb, line 15 def initialize(base) @base = base @log_msgs = [] end
Protected Instance Methods
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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