Hash.keys_to_meths by c00lryguy WIP
1 2 hsh = {:one=>1, "two"=>2, "tres"=>3} 3 hsh.keys_to_meth 4 hsh.two # => 2 5 hsh.two = "t-dubble-izzo" # => "t-dubble-izzo" 6 p hsh # => {:one=>1, "two"=>"t-dubble-izzo", "three"=>3}
Fckup: String and Symbols mess up keys
1 2 hsh = {:one=>1, "one"=>"uno"} 3 hsh.keys_to_meth 4 hsh.one # => 1 5 hsh.one = "GARBLE" # => "t-dubble-izzo" 6 p hsh # => {:one=>"GARBLE", "one"=>"uno"}
1 2 module Keys_to_Meths 3 def method_missing(meth, *args) 4 if meth.to_s[-1] == 61 #if last char is an equal sign 5 key = self.keys.select{|key| key.to_s == meth.to_s[0...-1]}[0] 6 key ? self[key] = args[0] : raise("undefined key '#{meth}'") 7 else 8 key = self.keys.select{|key| key.to_s == meth.to_s}[0] 9 key ? self[key] : raise("undefined key '#{meth}'") 10 end 11 end 12 end 13 14 class Hash 15 def keys_to_meths 16 self.each_key {|key| if self.methods.include?(key.to_s) then raise("key '#{key.to_s}' included in Hash method list") end} 17 extend Keys_to_Meths 18 end 19 end