diff options
author | Joshua Peek <josh@joshpeek.com> | 2009-07-11 16:20:58 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-07-11 16:20:58 -0500 |
commit | e83a05af076637cc78f0408f5810d5f8f965e10c (patch) | |
tree | d5fcba7818ce08c453f4ffb2254c3f2198866bef /activemodel | |
parent | 01d92021e69f54def1ec8103b2b99f907dd88ec4 (diff) | |
download | rails-e83a05af076637cc78f0408f5810d5f8f965e10c.tar.gz rails-e83a05af076637cc78f0408f5810d5f8f965e10c.tar.bz2 rails-e83a05af076637cc78f0408f5810d5f8f965e10c.zip |
Integrate AMo XML serializer into AR
Diffstat (limited to 'activemodel')
-rw-r--r-- | activemodel/lib/active_model/serializers/xml.rb | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/activemodel/lib/active_model/serializers/xml.rb b/activemodel/lib/active_model/serializers/xml.rb index d187859b44..7cdd281223 100644 --- a/activemodel/lib/active_model/serializers/xml.rb +++ b/activemodel/lib/active_model/serializers/xml.rb @@ -17,6 +17,15 @@ module ActiveModel @value = compute_value end + # There is a significant speed improvement if the value + # does not need to be escaped, as <tt>tag!</tt> escapes all values + # to ensure that valid XML is generated. For known binary + # values, it is at least an order of magnitude faster to + # Base64 encode binary values and directly put them in the + # output XML than to pass the original value or the Base64 + # encoded value to the <tt>tag!</tt> method. It definitely makes + # no sense to Base64 encode the value and then give it to + # <tt>tag!</tt>, since that just adds additional overhead. def needs_encoding? ![ :binary, :date, :datetime, :boolean, :float, :integer ].include?(type) end @@ -105,28 +114,6 @@ module ActiveModel end end - def add_attributes - (serializable_attributes + serializable_method_attributes).each do |attribute| - add_tag(attribute) - end - end - - def add_procs - if procs = options.delete(:procs) - [ *procs ].each do |proc| - proc.call(options) - end - end - end - - def add_tag(attribute) - builder.tag!( - reformat_name(attribute.name), - attribute.value.to_s, - attribute.decorations(!options[:skip_types]) - ) - end - def serialize args = [root] @@ -152,6 +139,24 @@ module ActiveModel name = name.camelize if camelize? dasherize? ? name.dasherize : name end + + def add_attributes + (serializable_attributes + serializable_method_attributes).each do |attribute| + builder.tag!( + reformat_name(attribute.name), + attribute.value.to_s, + attribute.decorations(!options[:skip_types]) + ) + end + end + + def add_procs + if procs = options.delete(:procs) + [ *procs ].each do |proc| + proc.call(options) + end + end + end end def to_xml(options = {}, &block) |