aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-01-28 15:00:52 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2011-01-28 15:00:52 -0800
commitc87fb22a061292e66d790e23eee6982c8053d270 (patch)
treea23493968b58cfa57a468a753d9d8194b50de82d
parenteb33bd944d03d174ac7eac5d59fc280b35b1a3bd (diff)
downloadrails-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.rb13
-rw-r--r--activesupport/test/safe_buffer_test.rb22
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