diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-28 15:00:52 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-28 15:00:52 -0800 |
commit | c87fb22a061292e66d790e23eee6982c8053d270 (patch) | |
tree | a23493968b58cfa57a468a753d9d8194b50de82d | |
parent | eb33bd944d03d174ac7eac5d59fc280b35b1a3bd (diff) | |
download | rails-c87fb22a061292e66d790e23eee6982c8053d270.tar.gz rails-c87fb22a061292e66d790e23eee6982c8053d270.tar.bz2 rails-c87fb22a061292e66d790e23eee6982c8053d270.zip |
make sure we play nicely when syck is activated
-rw-r--r-- | activesupport/lib/active_support/core_ext/string/output_safety.rb | 13 | ||||
-rw-r--r-- | activesupport/test/safe_buffer_test.rb | 22 |
2 files changed, 30 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/core_ext/string/output_safety.rb b/activesupport/lib/active_support/core_ext/string/output_safety.rb index 29d6613611..c930abc003 100644 --- a/activesupport/lib/active_support/core_ext/string/output_safety.rb +++ b/activesupport/lib/active_support/core_ext/string/output_safety.rb @@ -1,6 +1,5 @@ require 'erb' require 'active_support/core_ext/kernel/singleton_class' -require 'active_support/core_ext/yaml' class ERB module Util @@ -102,10 +101,14 @@ module ActiveSupport #:nodoc: self end - unless defined?(Psych) - def to_yaml(*args) - to_str.to_yaml(*args) - end + def encode_with(coder) + coder.represent_scalar nil, to_str + end + + def to_yaml(*args) + return super() if defined?(YAML::ENGINE) && !YAML::ENGINE.syck? + + to_str.to_yaml(*args) end end end diff --git a/activesupport/test/safe_buffer_test.rb b/activesupport/test/safe_buffer_test.rb index bf61f9e58c..a4e2acbb32 100644 --- a/activesupport/test/safe_buffer_test.rb +++ b/activesupport/test/safe_buffer_test.rb @@ -1,4 +1,10 @@ require 'abstract_unit' +begin + require 'psych' +rescue LoadError +end + +require 'yaml' class SafeBufferTest < ActiveSupport::TestCase def setup @@ -38,4 +44,20 @@ class SafeBufferTest < ActiveSupport::TestCase new_buffer = @buffer.to_s assert_equal ActiveSupport::SafeBuffer, new_buffer.class end + + def test_to_yaml + str = 'hello!' + buf = ActiveSupport::SafeBuffer.new str + yaml = buf.to_yaml + + assert_match(/^--- #{str}/, yaml) + assert_equal 'hello!', YAML.load(yaml) + end + + def test_nested + str = 'hello!' + data = { 'str' => ActiveSupport::SafeBuffer.new(str) } + yaml = YAML.dump data + assert_equal({'str' => str}, YAML.load(yaml)) + end end |