Sha256: 2855651957f1a81f6236e5de706a6a7cae8b620c0956e75b3ea34d885b6c922f

Contents?: true

Size: 994 Bytes

Versions: 30

Compression:

Stored size: 994 Bytes

Contents

module MultiJson
  module ConvertibleHashKeys
    private

    def symbolize_keys(hash)
      prepare_hash(hash) do |key|
        key.respond_to?(:to_sym) ? key.to_sym : key
      end
    end

    def stringify_keys(hash)
      prepare_hash(hash) do |key|
        key.respond_to?(:to_s) ? key.to_s : key
      end
    end

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

Version data entries

30 entries across 23 versions & 10 rubygems

Version Path
able-neo4j-1.0.0 vendor/bundle/jruby/1.9/gems/multi_json-1.11.2/lib/multi_json/convertible_hash_keys.rb
honeybadger-2.4.0 vendor/gems/ruby/1.9.1/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
honeybadger-2.4.0 vendor/gems/ruby/2.2.0/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
honeybadger-2.4.0 vendor/gems/ruby/2.1.0/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
vagrant-unbundled-1.8.1.1 vendor/bundle/ruby/2.3.0/gems/multi_json-1.11.2/lib/multi_json/convertible_hash_keys.rb
sc_core-0.0.7 test/dummy/vendor/bundle/ruby/2.2.0/gems/multi_json-1.11.2/lib/multi_json/convertible_hash_keys.rb
vagrant-cloudstack-1.2.0 vendor/bundle/gems/multi_json-1.11.2/lib/multi_json/convertible_hash_keys.rb
solidus_backend-1.0.0.pre3 vendor/bundle/gems/multi_json-1.11.2/lib/multi_json/convertible_hash_keys.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/multi_json-1.11.2/lib/multi_json/convertible_hash_keys.rb
multi_json-1.11.2 lib/multi_json/convertible_hash_keys.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/multi_json-1.11.1/lib/multi_json/convertible_hash_keys.rb
multi_json-1.11.1 lib/multi_json/convertible_hash_keys.rb
vagrant-cloudstack-1.1.0 vendor/bundle/gems/multi_json-1.11.0/lib/multi_json/convertible_hash_keys.rb
shoppe-paypal-1.1.0 vendor/bundle/ruby/2.1.0/gems/multi_json-1.11.0/lib/multi_json/convertible_hash_keys.rb
multi_json-1.11.0 lib/multi_json/convertible_hash_keys.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/apl-library-0.0.90/vendor/bundle/ruby/1.9.1/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/apl-library-0.0.90/vendor/bundle/ruby/2.1.0/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
apl-library-0.0.90 vendor/bundle/ruby/1.8/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb
apl-library-0.0.90 vendor/bundle/ruby/1.9.1/gems/multi_json-1.10.1/lib/multi_json/convertible_hash_keys.rb