Class: Parliament::Request::BaseRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/parliament/request/base_request.rb

Overview

Base request object, allowing the user to make a request to an API.

Since:

  • 0.7.5

Direct Known Subclasses

UrlRequest

Constant Summary collapse

TIMEOUT =

Since:

  • 0.7.5

40.freeze
CONNECTTIMEOUT =

Since:

  • 0.7.5

5.freeze

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url: nil, headers: nil, builder: nil, decorators: nil) ⇒ BaseRequest

Creates a new instance of Parliament::Request::BaseRequest.

An interesting note for #initialize is that setting base_url on the class, or using the environment variable PARLIAMENT_BASE_URL means you don’t need to pass in a base_url. You can pass one anyway to override the environment variable or class parameter. Similarly, headers can be set by either settings the headers on the class, or passing headers in.

Examples:

Setting the base_url on the class

Parliament::Request::BaseRequest.base_url = 'http://example.com'

Parliament::Request::BaseRequest.new.base_url #=> 'http://example.com'

Setting the base_url via environment variable

ENV['PARLIAMENT_BASE_URL'] #=> 'http://test.com'

Parliament::Request::BaseRequest.new.base_url #=> 'http://test.com'

Setting the base_url via a parameter

Parliament::Request::BaseRequest.base_url #=> nil
ENV['PARLIAMENT_BASE_URL'] #=> nil

Parliament::Request::BaseRequest.new(base_url: 'http://example.com').base_url #=> 'http://example.com'

Overriding the base_url via a parameter

ENV['PARLIAMENT_BASE_URL'] #=> 'http://test.com'

Parliament::Request::BaseRequest.new(base_url: 'http://example.com').base_url #=> 'http://example.com'

Setting the headers on the class

Parliament::Request::BaseRequest.headers = { 'Accept' => 'Test' }

Parliament::Request::BaseRequest.new.headers #=> '{ 'Accept' => 'Test' }

Setting the headers via a parameter

Parliament::Request::BaseRequest.headers #=> nil

Parliament::Request::BaseRequest.new(headers: '{ 'Accept' => 'Test' }).headers #=> { 'Accept' => 'Test' }

Overriding the headers via a parameter

Parliament::Request::BaseRequest.headers = { 'Accept' => 'Test' }

Parliament::Request::BaseRequest.new(headers: '{ 'Accept' => 'Test2' }).headers #=> { 'Accept' => 'Test2' }

Parameters:

  • base_url (String) (defaults to: nil)

    the base url of our api. (expected: example.com - without the trailing slash).

  • headers (Hash) (defaults to: nil)

    the headers being sent in the request.

  • builder (Parliament::Builder) (defaults to: nil)

    the builder to use in order to build a response.

Since:

  • 0.7.5



62
63
64
65
66
67
68
# File 'lib/parliament/request/base_request.rb', line 62

def initialize(base_url: nil, headers: nil, builder: nil, decorators: nil)
  @base_url     = base_url || self.class.base_url
  @headers      = headers || self.class.headers || {}
  @builder      = builder || Parliament::Builder::BaseResponseBuilder
  @decorators   = decorators
  @query_params = {}
end

Class Attribute Details

.base_urlObject

Since:

  • 0.7.5



168
169
170
# File 'lib/parliament/request/base_request.rb', line 168

def base_url
  @base_url
end

.headersObject

Since:

  • 0.7.5



168
169
170
# File 'lib/parliament/request/base_request.rb', line 168

def headers
  @headers
end

Instance Attribute Details

#base_urlString (readonly)

the base url of our api. (expected: example.com - without the trailing slash).

Returns:

  • (String)

    the current value of base_url

Since:

  • 0.7.5



11
12
13
# File 'lib/parliament/request/base_request.rb', line 11

def base_url
  @base_url
end

#query_paramsObject (readonly)

Since:

  • 0.7.5



15
16
17
# File 'lib/parliament/request/base_request.rb', line 15

def query_params
  @query_params
end

Instance Method Details

#get(params: nil, timeout: TIMEOUT, connecttimeout: CONNECTTIMEOUT) ⇒ Parliament::Response::BaseResponse

Makes an HTTP GET request and process results into a response.

Examples:

HTTP GET request

request = Parliament::Request::BaseRequest.new(base_url: 'http://example.com/people/123'

# url: http://example.com/people/123

response = request.get #=> #<Parliament::Response::BaseResponse ...>

HTTP GET request with URI encoded form values

request = Parliament::Request.new(base_url: 'http://example.com/people/current')

# url: http://example.com/people/current?limit=10&page=4&lang=en-gb

response = request.get({ limit: 10, page: 4, lang: 'en-gb' }) #=> #<Parliament::Response::BaseResponse ...>

Parameters:

  • params (Hash) (defaults to: nil)

    (optional) additional URI encoded form values to be added to the URI.

Returns:

Raises:

Since:

  • 0.7.5



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/parliament/request/base_request.rb', line 93

def get(params: nil, timeout: TIMEOUT, connecttimeout: CONNECTTIMEOUT)
  Typhoeus::Config.user_agent = 'Ruby'

  uri_hash = separate_uri(query_url, @query_params, params)

  typhoeus_request = Typhoeus::Request.new(
    uri_hash[:endpoint],
    method:          :get,
    params:          uri_hash[:params],
    headers:         headers,
    timeout:         timeout,
    connecttimeout:  connecttimeout,
    accept_encoding: 'gzip'
  )

  response = typhoeus_request.run

  handle_errors(response)

  build_response(response)
end

#post(params: nil, body: nil, timeout: TIMEOUT, connecttimeout: CONNECTTIMEOUT) ⇒ Parliament::Response::BaseResponse

Makes an HTTP POST request and process results into a response.

Examples:

HTTP POST request

request = Parliament::Request::BaseRequest.new(base_url: 'http://example.com/people/123', headers: {'Content': 'application/json', 'Accept': 'application/json'})

# url: http://example.com/people/123

response = request.post(body: {}.to_json) #=> #<Parliament::Response::BaseResponse ...>

HTTP POST request with URI encoded form values

request = Parliament::Request::BaseRequest.new(base_url: 'http://example.com/people/current', headers: {'Content': 'application/json', 'Accept': 'application/json'})

# url: http://example.com/people/current?limit=10&page=4&lang=en-gb

response = request.post({ limit: 10, page: 4, lang: 'en-gb' }, body: {}.to_json) #=> #<Parliament::Response::BaseResponse ...>

Parameters:

  • params (Hash) (defaults to: nil)

    (optional) additional URI encoded form values to be added to the URI.

  • body (String) (defaults to: nil)

    (optional) body of the post request.

  • timeout (Integer) (defaults to: TIMEOUT)

    (optional) a Net::HTTP.read_timeout value passed suring the post.

Returns:

Raises:

Since:

  • 0.7.5



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/parliament/request/base_request.rb', line 140

def post(params: nil, body: nil, timeout: TIMEOUT, connecttimeout: CONNECTTIMEOUT)
  Typhoeus::Config.user_agent = 'Ruby'

  uri_hash = separate_uri(query_url, @query_params, params)

  typhoeus_request = Typhoeus::Request.new(
    uri_hash[:endpoint],
    method:          :post,
    params:          uri_hash[:params],
    headers:         headers.merge({ 'Content-Type' => 'application/json' }),
    accept_encoding: 'gzip',
    timeout:         timeout,
    connecttimeout:  connecttimeout,
    body:            body
  )

  response = typhoeus_request.run

  handle_errors(response)

  build_response(response)
end