class Hash

Public Instance Methods

access(path) click to toggle source
# File lib/vine.rb, line 14
def access(path)
  value = self
  
  path.to_s.split('.').each do |p|
    if p.to_i.to_s == p
      value = value[p.to_i]
    else
      value = value[p].nil? ? value[p.to_sym] : value[p]
    end
    break if value.nil?
  end
  
  value
end
Also aliased as: vine
set(path, value) click to toggle source
# File lib/vine.rb, line 29
def set(path, value)
  keys = []
  path = path.to_s.split('.')

  [*path, nil].each_cons(2) do |key,nextkey|
    tmp_hash = keys.inject(self, :fetch)

    if key.to_i.to_s == key
      key = key.to_i
    elsif tmp_hash[key].nil?
      key = key.to_sym
    end

    if tmp_hash[key].nil?
      tmp_hash[key] = {}
    elsif nextkey.to_i.to_s == nextkey && !tmp_hash[key].is_a?(Array)
      tmp_hash[key] = []
    elsif !nextkey.nil? && !tmp_hash[key].is_a?(Hash)
      tmp_hash[key] = {}
    end

    keys << key
  end # each_cons

  last_key = keys.pop
  keys.inject(self, :fetch)[last_key] = value
end
vine(path)
Alias for: access