Sha256: b731e7e0fb3f4bef93f3d3e8e7b5866439cc6c9ce446280696ad5e312a75e3c8

Contents?: true

Size: 1.51 KB

Versions: 96

Compression:

Stored size: 1.51 KB

Contents

require 'multi_json/vendor/okjson'

module MultiJson
  module Adapters
    module OkJson
      extend self

      ParseError = ::MultiJson::OkJson::Error

      def load(string, options={}) #:nodoc:
        string = string.read if string.respond_to?(:read)
        result = ::MultiJson::OkJson.decode("[#{string}]").first
        options[:symbolize_keys] ? symbolize_keys(result) : result
      end

      def dump(object, options={}) #:nodoc:
        ::MultiJson::OkJson.valenc(stringify_keys(object))
      end

      def symbolize_keys(object) #:nodoc:
        prepare_object(object) do |key|
          key.is_a?(String) ? key.to_sym : key
        end
      end

      def stringify_keys(object) #:nodoc:
        prepare_object(object) do |key|
          key.respond_to?(:to_s) ? key.to_s : key
        end
      end

      def prepare_object(object, &key_modifier) #:nodoc:
        case object
        when Array
          object.map do |value|
            prepare_object(value, &key_modifier)
          end
        when Hash
          object.inject({}) do |result, (key, value)|
            new_key   = key_modifier.call(key)
            new_value = prepare_object(value, &key_modifier)
            result.merge! new_key => new_value
          end
        when String, Numeric, true, false, nil
          object
        else
          if object.respond_to?(:to_json)
            object
          elsif object.respond_to?(:to_s)
            object.to_s
          else
            object
          end
        end
      end
    end
  end
end

Version data entries

96 entries across 94 versions & 7 rubygems

Version Path
engineyard-serverside-2.8.0 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.8.0.pre4 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.8.0.pre3 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.8.0.pre2 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.8.0.pre lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.7.0.pre lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.19 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.17 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.16 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.15.alpha1 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.15.cf2 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.15.pre lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.14 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.13 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.12 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.12.prewut5 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.12.prewut4 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.12.prewut3 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.12.prewut2 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb
engineyard-serverside-2.6.12.prewut1 lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb