lib/http_spew.rb in http_spew-0.1.0 vs lib/http_spew.rb in http_spew-0.2.0

- old
+ new

@@ -9,89 +9,19 @@ autoload :InputSpray, "http_spew/input_spray" class Error < RuntimeError; end class TimeoutError < Error; end class ConnectionReset < Error; end + class RequestError < Error; end + class UnexpectedResponse < RequestError; end + class ChecksumError < HTTP_Spew::Error; end + class LengthError < HTTP_Spew::Error; end + class NoWritersError < HTTP_Spew::Error; end + class EOF < EOFError; end - def self.error_all(requests, error) # :nodoc: - requests.each { |req| req.error ||= error } - end + require "http_spew/version" + require "http_spew/headers" + require "http_spew/request" + require "http_spew/class_methods" - def self.done_early(ready, failed, requests) # :nodoc: - ready.concat(failed) - pending = requests - ready - unless pending.empty? - error = ConnectionReset.new("prematurely terminated") - ready.concat(error_all(pending, error)) - end - ready.uniq! - ready - end - - # Returns an array of requests that are complete, including those - # that have errored out. Incomplete requests remain in +requests+ - # If +need+ is fullfilled, it closes all incomplete requests and - # returns all requests. - def self.wait_nonblock!(need, requests) - ready, failed = [], [] - requests.delete_if do |req| - begin - case req.resume - when Symbol # :wait_writable, :wait_readable - false - else - (ready << req).size == need and - return done_early(ready, failed, requests) - true - end - rescue => e - req.error = e - failed << req - end - end - ready.concat(failed).empty? ? nil : ready - end - - # Returns an array of requests that are complete, including those - # that have errored out. - # If +need+ is fullfilled, it closes all incomplete requests. - def self.wait(need, requests, timeout) - ready, failed = [], [] - pollset = {} - begin - requests.each do |req| - begin - case rv = req.resume - when Symbol # :wait_writable, :wait_readable - pollset[req] = rv - else - (ready << req).size == need and - return done_early(ready, failed, requests) - pollset.delete(req) - end - rescue => e - req.error = e - failed << req - pollset.delete(req) - end - end - break if pollset.empty? - - t0 = Time.now - busy = pollset.keys - rv = Kgio.poll(pollset, timeout.to_i) or break - timeout -= (Time.now - t0) * 1000 - rescue Errno::EINTR - timeout -= (Time.now - t0) * 1000 - retry - end while timeout > 0.0 && requests = rv.keys.concat(busy).uniq! - - ready.concat(failed) - unless requests.empty? - ready.concat(error_all(requests, TimeoutError.new("request timed out"))) - ready.uniq! - end - ready - end + extend HTTP_Spew::ClassMethods end -require "http_spew/headers" -require "http_spew/request"