Module: ActiveSupport::CoreExtensions::Array::Conversions

Defined in:
lib/restfulx/active_foo.rb

Overview

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

Instance Method Summary collapse

Instance Method Details

#to_fxml(options = {}) ⇒ Object

Flex friendly XML format (no dashes, etc)



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/restfulx/active_foo.rb', line 83

def to_fxml(options = {})
  raise "Not all elements respond to to_fxml" unless all? { |e| e.respond_to? :to_fxml }

  options[:root]     ||= all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ? first.class.to_s.underscore.pluralize : "records"
  options[:children] ||= options[:root].singularize
  options[:indent]   ||= 2
  options[:builder]  ||= Builder::XmlMarkup.new(:indent => options[:indent])
  options.merge!(:dasherize => false)
  
  options[:attributes] ||= {}
  options[:attributes].merge!(:type => "array")

  root     = options.delete(:root).to_s
  children = options.delete(:children)

  if !options.has_key?(:dasherize) || options[:dasherize]
    root = root.dasherize
  end

  options[:builder].instruct! unless options.delete(:skip_instruct)

  opts = options.merge({ :root => children })

  xml = options[:builder]
  if empty?
    xml.tag!(root, options[:attributes])
  else
    xml.tag!(root, options[:attributes]) {
      yield xml if block_given?
      each { |e| e.to_fxml(opts.merge!({ :skip_instruct => true })) }
    }
  end
end