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