class WsdlMapper::Serializers::SerializerCore

Public Class Methods

new(resolver:, namespaces: WsdlMapper::Dom::Namespaces.new, default_namespace: nil) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 11
def initialize(resolver:, namespaces: WsdlMapper::Dom::Namespaces.new, default_namespace: nil)
  @doc = ::Nokogiri::XML::Document.new
  @doc.encoding = 'UTF-8'
  @x = ::Nokogiri::XML::Builder.with @doc
  @tm = ::WsdlMapper::TypeMapping::DEFAULT
  @resolver = resolver
  @namespaces = namespaces
  if default_namespace
    @namespaces.default = default_namespace
  end
end

Public Instance Methods

complex(_type_name, element_name, attributes) { |self| ... } click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 27
def complex(_type_name, element_name, attributes)
  # TODO: keep type_name parameter?
  @x.send expand_tag(*element_name), eval_attributes(attributes) do |_|
    yield self
  end
end
get(name) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 23
def get(name)
  @resolver.resolve name
end
simple(_type_name, element_name) { |self| ... } click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 34
def simple(_type_name, element_name)
  @x.send expand_tag(*element_name) do |_|
    yield self
  end
end
soap_enc() click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 61
def soap_enc
  @soap_enc ||= ::WsdlMapper::Dom::SoapEncodingType::NAMESPACE
end
text_builtin(value, type_name) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 40
def text_builtin(value, type_name)
  return if value.nil?
  @x.text builtin_to_xml(type_name, value)
end
to_doc() click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 54
def to_doc
  @namespaces.each do |(prefix, url)|
    @doc.root.add_namespace prefix, url
  end
  @doc
end
to_xml() click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 50
def to_xml
  to_doc.to_xml
end
value_builtin(element_name, value, type_name) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 45
def value_builtin(element_name, value, type_name)
  return if value.nil?
  @x.send expand_tag(*element_name), builtin_to_xml(type_name, value)
end
xsd() click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 65
def xsd
  @xsd ||= ::WsdlMapper::Dom::BuiltinType::NAMESPACE
end

Protected Instance Methods

builtin(name) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 75
def builtin(name)
  ::WsdlMapper::Dom::BuiltinType[name]
end
builtin_to_xml(type_name, value) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 79
def builtin_to_xml(type_name, value)
  @tm.to_xml builtin(type_name), value
end
eval_attributes(attributes) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 83
def eval_attributes(attributes)
  attributes.each_with_object({}) do |attr, hsh|
    attr_name = attr[0]
    value = attr[1]
    type = attr[2]
    next if value.nil?

    ns = attr_name[0]
    name = attr_name[1]
    if ns
      prefix = @namespaces.prefix_for ns
      name = "#{prefix}:#{name}"
    end

    if value.is_a? Array
      value = if value[0]
        prefix = @namespaces.prefix_for value[0]
        "#{prefix}:#{value[1]}"
      else
        value[1]
      end
    end

    hsh[name] = @tm.to_xml builtin(type), value
  end
end
expand_tag(ns, tag) click to toggle source
# File lib/wsdl_mapper/serializers/serializer_core.rb, line 70
def expand_tag(ns, tag)
  prefix = @namespaces.prefix_for ns
  prefix ? "#{prefix}:#{tag}" : tag
end