aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/string/output_safety.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2012-02-29 22:30:51 +0100
committerAaron Patterson <aaron.patterson@gmail.com>2012-02-29 16:09:02 -0800
commit8ccaa34103f1c37f7549f7f6c47a21dba21624db (patch)
tree00001858b028ab34fb66e6563817490a9ec23509 /activesupport/lib/active_support/core_ext/string/output_safety.rb
parent71d8c77e5ac74c2aa20eff6b3d6a8b8ca24114d7 (diff)
downloadrails-8ccaa34103f1c37f7549f7f6c47a21dba21624db.tar.gz
rails-8ccaa34103f1c37f7549f7f6c47a21dba21624db.tar.bz2
rails-8ccaa34103f1c37f7549f7f6c47a21dba21624db.zip
Ensure [] respects the status of the buffer.
Diffstat (limited to 'activesupport/lib/active_support/core_ext/string/output_safety.rb')
-rw-r--r--activesupport/lib/active_support/core_ext/string/output_safety.rb30
1 files changed, 18 insertions, 12 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 7f158369f4..728ab087fa 100644
--- a/activesupport/lib/active_support/core_ext/string/output_safety.rb
+++ b/activesupport/lib/active_support/core_ext/string/output_safety.rb
@@ -103,19 +103,31 @@ module ActiveSupport #:nodoc:
end
end
+ def [](*args)
+ return super if args.size < 2
+
+ if html_safe?
+ new_safe_buffer = super
+ new_safe_buffer.instance_eval { @html_safe = true }
+ new_safe_buffer
+ else
+ to_str[*args]
+ end
+ end
+
def safe_concat(value)
- raise SafeConcatError if dirty?
+ raise SafeConcatError unless html_safe?
original_concat(value)
end
def initialize(*)
- @dirty = false
+ @html_safe = true
super
end
def initialize_copy(other)
super
- @dirty = other.dirty?
+ @html_safe = other.html_safe?
end
def clone_empty
@@ -125,7 +137,7 @@ module ActiveSupport #:nodoc:
end
def concat(value)
- if dirty? || value.html_safe?
+ if !html_safe? || value.html_safe?
super(value)
else
super(ERB::Util.h(value))
@@ -138,7 +150,7 @@ module ActiveSupport #:nodoc:
end
def html_safe?
- !dirty?
+ defined?(@html_safe) && @html_safe
end
def to_s
@@ -161,18 +173,12 @@ module ActiveSupport #:nodoc:
end # end
def #{unsafe_method}!(*args) # def capitalize!(*args)
- @dirty = true # @dirty = true
+ @html_safe = false # @html_safe = false
super # super
end # end
EOT
end
end
-
- protected
-
- def dirty?
- @dirty
- end
end
end