Module: AxiomusApi::Serializable

Included in:
Base
Defined in:
lib/axiomus_api/serializable.rb

Instance Method Summary collapse

Instance Method Details

#to_xml(xml_header = false, tag_name = nil) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/axiomus_api/serializable.rb', line 4

def to_xml(xml_header = false, tag_name = nil)
  serializable_fields = self.class.attribute_meta
  attribute_fields = serializable_fields.select{|k,v| v[:xml_type] == :attribute}

  attributes = Hash[attribute_fields.map do |k,v|
    [v[:xml_name] || k, self.send(k).to_s]
  end].reject{|k,v| v.nil? || v.empty?}

  builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
    xml.send(tag_name || self.tag_name, attributes) {
      serializable_fields.each do |f, opt|
        next if opt[:xml_type] == :attribute
        xml_name = opt[:xml_name] || f
        xml_type = opt[:xml_type] || :element
        val = self.send(f)

        next if val.nil?

        case xml_type
        when :element
          obj_to_xml(xml, val, xml_name)
        when :text
          xml.text(val)
        end
      end
    }
  end

  if xml_header
    builder.to_xml
  else
    builder.doc.root.to_xml
  end
end