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)



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
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/restfulx/active_foo.rb', line 91

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)

  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[:skip_types] ? {} : {:type => "array"})
  else
    xml.tag!(root, options[:skip_types] ? {} : {:type => "array"}) { 
      yield xml if block_given? 
      # Extended by Lance Pollard 
      each_with_index do |e, i| 
        if options[:child_proc] 
          e.to_fxml(opts.merge!({ :skip_instruct => true, 
            :procs => options[:child_proc][i] })) 
        else 
          e.to_fxml(opts.merge!({ :skip_instruct => true })) 
        end 
      end 
    } 
  end
end