Sha256: b8b70e6408f4b1d8d10cbe8f5f1ad3c250b5fdfa06d4b2a6be8eba93922af5ca

Contents?: true

Size: 1.79 KB

Versions: 69

Compression:

Stored size: 1.79 KB

Contents

module MultiJson
  class DecodeError < StandardError; end
  module_function

  @engine = nil

  # Get the current engine class.
  def engine
    return @engine if @engine
    self.engine = self.default_engine
    @engine
  end

  REQUIREMENT_MAP = [
    ["yajl", :yajl],
    ["json", :json_gem],
    ["json/pure", :json_pure]
  ]

  # The default engine based on what you currently
  # have loaded and installed. First checks to see
  # if any engines are already loaded, then checks
  # to see which are installed if none are loaded.
  def default_engine
    return :yajl if defined?(::Yajl)
    return :json_gem if defined?(::JSON)

    REQUIREMENT_MAP.each do |(library, engine)|
      begin
        require library
        return engine
      rescue LoadError
        next
      end
    end

    :ok_json
  end

  # Set the JSON parser utilizing a symbol, string, or class.
  # Supported by default are:
  #
  # * <tt>:json_gem</tt>
  # * <tt>:json_pure</tt>
  # * <tt>:ok_json</tt>
  # * <tt>:yajl</tt>
  def engine=(new_engine)
    case new_engine
    when String, Symbol
      require "multi_json/engines/#{new_engine}"
      @engine = MultiJson::Engines.const_get("#{new_engine.to_s.split('_').map{|s| s.capitalize}.join('')}")
    when Class
      @engine = new_engine
    else
      raise "Did not recognize your engine specification. Please specify either a symbol or a class."
    end
  end

  # Decode a JSON string into Ruby.
  #
  # <b>Options</b>
  #
  # <tt>:symbolize_keys</tt> :: If true, will use symbols instead of strings for the keys.
  def decode(string, options = {})
    engine.decode(string, options)
  rescue engine::ParseError => exception
    raise DecodeError, exception.message, exception.backtrace
  end

  # Encodes a Ruby object as JSON.
  def encode(object)
    engine.encode(object)
  end
end

Version data entries

69 entries across 69 versions & 4 rubygems

Version Path
vulcan-0.8.2 server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb
vulcan-0.8.1 server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.7.3 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.7.2 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.7.1 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.7.0 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.7 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.6 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.5 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.4 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.3 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
vulcan-0.8.0 server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb
vulcan-0.7.2 server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.2 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.6.1 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
brightbox-cli-0.18.1 lib/brightbox-cli/vendor/multi_json/lib/multi_json.rb
dirty_history-0.6.0 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
dirty_history-0.5.4 dirty_history/ruby/1.9.1/gems/multi_json-1.0.3/lib/multi_json.rb
vulcan-0.7.1 server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb
vulcan-0.7.0 server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb