Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add support for a type=binary with an optional encoding=base64. If th…

…e encoding attribute is absent, the data is considered unencoded.

[#2966 state:resolved]
  • Loading branch information...
commit c7cc9583689d63d342983d739ccf5c4e94233a48 1 parent 4c7c406
Josh Franklin authored josevalim committed
View
9 activesupport/lib/active_support/core_ext/hash/conversions.rb
@@ -54,6 +54,15 @@ def content_type
"string" => Proc.new { |string| string.to_s },
"yaml" => Proc.new { |yaml| YAML::load(yaml) rescue yaml },
"base64Binary" => Proc.new { |bin| ActiveSupport::Base64.decode64(bin) },
+ "binary" => Proc.new do |bin, entity|
+ case entity['encoding']
+ when 'base64'
+ ActiveSupport::Base64.decode64(bin)
+ # TODO: Add support for other encodings
+ else
+ bin
+ end
+ end,
"file" => Proc.new do |file, entity|
f = StringIO.new(ActiveSupport::Base64.decode64(file))
f.extend(FileLike)
View
4 activesupport/test/core_ext/hash_ext_test.rb
@@ -757,6 +757,7 @@ def test_xsd_like_types_from_xml
<expires-at type="dateTime">2007-12-25T12:34:56+0000</expires-at>
<notes type="string"></notes>
<illustration type="base64Binary">YmFiZS5wbmc=</illustration>
+ <caption type="binary" encoding="base64">VGhhdCdsbCBkbywgcGlnLg==</caption>
</bacon>
EOT
@@ -766,7 +767,8 @@ def test_xsd_like_types_from_xml
:price => BigDecimal("12.50"),
:expires_at => Time.utc(2007,12,25,12,34,56),
:notes => "",
- :illustration => "babe.png"
+ :illustration => "babe.png",
+ :caption => "That'll do, pig."
}.stringify_keys
assert_equal expected_bacon_hash, Hash.from_xml(bacon_xml)["bacon"]
Please sign in to comment.
Something went wrong with that request. Please try again.