aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/core_ext/string/output_safety.rb16
-rw-r--r--activesupport/test/core_ext/string_ext_test.rb44
2 files changed, 60 insertions, 0 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 c930abc003..520aa4e67d 100644
--- a/activesupport/lib/active_support/core_ext/string/output_safety.rb
+++ b/activesupport/lib/active_support/core_ext/string/output_safety.rb
@@ -122,3 +122,19 @@ class String
ActiveSupport::SafeBuffer.new(self)
end
end
+
+class Array
+
+ alias_method :original_join, :join
+
+ def join(sep=$,)
+ sep ||= "".html_safe
+ str = original_join(sep)
+ (sep.html_safe? && html_safe?) ? str.html_safe : str
+ end
+
+ def html_safe?
+ self.detect {|e| !e.html_safe?}.nil?
+ end
+
+end
diff --git a/activesupport/test/core_ext/string_ext_test.rb b/activesupport/test/core_ext/string_ext_test.rb
index bb865cae91..41a23641d4 100644
--- a/activesupport/test/core_ext/string_ext_test.rb
+++ b/activesupport/test/core_ext/string_ext_test.rb
@@ -434,6 +434,50 @@ class OutputSafetyTest < ActiveSupport::TestCase
assert string.html_safe?
end
+ test "Joining safe elements without a separator is safe" do
+ array = 5.times.collect {"some string".html_safe}
+ assert array.join.html_safe?
+ end
+
+ test "Joining safe elements with a safe separator is safe" do
+ array = 5.times.collect {"some string".html_safe}
+ assert array.join("-".html_safe).html_safe?
+ end
+
+ test "Joining safe elements with an unsafe separator is unsafe" do
+ array = 5.times.collect {"some string".html_safe}
+ assert_false array.join("-").html_safe?
+ end
+
+ test "Joining is unsafe if any element is unsafe even with a safe separator" do
+ array = 5.times.collect {"some string".html_safe}
+ array << "some string"
+ assert_false array.join("-".html_safe).html_safe?
+ end
+
+ test "Joining is unsafe if any element is unsafe and no separator is given" do
+ array = 5.times.collect {"some string".html_safe}
+ array << "some string"
+ assert_false array.join.html_safe?
+ end
+
+ test "Joining is unsafe if any element is unsafe and the separator is unsafe" do
+ array = 5.times.collect {"some string".html_safe}
+ array << "some string"
+ assert_false array.join("-").html_safe?
+ end
+
+ test "Array is safe if all elements are safe" do
+ array = 5.times.collect { "some string".html_safe }
+ assert array.html_safe?
+ end
+
+ test "Array is unsafe if any element is unsafe" do
+ array = 5.times.collect { "some string".html_safe }
+ array << "some string"
+ assert_false array.html_safe?
+ end
+
test 'emits normal string yaml' do
assert_equal 'foo'.to_yaml, 'foo'.html_safe.to_yaml(:foo => 1)
end