class Hash
Public Instance Methods
get_path(path, delimiter = ?/, data = self)
click to toggle source
# File lib/hash-graft.rb, line 25 def get_path path, delimiter = ?/, data = self path = path.to_s.split(delimiter)if [String, Symbol].include? path.class return nil unless path.class == Array while key = path.shift if data.class == Hash and not data[key].nil? data = data[key] return data if path.length == 0 elsif data.class == Hash and not data[key.to_sym].nil? data = data[key.to_sym] return data if path.length == 0 elsif data.class == Array and key =~ /^\d*$/ and not data[key.to_i].nil? data = data[key.to_i] return data if path.length == 0 elsif data.class == Array and key == ?* return data.map do |e| stuff = e.get_path Array.new path end return data if path.length == 0 else return data[key] end end end
graft(a)
click to toggle source
# File lib/hash-graft.rb, line 4 def graft a copy = self.clone copy.graft! a end
graft!(a)
click to toggle source
# File lib/hash-graft.rb, line 9 def graft! a a.each { |k,v| if self[k].class == Hash and a[k].class == Hash self[k].graft! a[k] elsif self[k].class == Array and a[k].class == Array self[k].graft! a[k] else self[k] = a[k] end } unless a.nil? return self end
set_path(path, value, delimiter = ?/, symbols = false)
click to toggle source
# File lib/hash-graft.rb, line 54 def set_path path, value, delimiter = ?/, symbols = false data = self path = path[1..-1] if path.class == String and path[0] == delimiter path = path.to_s.split(delimiter) if [String, Symbol].include? path.class return nil unless path.class == Array while key = path.pop if key =~ /^\d*$/ v = value value = [] value[key.to_i] = v else key = key.to_sym if symbols value = {key => value} end end #puts "setting #{path} #{value}" data.graft! value end