Sha256: c3a0ab7f7ecfe023cdb9f21f6b5b2f13df3360d7d43f0f2ebe285f8ccb49e107
Contents?: true
Size: 1.86 KB
Versions: 3
Compression:
Stored size: 1.86 KB
Contents
require 'iowa/Constants' class Object def takeValueForKey(value, key) __send__("#{key}=", value) end def valueForKey(key) __send__(key) end def takeValueForKeyPath(value, keyPath) keys = keyPath.split(Iowa::C_dot) lastKey = keys.pop target = self for key in keys target = target.valueForKey(key) end target.takeValueForKey(value, lastKey) end def valueForKeyPath(keyPath) keys = keyPath.split(Iowa::C_dot) result = self keys.each_index do |i| if keys[i] =~ /^[&](.*)/ return result.__send__($1) do |val| val.valueForKeyPath(keys[i+1..-1].join(Iowa::C_dot)) end end result = result.valueForKey keys[i] end result end def valueForKeyPathWithArgs(keyPath,*args) keys = keyPath.split(Iowa::C_dot) final_method = keys.pop result = self keys.each_index do |i| if keys[i] =~ /^[&](.*)/ return result.__send__($1) do |val| val.valueForKeyPath(keys[i+1..-1].join(Iowa::C_dot)) end end result = result.valueForKey keys[i] end args.length == 0 ? result.__send__(final_method) : result.__send__(final_method,*args) end def existsKeyPath?(keyPath) keys = keyPath.split(Iowa::C_dot) lastKey = keys.pop target = self keys.each_index do |i| if keys[i] =~ /^[&](.*)/ return target.__send__($1) do |val| val.existsKeyPath?(keys[i+1..-1].join(Iowa::C_dot)) end end target = target.valueForKey keys[i] end target.respond_to?(lastKey) rescue Exception => e false end end class Hash def takeValueForKey(value, key) self[key] = value end def valueForKey(key) self[key] end end class Array def takeValueForKey(value, key) self[key.to_i] = value end def valueForKey(key) self[key.to_i] end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
IOWA-1.0.3 | src/iowa/KeyValueCoding.rb |
IOWA-1.0.2 | src/iowa/KeyValueCoding.rb |
IOWA-1.0.0 | src/iowa/KeyValueCoding.rb |