def copy(options = {})
raise CloudFiles::Exception::Syntax, "You must provide the :container, :name, or :headers for this operation" unless (options[:container] || options[:name] || options[:headers])
new_container = options[:container] || self.container.name
new_name = options[:name] || self.name
new_headers = options[:headers] || {}
raise CloudFiles::Exception::Syntax, "The :headers option must be a hash" unless new_headers.is_a?(Hash)
new_name.sub!(/^\//,'')
headers = {'X-Copy-From' => "#{self.container.name}/#{self.name}", 'Content-Type' => self.content_type.sub(/;.+/, '')}.merge(new_headers)
new_path = "#{CloudFiles.escape new_container}/#{CloudFiles.escape new_name, '/'}"
response = self.container.connection.storage_request("PUT", new_path, headers)
code = response.code
raise CloudFiles::Exception::InvalidResponse, "Invalid response code #{response.code}" unless (response.code =~ /^20/)
return CloudFiles::Container.new(self.container.connection, new_container).object(new_name)
end