Class: Wrest::Native::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/wrest/native/request.rb,
lib/wrest/test/request_patches.rb

Overview

This represents a HTTP request. Typically you will never need to instantiate one of these yourself - you can use one of the more conveient APIs via Wrest::Uri or Wrest::Native::Get etc. instead.

Direct Known Subclasses

Delete, Get, Options, Post, PostMultipart, Put, PutMultipart

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(wrest_uri, http_request_klass, parameters = {}, body = nil, headers = {}, options = {}) ⇒ Request

Valid tuples for the options are:

 :username => String, defaults to nil
 :password => String, defaults to nil
 :follow_redirects => Boolean, defaults to true for Get, false for anything else
 :follow_redirects_limit => Integer, defaults to 5. This is the number of redirects
                            that Wrest will automatically follow before raising an
                            Wrest::Exceptions::AutoRedirectLimitExceeded exception.
                            For example, if you set this to 1, the very first redirect
                            will raise the exception.
 :follow_redirects_count => Integer, defaults to 0. This is a count of the hops made to
                            get to this request and increases by one for every redirect 
                            until the follow_redirects_limit is hit. You should never set
                            this option yourself.
 :timeout => The period, in seconds, after which a Timeout::Error is raised 
             in the event of a connection failing to open. Defaulted to 60 by Uri#create_connection.
 :connection => The HTTP Connection object to use. This is how a keep-alive connection can be
                used for multiple requests.
 :cache_store => The object which should be used as cache store for cacheable responses. If not supplied, caching will be disabled.
 :callback => A Hash whose keys are the response codes (or Range of response codes),
                      and the values are the callback functions to be executed.
                      eg: { <response code> => lambda { |response| some_operation } }
The following options are Net::HTTP specific config options
 :detailed_http_logging => nil/$stdout/$stderr or File/Logger/IO object. Defaults to nil (recommended).
                           *WARNING* : detailed_http_logging causes a serious security hole. Never use it in production code.  
 :verify_mode => The verification mode to be used for Net::HTTP https connections. Defaults to OpenSSL::SSL::VERIFY_PEER
 :ca_path => The path to the certificates


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/wrest/native/request.rb', line 44

def initialize(wrest_uri, http_request_klass, parameters = {}, body = nil, headers = {}, options = {})
  @uri = wrest_uri
  @headers = headers.stringify_keys
  @parameters = parameters
  @body = body
  @options = options.clone
  @username = @options[:username]
  @password = @options[:password]
  @follow_redirects = (@options[:follow_redirects] ||= false)
  @follow_redirects_count = (@options[:follow_redirects_count] ||= 0)
  @follow_redirects_limit = (@options[:follow_redirects_limit] ||= 5)
  @timeout = @options[:timeout]
  @connection = @options[:connection]
  @http_request = self.build_request(http_request_klass, @uri, @parameters, @headers)
  @cache_store = @options[:cache_store]
  @verify_mode = @options[:verify_mode]
  @ca_path = @options[:ca_path]
  @detailed_http_logging = options[:detailed_http_logging]
  @callback = @options[:callback] || Wrest::Callback.new({})
  @callback = @callback.merge(Wrest::Callback.new(@options[:callback_block] || {}))
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def body
  @body
end

#ca_pathObject (readonly)

Returns the value of attribute ca_path



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def ca_path
  @ca_path
end

#cache_storeObject (readonly)

Returns the value of attribute cache_store



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def cache_store
  @cache_store
end

#connectionObject (readonly)

Returns the value of attribute connection



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def connection
  @connection
end

#follow_redirectsObject (readonly)

Returns the value of attribute follow_redirects



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def follow_redirects
  @follow_redirects
end

#follow_redirects_countObject (readonly)

Returns the value of attribute follow_redirects_count



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def follow_redirects_count
  @follow_redirects_count
end

#follow_redirects_limitObject (readonly)

Returns the value of attribute follow_redirects_limit



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def follow_redirects_limit
  @follow_redirects_limit
end

#headersObject (readonly)

Returns the value of attribute headers



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def headers
  @headers
end

#http_requestObject (readonly)

Returns the value of attribute http_request



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def http_request
  @http_request
end

#optionsObject (readonly)

Returns the value of attribute options



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def options
  @options
end

#parametersObject (readonly)

Returns the value of attribute parameters



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def parameters
  @parameters
end

#passwordObject (readonly)

Returns the value of attribute password



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def password
  @password
end

#timeoutObject (readonly)

Returns the value of attribute timeout



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def timeout
  @timeout
end

#uriObject (readonly)

Returns the value of attribute uri



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def uri
  @uri
end

#usernameObject (readonly)

Returns the value of attribute username



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def username
  @username
end

#verify_modeObject (readonly)

Returns the value of attribute verify_mode



15
16
17
# File 'lib/wrest/native/request.rb', line 15

def verify_mode
  @verify_mode
end

Instance Method Details

#build_request(request_klass, uri, parameters, headers) ⇒ Object

:nodoc:



105
106
107
108
109
110
111
# File 'lib/wrest/native/request.rb', line 105

def build_request(request_klass, uri, parameters, headers)
  if(!uri.query.empty?)
    request_klass.new(parameters.empty? ? "#{uri.uri_path}?#{uri.query}" : "#{uri.uri_path}?#{uri.query}&#{parameters.to_query}", headers)
  else
    request_klass.new(parameters.empty? ? "#{uri.uri_path}" : "#{uri.uri_path}?#{parameters.to_query}", headers)
  end
end

#do_requestObject

:nodoc:



114
115
116
# File 'lib/wrest/native/request.rb', line 114

def do_request
  @connection.request(@http_request, @body)
end

#execute_callback_if_any(actual_response) ⇒ Object

:nodoc:



119
120
121
# File 'lib/wrest/native/request.rb', line 119

def execute_callback_if_any(actual_response)
  @callback.execute(actual_response)
end

#invokeObject

Makes a request, runs the appropriate callback if any and returns a Wrest::Native::Response.

Data about the request is and logged to Wrest.logger The log entry contains the following information:

<- indicates a request
-> indicates a response

The type of request is mentioned in caps, followed by a hash uniquely identifying a particular request/response pair. In a multi-process or multi-threaded scenario, this can be used to identify request-response pairs.

The request hash is followed by a connection hash; requests using the same connection (effectively a keep-alive connection) will have the same connection hash.

This is followed by the response code, the payload size and the time taken.



85
86
87
# File 'lib/wrest/native/request.rb', line 85

def invoke
  raise Wrest::Exceptions::RealRequestMadeInTestEnvironmet, 'A real HTTP request was made while running tests. Please avoid using live HTTP connections while testing and replace them with mocks.'
end