class DatastaxRails::XmlSerializer

Implementation of ActiveModel's XML Serializer

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/datastax_rails/serializers/xml_serializer.rb, line 185
def initialize(*args)
  super
end

Public Instance Methods

add_associations(association, records, opts) click to toggle source

TODO: This can likely be cleaned up to simple use ActiveSupport::XmlMini.to_tag as well.

# File lib/datastax_rails/serializers/xml_serializer.rb, line 202
def add_associations(association, records, opts)
  association_name = association.to_s.singularize
  merged_options   = options.merge(opts).merge!(root: association_name, skip_instruct: true)

  if records.is_a?(Enumerable)
    tag  = ActiveSupport::XmlMini.rename_key(association.to_s, options)
    type = options[:skip_types] ? {} : { type: 'array' }

    if records.empty?
      @builder.tag!(tag, type)
    else
      @builder.tag!(tag, type) do
        records.each do |record|
          if options[:skip_types]
            record_type = {}
          else
            record_class = (record.class.to_s.underscore == association_name) ? nil : record.class.name
            record_type = { type: record_class }
          end

          record.to_xml merged_options.merge(record_type)
        end
      end
    end
  elsif (record = @serializable.send(association))
    record.to_xml(merged_options)
  end
end
add_extra_behavior() click to toggle source
# File lib/datastax_rails/serializers/xml_serializer.rb, line 189
def add_extra_behavior
  add_includes
end
add_includes() click to toggle source
# File lib/datastax_rails/serializers/xml_serializer.rb, line 193
def add_includes
  procs = options.delete(:procs)
  @serializable.send(:serializable_add_includes, options) do |association, records, opts|
    add_associations(association, records, opts)
  end
  options[:procs] = procs
end