From d9ac4a7717007474ace12500fd91485e294e10ff Mon Sep 17 00:00:00 2001 From: Xavier Noria Date: Sat, 12 Sep 2009 01:54:34 +0200 Subject: AS guide: documents Hash#to_xml --- .../guides/source/active_support_overview.textile | 46 +++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'railties') diff --git a/railties/guides/source/active_support_overview.textile b/railties/guides/source/active_support_overview.textile index be787b6af2..a4866f18be 100644 --- a/railties/guides/source/active_support_overview.textile +++ b/railties/guides/source/active_support_overview.textile @@ -1064,7 +1064,51 @@ NOTE: Observe in the previous example that consecutive separators result in empt h3. Extensions to +Hash+ -... +h4. Conversions + +h5. +to_xml+ + +The method +to_xml+ returns a string containing an XML representation of its receiver: + + +{"foo" => 1, "bar" => 2}.to_xml +# => +# +# +# 1 +# 2 +# + + +To do so, the method loops over the pairs and builds nodes that depend on the _values_. Given a pair +key+, +value+: + +* If +value+ is a hash there's a recursive call with +key+ as :root. + +* If +value+ is an array there's a recursive call with +key+ as :root, and +key+ singularized as :children. + +* If +value+ is a callable object it must expect one or two arguments. Depending on the arity, the callable is invoked with the +options+ hash as first argument with +key+ as :root, and +key+ singularized as second argument. Its return value becomes a new node. + +* If +value+ responds to +to_xml+ the method is invoked with +key+ as :root. + +* Otherwise, a node with +key+ as tag is created with a string representation of +value+ as text node. If +value+ is +nil+ an attribute "nil" set to "true" is added. Unless the option :skip_types exists and is true, an attribute "type" is added as well according to the following mapping: + +XML_TYPE_NAMES = { + "Symbol" => "symbol", + "Fixnum" => "integer", + "Bignum" => "integer", + "BigDecimal" => "decimal", + "Float" => "float", + "TrueClass" => "boolean", + "FalseClass" => "boolean", + "Date" => "date", + "DateTime" => "datetime", + "Time" => "datetime" +} + + +By default the root node is "hash", but that's configurable via the :root option. + +The default XML builder is a fresh instance of Builder::XmlMarkup. You can configure your own builder with the :builder option. The method also accepts options like :dasherize and friends, they are forwarded to the builder. h3. Extensions to +Range+ -- cgit v1.2.3