Sha256: a4a31630d6da08536ea93ec76ad573196591c8845a364d063929d728c9fb78f2

Contents?: true

Size: 877 Bytes

Versions: 2

Compression:

Stored size: 877 Bytes

Contents

module RestCore
  class Clash
    Empty = Hash.new(&(l = lambda{|_,_|Hash.new(&l).freeze})).freeze

    attr_accessor :data
    def initialize data
      self.data = data
    end

    def [] k
      if data.key?(k)
        convert(data[k])
      else
        Empty
      end
    end

    def == rhs
      if rhs.kind_of?(Clash)
        data == rhs.data
      else
        data == rhs
      end
    end

    private
    def convert value
      case value
      when Hash
        Clash.new(value)
      when Array
        value.map{ |ele| convert(ele) }
      else
        value
      end
    end

    def respond_to_missing? msg, include_private=false
      data.respond_to?(msg, include_private)
    end

    def method_missing msg, *args, &block
      if data.respond_to?(msg)
        data.public_send(msg, *args, &block)
      else
        super
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rest-core-4.0.1 lib/rest-core/util/clash.rb
rest-core-4.0.0 lib/rest-core/util/clash.rb