29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# 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
last_key = keys.pop
keys.inject(self, :fetch)[last_key] = value
end
|