class VCloudSdk::Xml::WrapperFactory

Public Class Methods

create_instance(type_name, ns = nil, namespace_defintions = nil, *args) click to toggle source
# File lib/ruby_vcloud_sdk/xml/wrapper.rb, line 40
def create_instance(type_name, ns = nil, namespace_defintions = nil,
    *args)
  xml = @@xml_dictionary[type_name]
  if xml
    wrap_document(xml, ns, namespace_defintions, *args)
  else
    fail CpiError,
         "XML type #{type_name} not found in xml_templates dir."
  end
end
find_wrapper_class(type_name) click to toggle source

TODO: We might run into a bug later if there are ever XML node types of the same name but different namespace

# File lib/ruby_vcloud_sdk/xml/wrapper.rb, line 31
def find_wrapper_class(type_name)
  # for Ruby 1.9, we would need pass false in as the 2nd parameter
  if Xml.constants.find { |c| c.to_sym == type_name.to_sym }
    Xml.const_get(type_name.to_sym)
  else
    Wrapper
  end
end
wrap_document(xml, ns = nil, namespace_defintions = nil, *args) click to toggle source
# File lib/ruby_vcloud_sdk/xml/wrapper.rb, line 8
def wrap_document(xml, ns = nil, namespace_defintions = nil, *args)
  doc = Nokogiri::XML(xml)
  type_name = doc.root.name
  node_class = find_wrapper_class(type_name)
  node_class.new(doc, ns, namespace_defintions, *args)
end
wrap_node(node, ns, namespace_defintions = nil, *args) click to toggle source
# File lib/ruby_vcloud_sdk/xml/wrapper.rb, line 15
def wrap_node(node, ns, namespace_defintions = nil, *args)
  type_name = node.node_name
  node_class = find_wrapper_class(type_name)
  node_class.new(node, ns, namespace_defintions, *args)
end
wrap_nodes(nodes, ns, namespace_defintions) click to toggle source
# File lib/ruby_vcloud_sdk/xml/wrapper.rb, line 21
def wrap_nodes(nodes, ns, namespace_defintions)
  nodes.map do |node|
    WrapperFactory.wrap_node(node,
                             ns,
                             namespace_defintions)
  end
end