Class: MessageBird::HttpClient
- Inherits:
-
Object
- Object
- MessageBird::HttpClient
show all
- Defined in:
- lib/messagebird/http_client.rb
Constant Summary
collapse
- VALID_RESPONSE_CODES =
[200, 201, 202, 204, 401, 404, 405, 422].freeze
- ENDPOINT =
'https://rest.messagebird.com/'
- SUBMIT_METHODS =
[:patch, :post, :put].freeze
- ALLOWED_METHODS =
SUBMIT_METHODS.dup + [:get, :delete].freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(access_key) ⇒ HttpClient
Returns a new instance of HttpClient.
19
20
21
|
# File 'lib/messagebird/http_client.rb', line 19
def initialize(access_key)
@access_key = access_key
end
|
Instance Attribute Details
#access_key ⇒ Object
Returns the value of attribute access_key.
12
13
14
|
# File 'lib/messagebird/http_client.rb', line 12
def access_key
@access_key
end
|
Instance Method Details
#assert_json_response_type(content_type) ⇒ Object
Throw an exception if the response’s content type is not JSON. This only checks the header: it doesn’t inspect the actual body.
89
90
91
92
93
|
# File 'lib/messagebird/http_client.rb', line 89
def assert_json_response_type(content_type)
raise InvalidResponseException, 'Response is not JSON' unless content_type.start_with? 'application/json'
end
|
#assert_valid_response_code(code) ⇒ Object
Throw an exception if the response code is not one we expect from the MessageBird API.
83
84
85
|
# File 'lib/messagebird/http_client.rb', line 83
def assert_valid_response_code(code)
raise ServerException, 'Unknown response from server' unless VALID_RESPONSE_CODES.include? code
end
|
#build_http_client(uri) ⇒ Object
27
28
29
30
31
32
33
34
|
# File 'lib/messagebird/http_client.rb', line 27
def build_http_client(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.set_debug_output($stdout) unless ENV['DEBUG_MB_HTTP_CLIENT'].nil?
http
end
|
#build_request(method, uri, params = {}) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/messagebird/http_client.rb', line 64
def build_request(method, uri, params = {})
raise MethodNotAllowedException unless ALLOWED_METHODS.include?(method)
request = Class.const_get("Net::HTTP::#{method.to_s.capitalize}").new(uri.request_uri)
request['Accept'] = 'application/json'
request['Authorization'] = "AccessKey #{@access_key}"
request['User-Agent'] = "MessageBird/ApiClient/#{Version::STRING} Ruby/#{RUBY_VERSION}"
if SUBMIT_METHODS.include?(method) && !params.empty?
prepare_request(request, params)
end
request
end
|
#endpoint ⇒ Object
23
24
25
|
# File 'lib/messagebird/http_client.rb', line 23
def endpoint
ENDPOINT
end
|
#prepare_request(request, params = {}) ⇒ Object
58
59
60
61
62
|
# File 'lib/messagebird/http_client.rb', line 58
def prepare_request(request, params = {})
request.set_form_data(params)
request
end
|
#request(method, path, params = {}, check_json: true) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/messagebird/http_client.rb', line 36
def request(method, path, params = {}, check_json: true)
uri = URI.join(endpoint, path)
http = build_http_client(uri)
request = build_request(method, uri, params)
response = http.request(request)
assert_valid_response_code(response.code.to_i)
assert_json_response_type(response['Content-Type']) unless check_json
response.body
end
|
#request_block(method, path, params = {}, &block) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/messagebird/http_client.rb', line 50
def request_block(method, path, params = {}, &block)
uri = URI.join(endpoint, path)
http = build_http_client(uri)
request = build_request(method, uri, params)
http.request(request, block)
end
|