Sha256: 5e3693d6436f0051032d8b8783b011f967b0e86616a1c916dfa14a30b4b24703

Contents?: true

Size: 992 Bytes

Versions: 125

Compression:

Stored size: 992 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

125 entries across 106 versions & 22 rubygems

Version Path
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
rubypitaya-3.12.5 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
fluent-plugin-google-cloud-logging-on-prem-0.1.0 vendor/ruby/3.1.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
rubypitaya-3.12.4 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
rubypitaya-3.12.3 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
rubypitaya-3.12.2 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
devcycle-ruby-server-sdk-1.1.0 examples/sinatra/vendor/bundle/ruby/3.0.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
devcycle-ruby-server-sdk-1.1.0 examples/sinatra/vendor/bundle/ruby/2.6.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
devcycle-ruby-server-sdk-1.1.0 examples/sinatra/vendor/bundle/ruby/3.1.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
vagrant-unbundled-2.2.19.0 vendor/bundle/ruby/3.0.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
vagrant-unbundled-2.2.18.0 vendor/bundle/ruby/3.0.0/gems/multi_json-1.15.0/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.2.1.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.2.0 vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.2.0.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.1.26.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.1.25.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.1.24.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.1.23.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb
logstash-output-scalyr-0.1.22.beta vendor/bundle/jruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/convertible_hash_keys.rb