Sha256: 93a00c7ac16d46990f617b0abcd97108f995eedd0587397af4544335b2e0f0dc

Contents?: true

Size: 797 Bytes

Versions: 7

Compression:

Stored size: 797 Bytes

Contents

class Hash
  class Accessible < Indifferent

    def self.make_accessible(value)
      if value.kind_of? Hash
        self.new value
      elsif value.kind_of? ::Array
        Accessible::Array.new value
      else
        value
      end
    end

    class Array < SimpleDelegator

      def initialize(array)
        super array.map { |v| Accessible.make_accessible v }
      end

      def push(value)
        super Accessible.make_accessible(value)
      end
      alias_method :<<, :push

    end

    def []=(key, value)
      super key, Accessible.make_accessible(value)
    end

    private

    def method_missing(method, *args, &block)
      if method.to_s.end_with? '='
        key = method[0..-2]
        self[key] = args[0]
      else
        self[method]
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hash_ext-0.6.2 lib/hash_ext/accessible.rb
hash_ext-0.6.1 lib/hash_ext/accessible.rb
hash_ext-0.6.0 lib/hash_ext/accessible.rb
hash_ext-0.5.0 lib/hash_ext/accessible.rb
hash_ext-0.4.0 lib/hash_ext/accessible.rb
hash_ext-0.3.1 lib/hash_ext/accessible.rb
hash_ext-0.3.0 lib/hash_ext/accessible.rb