Class: Seahorse::Client::Http::Response
- Inherits:
-
Object
- Object
- Seahorse::Client::Http::Response
- Defined in:
- lib/seahorse/client/http/response.rb
Instance Attribute Summary collapse
- #body ⇒ IO
- #error ⇒ StandardError? readonly
- #headers ⇒ Headers
-
#status_code ⇒ Integer
Returns ‘0` if the request failed to generate any response.
Instance Method Summary collapse
- #body_contents ⇒ String
-
#initialize(options = {}) ⇒ Response
constructor
A new instance of Response.
- #on_data(&callback) ⇒ Object
- #on_done(status_code_range, &callback) ⇒ Object
- #on_error(&callback) ⇒ Object
- #on_headers(status_code_range = nil, &block) ⇒ Object
- #on_success(status_code_range = 200..599, &callback) ⇒ Object
- #reset ⇒ Object
- #signal_data(chunk) ⇒ Object
-
#signal_done(options = {}) ⇒ Object
Completes the http response.
- #signal_error(networking_error) ⇒ Object
- #signal_headers(status_code, headers) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Response
Returns a new instance of Response.
9 10 11 12 13 14 15 |
# File 'lib/seahorse/client/http/response.rb', line 9 def initialize( = {}) @status_code = [:status_code] || 0 @headers = [:headers] || Headers.new @body = [:body] || StringIO.new @listeners = Hash.new { |h,k| h[k] = [] } @complete = false end |
Instance Attribute Details
#body ⇒ IO
25 26 27 |
# File 'lib/seahorse/client/http/response.rb', line 25 def body @body end |
#error ⇒ StandardError? (readonly)
28 29 30 |
# File 'lib/seahorse/client/http/response.rb', line 28 def error @error end |
#headers ⇒ Headers
22 23 24 |
# File 'lib/seahorse/client/http/response.rb', line 22 def headers @headers end |
#status_code ⇒ Integer
Returns ‘0` if the request failed to generate any response.
19 20 21 |
# File 'lib/seahorse/client/http/response.rb', line 19 def status_code @status_code end |
Instance Method Details
#body_contents ⇒ String
40 41 42 43 44 45 |
# File 'lib/seahorse/client/http/response.rb', line 40 def body_contents body.rewind contents = body.read body.rewind contents end |
#on_data(&callback) ⇒ Object
119 120 121 |
# File 'lib/seahorse/client/http/response.rb', line 119 def on_data(&callback) @listeners[:data] << Proc.new end |
#on_done(status_code_range, &callback) ⇒ Object
123 124 125 126 127 128 129 130 |
# File 'lib/seahorse/client/http/response.rb', line 123 def on_done(status_code_range, &callback) listener = listener(status_code_range, Proc.new) if @done listener.call else @listeners[:done] << listener end end |
#on_error(&callback) ⇒ Object
140 141 142 143 144 145 146 |
# File 'lib/seahorse/client/http/response.rb', line 140 def on_error(&callback) on_done(0..599) do if @error yield(@error) end end end |
#on_headers(status_code_range = nil, &block) ⇒ Object
115 116 117 |
# File 'lib/seahorse/client/http/response.rb', line 115 def on_headers(status_code_range = nil, &block) @listeners[:headers] << listener(status_code_range, Proc.new) end |
#on_success(status_code_range = 200..599, &callback) ⇒ Object
132 133 134 135 136 137 138 |
# File 'lib/seahorse/client/http/response.rb', line 132 def on_success(status_code_range = 200..599, &callback) on_done(status_code_range) do unless @error yield end end end |
#reset ⇒ Object
148 149 150 151 152 153 |
# File 'lib/seahorse/client/http/response.rb', line 148 def reset @status_code = 0 @headers.clear @body.truncate(0) @error = nil end |
#signal_data(chunk) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/seahorse/client/http/response.rb', line 56 def signal_data(chunk) unless chunk == '' @body.write(chunk) emit(:data, chunk) end end |
#signal_done ⇒ Object #signal_done(options = {}) ⇒ Object
Completes the http response.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/seahorse/client/http/response.rb', line 93 def signal_done( = {}) if .keys.sort == [:body, :headers, :status_code] signal_headers([:status_code], [:headers]) signal_data([:body]) signal_done elsif .empty? @body.rewind if @body.respond_to?(:rewind) @done = true emit(:done) else msg = "options must be empty or must contain :status_code, :headers, " msg << "and :body" raise ArgumentError, msg end end |
#signal_error(networking_error) ⇒ Object
110 111 112 113 |
# File 'lib/seahorse/client/http/response.rb', line 110 def signal_error(networking_error) @error = networking_error signal_done end |