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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 231
def add_associations(association, records, opts)
if records.is_a?(Enumerable)
tag = reformat_name(association.to_s)
type = options[:skip_types] ? {} : {:type => "array"}
if records.empty?
builder.tag!(tag, type)
else
builder.tag!(tag, type) do
association_name = association.to_s.singularize
records.each do |record|
if options[:skip_types]
record_type = {}
else
record_class = (record.class.to_s.underscore == association_name) ? nil : record.class.name
record_type = {:type => record_class}
end
record.to_xml opts.merge(:root => association_name).merge(record_type)
end
end
end
else
if record = @record.send(association)
record.to_xml(opts.merge(:root => association))
end
end
end
|
#add_attributes ⇒ Object
209
210
211
212
213
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 209
def add_attributes
(serializable_attributes + serializable_method_attributes).each do |attribute|
add_tag(attribute)
end
end
|
#add_procs ⇒ Object
215
216
217
218
219
220
221
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 215
def add_procs
if procs = options.delete(:procs)
[ *procs ].each do |proc|
proc.call(options)
end
end
end
|
#add_tag(attribute) ⇒ Object
223
224
225
226
227
228
229
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 223
def add_tag(attribute)
builder.tag!(
reformat_name(attribute.name),
attribute.value.to_s,
attribute.decorations(!options[:skip_types])
)
end
|
#builder ⇒ Object
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 166
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
|
#camelize? ⇒ Boolean
189
190
191
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 189
def camelize?
options.has_key?(:camelize) && options[:camelize]
end
|
#dasherize? ⇒ Boolean
185
186
187
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 185
def dasherize?
!options.has_key?(:dasherize) || options[:dasherize]
end
|
193
194
195
196
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 193
def reformat_name(name)
name = name.camelize if camelize?
dasherize? ? name.dasherize : name
end
|
#root ⇒ Object
180
181
182
183
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 180
def root
root = (options[:root] || @record.class.model_name.singular).to_s
reformat_name(root)
end
|
#serializable_attributes ⇒ Object
198
199
200
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 198
def serializable_attributes
serializable_attribute_names.collect { |name| Attribute.new(name, @record) }
end
|
#serializable_method_attributes ⇒ Object
202
203
204
205
206
207
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 202
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
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
|
# File 'lib/active_record/serializers/xml_serializer.rb', line 260
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
|