aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2009-07-11 16:20:58 -0500
committerJoshua Peek <josh@joshpeek.com>2009-07-11 16:20:58 -0500
commite83a05af076637cc78f0408f5810d5f8f965e10c (patch)
treed5fcba7818ce08c453f4ffb2254c3f2198866bef /activemodel
parent01d92021e69f54def1ec8103b2b99f907dd88ec4 (diff)
downloadrails-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.rb49
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)