Class: Curl::WebMockCurlEasy
- Inherits:
-
Easy
- Object
- Easy
- Curl::WebMockCurlEasy
- Defined in:
- lib/webmock/http_lib_adapters/curb_adapter.rb
Instance Method Summary collapse
- #basic_auth_headers ⇒ Object
- #body_str ⇒ Object (also: #body)
- #build_curb_response(webmock_response) ⇒ Object
- #build_request_signature ⇒ Object
- #build_webmock_response ⇒ Object
- #chunked_response? ⇒ Boolean
- #content_type ⇒ Object
- #curb_or_webmock ⇒ Object
- #delete=(value) ⇒ Object
- #head=(value) ⇒ Object
- #header_str ⇒ Object (also: #head)
-
#http(method) ⇒ Object
Mocks of Curl::Easy methods below here.
- #http_post(*data) ⇒ Object (also: #post)
- #http_put(data = nil) ⇒ Object (also: #put)
- #invoke_curb_callbacks ⇒ Object
- #last_effective_url ⇒ Object
- #perform ⇒ Object
- #post_body=(data) ⇒ Object
- #put_data=(data) ⇒ Object
- #response_code ⇒ Object
- #webmock_follow_location(location) ⇒ Object
Instance Method Details
#basic_auth_headers ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 106 def basic_auth_headers if self.username {'Authorization' => WebMock::Util::Headers.basic_auth_header(self.username, self.password)} else {} end end |
#body_str ⇒ Object Also known as: body
246 247 248 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 246 def body_str @body_str ||= super end |
#build_curb_response(webmock_response) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 114 def build_curb_response(webmock_response) raise Curl::Err::TimeoutError if webmock_response.should_timeout webmock_response.raise_error_if_any @body_str = webmock_response.body @response_code = webmock_response.status[0] @header_str = "HTTP/1.1 #{webmock_response.status[0]} #{webmock_response.status[1]}\r\n" if webmock_response.headers @header_str << webmock_response.headers.map do |k,v| "#{k}: #{v.is_a?(Array) ? v.join(", ") : v}" end.join("\r\n") location = webmock_response.headers['Location'] if self.follow_location? && location @last_effective_url = location webmock_follow_location(location) end @content_type = webmock_response.headers["Content-Type"] @transfer_encoding = webmock_response.headers["Transfer-Encoding"] end @last_effective_url ||= self.url end |
#build_request_signature ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 82 def build_request_signature method = @webmock_method.to_s.downcase.to_sym uri = WebMock::Util::URI.heuristic_parse(self.url) uri.path = uri.normalized_path.gsub("[^:]//","/") request_body = case method when :post self.post_body || @post_body when :put @put_data else nil end request_signature = WebMock::RequestSignature.new( method, uri.to_s, :body => request_body, :headers => self.headers.merge(basic_auth_headers) ) request_signature end |
#build_webmock_response ⇒ Object
179 180 181 182 183 184 185 186 187 188 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 179 def build_webmock_response status, headers = WebMock::HttpLibAdapters::CurbAdapter.parse_header_string(self.header_str) webmock_response = WebMock::Response.new webmock_response.status = [self.response_code, status] webmock_response.body = self.body_str webmock_response.headers = headers webmock_response end |
#chunked_response? ⇒ Boolean
175 176 177 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 175 def chunked_response? defined?( @transfer_encoding ) && @transfer_encoding == 'chunked' && self.body_str.respond_to?(:each) end |
#content_type ⇒ Object
264 265 266 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 264 def content_type @content_type ||= super end |
#curb_or_webmock ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 58 def curb_or_webmock request_signature = build_request_signature WebMock::RequestRegistry.instance.requested_signatures.put(request_signature) if webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature) build_curb_response(webmock_response) WebMock::CallbackRegistry.invoke_callbacks( {:lib => :curb}, request_signature, webmock_response) invoke_curb_callbacks true elsif WebMock.net_connect_allowed?(request_signature.uri) res = yield if WebMock::CallbackRegistry.any_callbacks? webmock_response = build_webmock_response WebMock::CallbackRegistry.invoke_callbacks( {:lib => :curb, :real_request => true}, request_signature, webmock_response) end res else raise WebMock::NetConnectNotAllowedError.new(request_signature) end end |
#delete=(value) ⇒ Object
236 237 238 239 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 236 def delete= value @webmock_method = :delete if value super end |
#head=(value) ⇒ Object
241 242 243 244 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 241 def head= value @webmock_method = :head if value super end |
#header_str ⇒ Object Also known as: head
255 256 257 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 255 def header_str @header_str ||= super end |
#http(method) ⇒ Object
Mocks of Curl::Easy methods below here.
194 195 196 197 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 194 def http(method) @webmock_method = method super end |
#http_post(*data) ⇒ Object Also known as: post
213 214 215 216 217 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 213 def http_post *data @webmock_method = :post @post_body = data.join('&') if data && !data.empty? super end |
#http_put(data = nil) ⇒ Object Also known as: put
206 207 208 209 210 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 206 def http_put data = nil @webmock_method = :put @put_data = data if data super end |
#invoke_curb_callbacks ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 151 def invoke_curb_callbacks @on_progress.call(0.0,1.0,0.0,1.0) if defined?( @on_progress ) self.header_str.lines.each { |header_line| @on_header.call header_line } if defined?( @on_header ) if defined?( @on_body ) if chunked_response? self.body_str.each do |chunk| @on_body.call(chunk) end else @on_body.call(self.body_str) end end @on_complete.call(self) if defined?( @on_complete ) case response_code when 200..299 @on_success.call(self) if defined?( @on_success ) when 400..499 @on_missing.call(self, self.response_code) if defined?( @on_missing ) when 500..599 @on_failure.call(self, self.response_code) if defined?( @on_failure ) end end |
#last_effective_url ⇒ Object
260 261 262 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 260 def last_effective_url @last_effective_url ||= super end |
#perform ⇒ Object
220 221 222 223 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 220 def perform @webmock_method ||= :get curb_or_webmock { super } end |
#post_body=(data) ⇒ Object
231 232 233 234 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 231 def post_body= data @webmock_method = :post super end |
#put_data=(data) ⇒ Object
225 226 227 228 229 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 225 def put_data= data @webmock_method = :put @put_data = data super end |
#response_code ⇒ Object
251 252 253 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 251 def response_code @response_code ||= super end |
#webmock_follow_location(location) ⇒ Object
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/webmock/http_lib_adapters/curb_adapter.rb', line 140 def webmock_follow_location(location) first_url = self.url self.url = location curb_or_webmock do send( "http_#{@webmock_method}_without_webmock" ) end self.url = first_url end |