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