File: active_support/json/decoding.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: ActiveSupport#3
  module: JSON#7
has properties
constant: DECODERS #9
module attribute: parse_error [R] #12
module method: backend #15
module method: backend= / 1 #20
module method: with_backend / 1 #30
module method: set_default_backend #37

Code

   1  require 'active_support/core_ext/module/attribute_accessors'
   2 
   3  module ActiveSupport
   4    # Look for and parse json strings that look like ISO 8601 times.
   5    mattr_accessor :parse_json_times
   6 
   7    module JSON
   8      # Listed in order of preference.
   9      DECODERS = %w(Yajl Yaml)
  10 
  11      class << self
  12        attr_reader :parse_error
  13        delegate :decode, :to => :backend
  14 
  15        def backend
  16          set_default_backend unless defined?(@backend)
  17          @backend
  18        end
  19 
  20        def backend=(name)
  21          if name.is_a?(Module)
  22            @backend = name
  23          else
  24            require "active_support/json/backends/#{name.to_s.downcase}.rb"
  25            @backend = ActiveSupport::JSON::Backends::const_get(name)
  26          end
  27          @parse_error = @backend::ParseError
  28        end
  29 
  30        def with_backend(name)
  31          old_backend, self.backend = backend, name
  32          yield
  33        ensure
  34          self.backend = old_backend
  35        end
  36 
  37        def set_default_backend
  38          DECODERS.find do |name|
  39            begin
  40              self.backend = name
  41              true
  42            rescue LoadError
  43              # Try next decoder.
  44              false
  45            end
  46          end
  47        end
  48      end
  49    end
  50  end