Sha256: 74e972b3a11a9a8bb2019cfb73dddaf8388065461a19a05bee448575133008de

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

require "pump/encoder"
require 'active_support/core_ext/string/inflections'

module Pump
  class Xml < Pump::Encoder

    private

    def compile_string
      <<-EOV
        def encode_single(object, options)
          "#{Tag.new(root_name, {}, sub_tags, tag_options)}"
        end

        def encode_array(objects, options)
          "#{TagArray.new(root_name, {}, sub_tags, tag_options)}"
        end
      EOV
    end

    def sub_tags
      encoder_config.map do |config|
        build_tag(config)
      end
    end

    def build_tag(config)
      tag_name, method_name = config.keys.first, config.values.first
      attrs = config[:attributes]
      options = config.merge({:xml_key_style => encoder_options[:xml_key_style]})
      if method_name.is_a?(Array)
        Tag.new(tag_name, attrs, method_name.map{|conf| build_tag(conf) }, options)
      elsif config[:array]
        options.merge!(:array_method => method_name, :array_root => tag_name)
        child_root = config[:child_root] || tag_name.to_s.singularize
        tags = config[:array].map{|conf| build_tag(conf) }
        TagArray.new(child_root, attrs, tags, options)
      else
        Tag.new(tag_name, attrs, Value.new(method_name), options)
      end
    end

    def tag_options
      {
        :instruct => add_instruct?, :extra_indent => encoder_options[:extra_indent],
        :array_root => encoder_options[:array_root],
        :xml_key_style => encoder_options[:xml_key_style]
      }
    end

    def add_instruct?
      encoder_options.has_key?(:instruct) ? encoder_options[:instruct] : true
    end
  end
end

require "pump/xml/tag"
require "pump/xml/value"
require "pump/xml/tag_array"

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pump-0.6.2 lib/pump/xml.rb
pump-0.6.1 lib/pump/xml.rb