module Braintree::Xml::Generator

Constants

XML_FORMATTING
XML_FORMATTING_NAMES
XML_TYPE_NAMES

Public Class Methods

_array_to_xml(array, options = {}) click to toggle source
# File lib/braintree/xml/generator.rb, line 81
def self._array_to_xml(array, options = {})
  raise "expected options[:root]" unless options[:root]
  raise "expected options[:builder]" unless options[:builder]
  options[:indent] ||= 2
  root = options.delete(:root).to_s.tr("_", "-")
  if array.empty?
    options[:builder].tag!(root, :type => "array")
  else
    options[:builder].tag!(root, :type => "array") do
      array.each do |e|
        if e.is_a?(Hash)
          _convert_to_xml(e, options.merge(:root => "item", :skip_instruct => true))
        else
          options[:builder].tag!("item", e)
        end
      end
    end
  end
end
_convert_to_xml(hash_to_convert, options = {}) click to toggle source
# File lib/braintree/xml/generator.rb, line 48
def self._convert_to_xml(hash_to_convert, options = {})
  raise ArgumentError, "need root" unless options[:root]
  options[:indent] ||= 2
  options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
  options[:builder].instruct! unless options.delete(:skip_instruct)
  root = _xml_escape(options[:root])

  options[:builder].__send__(:method_missing, root) do
    hash_to_convert.each do |key, value|
      case value
      when ::Hash
        _convert_to_xml(value, options.merge(:root => key, :skip_instruct => true))
      when ::Array
        _array_to_xml(value, options.merge(:root => key, :skip_instruct => true))
      else
        type_name = XML_TYPE_NAMES[value.class.name]

        attributes = ((value.nil? || type_name.nil?) ? {} : {:type => type_name})
        if value.nil?
          attributes[:nil] = true
        end

        formatting_name = XML_FORMATTING_NAMES[value.class.name]
        options[:builder].tag!(_xml_escape(key),
          XML_FORMATTING[formatting_name] ? XML_FORMATTING[formatting_name].call(value) : value,
          attributes,
        )
      end
    end
  end

end
_xml_escape(key) click to toggle source
# File lib/braintree/xml/generator.rb, line 101
def self._xml_escape(key)
  dasherized_key = key.to_s.tr("_", "-")

  if Builder::XChar.respond_to?(:encode)
    Builder::XChar.encode(dasherized_key)
  else
    dasherized_key.to_xs
  end
end
hash_to_xml(hash) click to toggle source
# File lib/braintree/xml/generator.rb, line 37
def self.hash_to_xml(hash)
  root, contents = hash.keys[0], hash.values[0]

  if contents.is_a?(String)
    builder = Builder::XmlMarkup.new
    builder.__send__(_xml_escape(root)) { |b| b.text! contents }
  else
    _convert_to_xml contents, :root => root
  end
end