aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/json.rb
blob: 914cf4f8fe7752d4cc1bea506e1d1d2316945211 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
      boolean       do            if            protected     try
      break         double        implements    public        typeof
      byte          else          import        return        var
      case          enum          in            short         void
      catch         export        instanceof    static        volatile
      char          extends       int           super         while
      class         final         interface     switch        with
      const         finally       long          synchronized
      continue      float         native        this
      debugger      for           new           throw
      default       function      package       throws
    ) #:nodoc:

    class << self
      def valid_identifier?(key) #:nodoc:
        key.to_s =~ /^[[:alpha:]_$][[:alnum:]_$]*$/ && !reserved_word?(key)
      end

      def reserved_word?(key) #:nodoc:
        RESERVED_WORDS.include?(key.to_s)
      end
    end
  end
end

require 'active_support/json/encoding'
require 'active_support/json/decoding'