class Compendium::OpenHash

Public Class Methods

[](hash = {}) click to toggle source
# File lib/compendium/open_hash.rb, line 6
def [](hash = {})
  new(hash)
end

Public Instance Methods

dup() click to toggle source
# File lib/compendium/open_hash.rb, line 11
def dup
  self.class.new(self)
end

Protected Instance Methods

convert_value(value) click to toggle source
# File lib/compendium/open_hash.rb, line 17
def convert_value(value)
  if value.is_a? Hash
    Params[value].tap do |oh|
      oh.each do |k, v|
        oh[k] = convert_value(v) if v.is_a? Hash
      end
    end
  elsif value.is_a?(Array)
    value.dup.replace(value.map { |e| convert_value(e) })
  else
    value
  end
end
method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/compendium/open_hash.rb, line 31
def method_missing(name, *args, &block)
  method = name.to_s

  case method
    when %r{.=$}
      super unless args.length == 1
      return self[method[0...-1]] = args.first

    when %r{.\?$}
      super unless args.empty?
      return self.key?(method[0...-1].to_sym)

    when %r{^_.}
      super unless args.empty?
      return self[method[1..-1]] if self.key?(method[1..-1].to_sym)

    else
      return self[method] if key?(method) || !respond_to?(method)
  end

  super
end
respond_to_missing?(name, include_private = false) click to toggle source
Calls superclass method
# File lib/compendium/open_hash.rb, line 54
def respond_to_missing?(name, include_private = false)
  method = name.to_s

  case method
    when %r{.[=?]$}
      return true if self.key?(method[0...-1])

    when %r{^_.}
      return true if self.key?(method[1..-1])
  end

  super
end