mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add config.active_support.escape_html_entities_in_json to allow disabling of html entity escaping. [rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9238 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
4b68982f64
commit
605196c448
5 changed files with 31 additions and 4 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Add config.active_support.escape_html_entities_in_json to allow disabling of html entity escaping. [rick]
|
||||
|
||||
* Improve documentation. [Xavier Noria]
|
||||
|
||||
* Modified ActiveSupport::Callbacks::Callback#call to accept multiple arguments.
|
||||
|
|
|
@ -1,9 +1,25 @@
|
|||
require 'active_support/json/encoding'
|
||||
require 'active_support/json/decoding'
|
||||
|
||||
|
||||
module ActiveSupport
|
||||
# If true, use ISO 8601 format for dates and times. Otherwise, fall back to the ActiveSupport legacy format.
|
||||
mattr_accessor :use_standard_json_time_format
|
||||
|
||||
class << self
|
||||
def escape_html_entities_in_json
|
||||
@escape_html_entities_in_json
|
||||
end
|
||||
|
||||
def escape_html_entities_in_json=(value)
|
||||
ActiveSupport::JSON::Encoding.escape_regex = \
|
||||
if value
|
||||
/[\010\f\n\r\t"\\><&]/
|
||||
else
|
||||
/[\010\f\n\r\t"\\]/
|
||||
end
|
||||
@escape_html_entities_in_json = value
|
||||
end
|
||||
end
|
||||
|
||||
module JSON
|
||||
RESERVED_WORDS = %w(
|
||||
abstract delete goto private transient
|
||||
|
@ -31,3 +47,6 @@ module ActiveSupport
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
require 'active_support/json/encoding'
|
||||
require 'active_support/json/decoding'
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
module ActiveSupport
|
||||
module JSON
|
||||
module Encoding
|
||||
mattr_accessor :escape_regex
|
||||
|
||||
ESCAPED_CHARS = {
|
||||
"\010" => '\b',
|
||||
"\f" => '\f',
|
||||
|
@ -17,9 +19,11 @@ module ActiveSupport
|
|||
end
|
||||
end
|
||||
|
||||
ActiveSupport.escape_html_entities_in_json = true
|
||||
|
||||
class String
|
||||
def to_json(options = nil) #:nodoc:
|
||||
json = '"' + gsub(/[\010\f\n\r\t"\\><&]/) { |s|
|
||||
json = '"' + gsub(ActiveSupport::JSON::Encoding.escape_regex) { |s|
|
||||
ActiveSupport::JSON::Encoding::ESCAPED_CHARS[s]
|
||||
}
|
||||
json.force_encoding('ascii-8bit') if respond_to?(:force_encoding)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
require 'active_support/json/variable'
|
||||
|
||||
require 'active_support/json/encoders/object' # Require explicitly for rdoc.
|
||||
Dir["#{File.dirname(__FILE__)}/encoders/**/*.rb"].each do |file|
|
||||
basename = File.basename(file, '.rb')
|
||||
|
|
|
@ -38,15 +38,18 @@ class TestJSONEncoding < Test::Unit::TestCase
|
|||
StandardDateTests = [[ Date.new(2005,2,1), %("2005-02-01") ]]
|
||||
StandardTimeTests = [[ Time.utc(2005,2,1,15,15,10), %("2005-02-01T15:15:10Z") ]]
|
||||
StandardDateTimeTests = [[ DateTime.civil(2005,2,1,15,15,10), %("2005-02-01T15:15:10+00:00") ]]
|
||||
StandardStringTests = [[ 'this is the <string>', %("this is the <string>")]]
|
||||
|
||||
constants.grep(/Tests$/).each do |class_tests|
|
||||
define_method("test_#{class_tests[0..-6].underscore}") do
|
||||
begin
|
||||
ActiveSupport.escape_html_entities_in_json = class_tests !~ /^Standard/
|
||||
ActiveSupport.use_standard_json_time_format = class_tests =~ /^Standard/
|
||||
self.class.const_get(class_tests).each do |pair|
|
||||
assert_equal pair.last, pair.first.to_json
|
||||
end
|
||||
ensure
|
||||
ActiveSupport.escape_html_entities_in_json = false
|
||||
ActiveSupport.use_standard_json_time_format = false
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue