Class: ActiveRecord::XmlSerializer
Overview
Defined Under Namespace
Classes: Attribute, MethodAttribute
Instance Attribute Summary
#options
Instance Method Summary
collapse
#add_includes, #initialize, #serializable_attribute_names, #serializable_method_names, #serializable_names, #serializable_record, #to_s
Instance Method Details
#add_associations(association, records, opts) ⇒ Object
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 221
def add_associations(association, records, opts)
if records.is_a?(Enumerable)
tag = association.to_s
tag = tag.dasherize if dasherize?
if records.empty?
builder.tag!(tag, :type => :array)
else
builder.tag!(tag, :type => :array) do
association_name = association.to_s.singularize
records.each do |record|
record.to_xml opts.merge(
:root => association_name,
:type => (record.class.to_s.underscore == association_name ? nil : record.class.name)
)
end
end
end
else
if record = @record.send(association)
record.to_xml(opts.merge(:root => association))
end
end
end
|
#add_attributes ⇒ Object
199
200
201
202
203
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 199
def add_attributes
(serializable_attributes + serializable_method_attributes).each do |attribute|
add_tag(attribute)
end
end
|
#add_procs ⇒ Object
205
206
207
208
209
210
211
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 205
def add_procs
if procs = options.delete(:procs)
[ *procs ].each do |proc|
proc.call(options)
end
end
end
|
#add_tag(attribute) ⇒ Object
213
214
215
216
217
218
219
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 213
def add_tag(attribute)
builder.tag!(
dasherize? ? attribute.name.dasherize : attribute.name,
attribute.value.to_s,
attribute.decorations(!options[:skip_types])
)
end
|
#builder ⇒ Object
165
166
167
168
169
170
171
172
173
174
175
176
177
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 165
def builder
@builder ||= begin
options[:indent] ||= 2
builder = options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
unless options[:skip_instruct]
builder.instruct!
options[:skip_instruct] = true
end
builder
end
end
|
#dasherize? ⇒ Boolean
184
185
186
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 184
def dasherize?
!options.has_key?(:dasherize) || options[:dasherize]
end
|
#root ⇒ Object
179
180
181
182
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 179
def root
root = (options[:root] || @record.class.to_s.underscore).to_s
dasherize? ? root.dasherize : root
end
|
#serializable_attributes ⇒ Object
188
189
190
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 188
def serializable_attributes
serializable_attribute_names.collect { |name| Attribute.new(name, @record) }
end
|
#serializable_method_attributes ⇒ Object
192
193
194
195
196
197
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 192
def serializable_method_attributes
Array(options[:methods]).inject([]) do |method_attributes, name|
method_attributes << MethodAttribute.new(name.to_s, @record) if @record.respond_to?(name.to_s)
method_attributes
end
end
|
#serialize ⇒ Object
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 245
def serialize
args = [root]
if options[:namespace]
args << {:xmlns=>options[:namespace]}
end
if options[:type]
args << {:type=>options[:type]}
end
builder.tag!(*args) do
add_attributes
procs = options.delete(:procs)
add_includes { |association, records, opts| add_associations(association, records, opts) }
options[:procs] = procs
add_procs
yield builder if block_given?
end
end
|