Sha256: 17d250784510d061ecad54239644868f5cb1028639ebae571e2d963fcd64c8fd

Contents?: true

Size: 1.55 KB

Versions: 12

Compression:

Stored size: 1.55 KB

Contents

module Oj

  # A Hash subclass that normalizes the hash keys to allow lookup by the
  # key.to_s or key.to_sym. It also supports looking up hash values by methods
  # that match the keys.
  class EasyHash < Hash

    # Initializes the instance to an empty Hash.
    def initialize()
    end

    # Replaces the Object.respond_to?() method.
    # @param [Symbol] m method symbol
    # @return [Boolean] true for any method that matches an instance
    #                   variable reader, otherwise false.
    def respond_to?(m)
      return true if super
      return true if has_key?(key)
      return true if has_key?(key.to_s)
      has_key?(key.to_sym)
    end

    def [](key)
      return fetch(key, nil) if has_key?(key)
      return fetch(key.to_s, nil) if has_key?(key.to_s)
      fetch(key.to_sym, nil)
    end

    # Handles requests for Hash values. Others cause an Exception to be raised.
    # @param [Symbol|String] m method symbol
    # @return [Boolean] the value of the specified instance variable.
    # @raise [ArgumentError] if an argument is given. Zero arguments expected.
    # @raise [NoMethodError] if the instance variable is not defined.
    def method_missing(m, *args, &block)
      raise ArgumentError.new("wrong number of arguments (#{args.size} for 0 with #{m}) to method #{m}") unless args.nil? or args.empty?
      return fetch(m, nil) if has_key?(m)
      return fetch(m.to_s, nil) if has_key?(m.to_s)
      return fetch(m.to_sym, nil) if has_key?(m.to_sym)
      raise NoMethodError.new("undefined method #{m}", m)
    end

  end # EasyHash
end # Oj

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
oj-2.18.5 lib/oj/easy_hash.rb
oj-2.18.4 lib/oj/easy_hash.rb
oj-2.18.3 lib/oj/easy_hash.rb
oj-2.18.2 lib/oj/easy_hash.rb
oj-2.18.1 lib/oj/easy_hash.rb
oj-2.18.0 lib/oj/easy_hash.rb
oj-2.17.5 lib/oj/easy_hash.rb
oj-2.17.4 lib/oj/easy_hash.rb
oj-2.17.3 lib/oj/easy_hash.rb
oj-2.17.2 lib/oj/easy_hash.rb
oj-2.17.1 lib/oj/easy_hash.rb
oj-2.17.0 lib/oj/easy_hash.rb