Sha256: e99d912ceb3abfecbc113e52a50d9b7b5c5e640b57d81c250b065ab4bff44ca4

Contents?: true

Size: 1.53 KB

Versions: 3

Compression:

Stored size: 1.53 KB

Contents

module Seiun
  module XMLGenerators
    class BatchXML < Base
      class << self
        def add_batch(records, callback: nil)
          generator = new(callback: callback)
          generator.add_batch(records)
        end
      end

      def add_batch(records)
        sobjects = rexml_doc.add_element("sObjects", 
          "xmlns" => "http://www.force.com/2009/06/asyncapi/dataload",
          "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance")
        records.each do |record|
          add_record(sobjects, record)
        end
        to_s
      end

      private

      def to_s
        @callback.after_build_xml(rexml_doc) if @callback
        str = super
        @rexml_doc = nil
        str
      end

      def add_record(parent, record)
        sobject = parent.add_element("sObject")
        record.to_hash.each_pair do |key, value|
          if value.is_a?(Hash)
            relation = sobject.add_element(key.to_s)
            add_record(relation, value)
          elsif value.is_a?(NilClass) || value.is_a?(String) && value.empty?
            sobject.add_element(key.to_s, "xsi:nil" => "true")
          else
            sobject.add_element(key.to_s).add_text(convert_value(value))
          end
        end
      end

      def convert_value(value)
        if value.is_a?(Time) || value.is_a?(DateTime)
          value.iso8601.to_s
        elsif value.is_a?(Date)
          value.strftime("%Y-%m-%d")
        elsif value.is_a?(Array)
          value.join(";")
        else
          value.to_s
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
seiun-0.2.0 lib/seiun/xml_generators/batch_xml.rb
seiun-0.1.0 lib/seiun/xml_generators/batch_xml.rb
seiun-0.0.2 lib/seiun/xml_generators/batch_xml.rb