Sha256: f13b2bbfceff0da5efa0aa87b89f20e32af200c39fcf986094121033ad7c0bf3

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

class CleanHash
  class Indifferent
    def initialize data
      @data = data
    end

    # for debug
    def to_json
      JSON.pretty_generate @data
    end

    # for puts
    def to_ary
      [@data]
    end

    # overload key ruby method because it is common hash key name
    # still accessible via to_h.key
    def key
      self[:key]
    end

    def key? name
      @data.key?(name) || @data.key?(name.to_s) || (name.respond_to?(:to_sym) ? @data.key?(name.to_sym) : nil)
    end

    def delete key
      out = []
      out.push @data.delete(key)
      out.push @data.delete(key.to_s)
      out.push @data.delete(key.to_sym) if key.respond_to?(:to_sym)
      out.each { |el| return el unless el.nil? }
      nil
    end

    def to_h
      @data
    end

    def to_json *args
      @data.to_json *args
    end

    def [] key
      data = @data[key]
      data = @data[key.to_s]   if data.nil? && !key.is_a?(String)
      data = @data[key.to_sym] if data.nil? && key.respond_to?(:to_sym)

      if data.is_a?(Hash)
        self.class.new data
      else
        data
      end
    end

    def []= key, value
      delete key
      @data[key] = value
    end

    def method_missing name, *args, &block
      return @data.send(name, *args, &block) if @data.respond_to?(name)

      m = name.to_s

      if m.end_with?('=')
        m = m.sub('=', '')
        self[m] = args.first
      elsif m.end_with?('?')
        !self[m.sub('?', '')].nil?
      elsif block
        self[m] = block
      else
        self[m]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
clean-hash-0.5.9 ./lib/clean-hash/types/indifferent_type.rb