module ActiveSupport::CoreExtensions::Hash::Conversions

refer to: api.rubyonrails.org/ for more details

Public Instance Methods

to_amf(options = {}) click to toggle source

serialize as AMF

# File lib/restfulx/rx_active_support.rb, line 75
def to_amf(options = {})
  RestfulX::AMF.serialize_property(self, {:serializable_names => self.keys, :options => options})
end
to_fxml(options = {}) { |options| ... } click to toggle source

Flex friendly XML format, no dashes, etc

# File lib/restfulx/rx_active_support.rb, line 21
def to_fxml(options = {})
  options.merge!(:dasherize => false)
  options[:indent] ||= 2
  options.reverse_merge!({ :builder => Builder::XmlMarkup.new(:indent => options[:indent]),
                           :root => "hash" })
  options[:builder].instruct! unless options.delete(:skip_instruct)
  dasherize = !options.has_key?(:dasherize) || options[:dasherize]
  root = dasherize ? options[:root].to_s.dasherize : options[:root].to_s

  options[:builder].__send__(:method_missing, root) do
    each do |key, value|
      case value
        when ::Hash
          value.to_fxml(options.merge({ :root => key, :skip_instruct => true }))
        when ::Array
          value.to_fxml(options.merge({ :root => key, :children => key.to_s.singularize, :skip_instruct => true}))
        when ::Method, ::Proc
          # If the Method or Proc takes two arguments, then
          # pass the suggested child element name.  This is
          # used if the Method or Proc will be operating over
          # multiple records and needs to create an containing
          # element that will contain the objects being
          # serialized.
          if 1 == value.arity
            value.call(options.merge({ :root => key, :skip_instruct => true }))
          else
            value.call(options.merge({ :root => key, :skip_instruct => true }), key.to_s.singularize)
          end
        else
          if value.respond_to?(:to_fxml)
            value.to_fxml(options.merge({ :root => key, :skip_instruct => true }))
          else
            type_name = XML_TYPE_NAMES[value.class.name]

            key = dasherize ? key.to_s.dasherize : key.to_s

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

            options[:builder].tag!(key,
              XML_FORMATTING[type_name] ? XML_FORMATTING[type_name].call(value) : value,
              attributes
            )
        end
      end
    end
  
    yield options[:builder] if block_given?
  end
end