# File lib/tapkit/control/keyvaluecoding.rb, line 97
                def take_value_for_keypath( keypath, value )
                        paths  = keypath.split '.'
                        object = self
                        paths.each_with_index do |path, index|
                                writer = "#{path}="

                                if (index + 1) == paths.size then
                                        # takes value for key
                                        if object.respond_to? :take_value then
                                                object.take_value(path, value)
                                        elsif object.respond_to? writer then
                                                object.__send__(writer, value)
                                        elsif directly? object then
                                                object.instance_eval "@#{path}=value"
                                        else
                                                begin
                                                        handle_take_value(writer, value)
                                                rescue UnknownKeyError
                                                        _raise_error(object, path)
                                                end
                                        end
                                else
                                        # get and set value for the object
                                        if object.respond_to? :retrieve_value then
                                                object = object.retrieve_value path
                                        elsif object.respond_to? path then
                                                object = object.__send__ path
                                        elsif directly? object then
                                                object = object.instance_eval "@#{path}"
                                        else
                                                begin
                                                        object = handle_retrieve_value path
                                                rescue UnknownKeyError
                                                        _raise_error(object, path)
                                                end
                                        end
                                end
                        end
                end