# module ActiveSupport::XmlMini

# XmlMini

To use the much faster libxml parser:

    gem 'libxml-ruby', '=0.9.7'
    XmlMini.backend = 'LibXML'

### Constants

DEFAULT_ENCODINGS
FORMATTING
PARSING
TYPE_NAMES

### Attributes

backend[R]

### Public Instance Methods

backend=(name) click to toggle source

    # File lib/active_support/xml_mini.rb, line 82
    def backend=(name)
      if name.is_a?(Module)
        @backend = name
      else
        require "active_support/xml_mini/#{name.to_s.downcase}"
        @backend = ActiveSupport.const_get("XmlMini_#{name}")
      end
    end

rename_key(key, options = {}) click to toggle source

    # File lib/active_support/xml_mini.rb, line 130
    def rename_key(key, options = {})
      camelize  = options[:camelize]
      dasherize = !options.has_key?(:dasherize) || options[:dasherize]
      if camelize
        key = true == camelize ? key.camelize : key.camelize(camelize)
      end
      key = _dasherize(key) if dasherize
      key
    end

to_tag(key, value, options) click to toggle source

    # File lib/active_support/xml_mini.rb, line 98
    def to_tag(key, value, options)
      type_name = options.delete(:type)
      merged_options = options.merge(:root => key, :skip_instruct => true)

      if value.is_a?(::Method) || value.is_a?(::Proc)
        if value.arity == 1
          value.call(merged_options)
        else
          value.call(merged_options, key.to_s.singularize)
        end
      elsif value.respond_to?(:to_xml)
        value.to_xml(merged_options)
      else
        type_name ||= TYPE_NAMES[value.class.name]
        type_name ||= value.class.name if value && !value.respond_to?(:to_str)
        type_name   = type_name.to_s   if type_name

        key = rename_key(key.to_s, options)

        attributes = options[:skip_types] || type_name.nil? ? { } : { :type => type_name }
        attributes[:nil] = true if value.nil?

        encoding = options[:encoding] || DEFAULT_ENCODINGS[type_name]
        attributes[:encoding] = encoding if encoding

        formatted_value = FORMATTING[type_name] && !value.nil? ?
          FORMATTING[type_name].call(value) : value

        options[:builder].tag!(key, formatted_value, attributes)
      end
    end

with_backend(name) { || ... } click to toggle source

    # File lib/active_support/xml_mini.rb, line 91
    def with_backend(name)
      old_backend, self.backend = backend, name
      yield
    ensure
      self.backend = old_backend
    end

### Protected Instance Methods

_dasherize(key) click to toggle source

    # File lib/active_support/xml_mini.rb, line 142
    def _dasherize(key)
      # $2 must be a non-greedy regex for this to work
      left, middle, right = %r\A(_*)(.*?)(_*)\Z/.match(key.strip)[1,3]
      "#{left}#{middle.tr('_ ', '--')}#{right}"
    end

_parse_file(file, entity) click to toggle source

    # File lib/active_support/xml_mini.rb, line 158
    def _parse_file(file, entity)
      f = StringIO.new(::Base64.decode64(file))
      f.extend(FileLike)
      f.original_filename = entity['name']
      f.content_type = entity['content_type']
      f
    end