Sha256: 46d9c7ab2eda0a643d565ccc9debcd916d3d1e5151a92005f002b41a944446e4

Contents?: true

Size: 1.71 KB

Versions: 80

Compression:

Stored size: 1.71 KB

Contents

module HTTP
  class WebMockPerform
    def initialize(request, &perform)
      @request = request
      @perform = perform
      @request_signature = nil
    end

    def exec
      replay || perform || halt
    end

    def request_signature
      unless @request_signature
        @request_signature = @request.webmock_signature
        register_request(@request_signature)
      end

      @request_signature
    end

    protected

    def response_for_request(signature)
      ::WebMock::StubRegistry.instance.response_for_request(signature)
    end

    def register_request(signature)
      ::WebMock::RequestRegistry.instance.requested_signatures.put(signature)
    end

    def replay
      webmock_response = response_for_request request_signature

      return unless webmock_response

      raise_timeout_error if webmock_response.should_timeout
      webmock_response.raise_error_if_any

      invoke_callbacks(webmock_response, :real_request => false)
      ::HTTP::Response.from_webmock webmock_response, request_signature
    end

    def raise_timeout_error
      raise Errno::ETIMEDOUT if HTTP::VERSION < "1.0.0"
      raise HTTP::ConnectionError, "connection error: #{Errno::ETIMEDOUT.new}"
    end

    def perform
      return unless ::WebMock.net_connect_allowed?(request_signature.uri)
      response = @perform.call
      invoke_callbacks(response.to_webmock, :real_request => true)
      response
    end

    def halt
      raise ::WebMock::NetConnectNotAllowedError.new request_signature
    end

    def invoke_callbacks(webmock_response, options = {})
      ::WebMock::CallbackRegistry.invoke_callbacks(
        options.merge({ :lib => :http_rb }),
        request_signature,
        webmock_response
      )
    end
  end
end

Version data entries

80 entries across 80 versions & 5 rubygems

Version Path
cloudsmith-api-0.49.98 vendor/bundle/ruby/2.6.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.49.94 vendor/bundle/ruby/2.6.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.49.21 vendor/bundle/ruby/2.6.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.49.15 vendor/bundle/ruby/2.6.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.49.13 vendor/bundle/ruby/2.6.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.49.9 vendor/bundle/ruby/2.3.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-2.2.7.0 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.44.4 vendor/bundle/ruby/2.3.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
dadapush_client-1.0.1 vendor/bundle/ruby/2.3.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.30.7 vendor/bundle/ruby/2.3.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
color_me_shop-1.0.0 vendor/bundle/ruby/2.5.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-2.0.2.0 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-2.0.1.0 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
cloudsmith-api-0.21.4 vendor/bundle/ruby/2.3.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-2.0.0.1 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-1.9.8.1 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-1.9.7.1 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-1.9.5.1 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-1.9.1.1 vendor/bundle/ruby/2.4.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb
vagrant-unbundled-1.8.5.2 vendor/bundle/ruby/2.3.0/gems/webmock-1.24.6/lib/webmock/http_lib_adapters/http_rb/webmock.rb