ruby_http_client 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/CHANGELOG.md +5 -0
- data/README.md +3 -3
- data/lib/ruby_http_client.rb +14 -11
- data/ruby_http_client.gemspec +1 -1
- data/test/test_ruby_http_client.rb +71 -14
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f9d4f32d8569bd5aa2e86656e3d6e68b5334442
|
4
|
+
data.tar.gz: 475cbb494afc68fe05165188196d7ae5f4e56113
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98ed2fbc4320ce9a9391db9f63d3c7bc02f27eb52cddb548af2a2b98dcb55ab015477911af84850aedcfc0a5b11992aaa50cf2b544df1f333461459e6b08e0ea
|
7
|
+
data.tar.gz: ce31fc3da4472576bfc3f2ca373c1a9719a3d3f34d8d3a3567737dea9152aeafa2ec04ac1eb39b467605f5d9b6e091ecb699e3b07b502fad0bc5963670f3c4d4
|
data/.gitignore
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
bin
|
1
2
|
*.gem
|
2
3
|
*.rbc
|
3
4
|
/.config
|
@@ -28,7 +29,7 @@ build/
|
|
28
29
|
|
29
30
|
# for a library or gem, you might want to ignore these files since the code is
|
30
31
|
# intended to run in multiple environments; otherwise, check them in:
|
31
|
-
|
32
|
+
Gemfile.lock
|
32
33
|
# .ruby-version
|
33
34
|
# .ruby-gemset
|
34
35
|
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
|
|
3
3
|
|
4
4
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
5
5
|
|
6
|
+
## [3.1.0] - 2016-04-10
|
7
|
+
### Added
|
8
|
+
- #5 Ability to set the Content-Type header
|
9
|
+
- Thanks to [Wataru Sato](https://github.com/awwa) for the pull request!
|
10
|
+
|
6
11
|
## [3.0.2] - 2016-04-10
|
7
12
|
### Update
|
8
13
|
- #8 Internal refactor
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ All updates to this library is documented in our [CHANGELOG](https://github.com/
|
|
12
12
|
|
13
13
|
## Prerequisites
|
14
14
|
|
15
|
-
- Ruby version 2.2
|
15
|
+
- Ruby version 2.2+
|
16
16
|
|
17
17
|
## Install Package
|
18
18
|
|
@@ -27,7 +27,7 @@ gem install ruby_http_client
|
|
27
27
|
```ruby
|
28
28
|
require 'ruby_http_client'
|
29
29
|
global_headers = {'Authorization' => 'Basic XXXXXXX' }
|
30
|
-
client = SendGrid::Client(host: 'base_url', request_headers: global_headers)
|
30
|
+
client = SendGrid::Client.new(host: 'base_url', request_headers: global_headers)
|
31
31
|
client.your.api._(param).call.get
|
32
32
|
puts response.status_code
|
33
33
|
puts response.body
|
@@ -39,7 +39,7 @@ puts response.headers
|
|
39
39
|
```ruby
|
40
40
|
require 'ruby_http_client'
|
41
41
|
global_headers = {'Authorization' => 'Basic XXXXXXX' }
|
42
|
-
client = SendGrid::Client(host: 'base_url', request_headers: global_headers)
|
42
|
+
client = SendGrid::Client.new(host: 'base_url', request_headers: global_headers)
|
43
43
|
query_params = { 'hello' => 0, 'world' => 1 }
|
44
44
|
request_headers = { 'X-Test' => 'test' }
|
45
45
|
data = { 'some' => 1, 'awesome' => 2, 'data' => 3}
|
data/lib/ruby_http_client.rb
CHANGED
@@ -19,7 +19,7 @@ module SendGrid
|
|
19
19
|
|
20
20
|
# A simple REST client.
|
21
21
|
class Client
|
22
|
-
attr_reader :host, :request_headers, :url_path
|
22
|
+
attr_reader :host, :request_headers, :url_path, :request, :http
|
23
23
|
# * *Args* :
|
24
24
|
# - +host+ -> Base URL for the api. (e.g. https://api.sendgrid.com)
|
25
25
|
# - +request_headers+ -> A hash of the headers you want applied on
|
@@ -132,18 +132,21 @@ module SendGrid
|
|
132
132
|
def build_request(name, args)
|
133
133
|
build_args(args) if args
|
134
134
|
uri = build_url(query_params: @query_params)
|
135
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
136
|
-
http = add_ssl(http)
|
135
|
+
@http = add_ssl(Net::HTTP.new(uri.host, uri.port))
|
137
136
|
net_http = Kernel.const_get('Net::HTTP::' + name.to_s.capitalize)
|
138
|
-
request = net_http.new(uri.request_uri)
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
request['Content-Type'] = ''
|
137
|
+
@request = build_request_headers(net_http.new(uri.request_uri))
|
138
|
+
if (@request_body &&
|
139
|
+
(!@request_headers.has_key?('Content-Type') ||
|
140
|
+
@request_headers['Content-Type'] == 'application/json')
|
141
|
+
)
|
142
|
+
@request.body = @request_body.to_json
|
143
|
+
@request['Content-Type'] = 'application/json'
|
144
|
+
elsif !@request_body and (name.to_s == "post")
|
145
|
+
@request['Content-Type'] = ''
|
146
|
+
else
|
147
|
+
@request.body = @request_body
|
145
148
|
end
|
146
|
-
make_request(http, request)
|
149
|
+
make_request(@http, @request)
|
147
150
|
end
|
148
151
|
|
149
152
|
# Make the API call and return the response. This is separated into
|
data/ruby_http_client.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'ruby_http_client'
|
7
|
-
spec.version = '3.0
|
7
|
+
spec.version = '3.1.0'
|
8
8
|
spec.authors = ['Elmer Thomas']
|
9
9
|
spec.email = 'dx@sendgrid.com'
|
10
10
|
spec.summary = 'A simple REST client'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'ruby_http_client'
|
2
2
|
require 'minitest/autorun'
|
3
3
|
|
4
4
|
class MockResponse
|
@@ -50,20 +50,20 @@ class TestClient < Minitest::Test
|
|
50
50
|
def test_build_request_headers
|
51
51
|
request = {}
|
52
52
|
request = @client.build_request_headers(request)
|
53
|
-
assert_equal(@client.request_headers
|
53
|
+
assert_equal(request, @client.request_headers)
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_add_version
|
57
57
|
url = ''
|
58
58
|
@client.add_version(url)
|
59
|
-
assert_equal(
|
59
|
+
assert_equal("/#{@version}", url)
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_build_query_params
|
63
63
|
url = ''
|
64
64
|
query_params = { 'limit' => 100, 'offset' => 0 }
|
65
65
|
url = @client.build_query_params(url, query_params)
|
66
|
-
assert_equal(
|
66
|
+
assert_equal('?limit=100&offset=0', url)
|
67
67
|
end
|
68
68
|
|
69
69
|
def test_build_url
|
@@ -71,28 +71,85 @@ class TestClient < Minitest::Test
|
|
71
71
|
params = { 'limit' => 100, 'offset' => 0 }
|
72
72
|
url = URI.parse(@host + '/' + @version +
|
73
73
|
'/my/path/to/the/endpoint?limit=100&offset=0')
|
74
|
-
assert_equal(url1.build_url(query_params: params)
|
74
|
+
assert_equal(url, url1.build_url(query_params: params))
|
75
75
|
|
76
76
|
url1 = url1.one_more
|
77
77
|
params = { 'limit' => 100, 'offset' => 0 }
|
78
78
|
url = URI.parse(@host + '/' + @version +
|
79
79
|
'/my/path/to/the/endpoint/one_more?limit=100&offset=0')
|
80
|
-
assert_equal(url1.build_url(query_params: params)
|
80
|
+
assert_equal(url, url1.build_url(query_params: params))
|
81
81
|
|
82
82
|
url2 = @client.my.path._('to').the.endpoint
|
83
83
|
params = { 'limit' => 100, 'offset' => 0 }
|
84
84
|
url = URI.parse(@host + '/' + @version +
|
85
85
|
'/my/path/to/the/endpoint?limit=100&offset=0')
|
86
|
-
assert_equal(url2.build_url(query_params: params)
|
86
|
+
assert_equal(url, url2.build_url(query_params: params))
|
87
87
|
end
|
88
88
|
|
89
89
|
def test_build_request
|
90
90
|
name = 'get'
|
91
91
|
args = nil
|
92
92
|
response = @client.build_request(name, args)
|
93
|
-
assert_equal(response.status_code
|
94
|
-
assert_equal(
|
95
|
-
assert_equal(
|
93
|
+
assert_equal(200, response.status_code)
|
94
|
+
assert_equal({'message' => 'success'}, response.body)
|
95
|
+
assert_equal({'headers' => 'test'}, response.headers)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_build_request_post_empty_content_type
|
99
|
+
headers = {
|
100
|
+
}
|
101
|
+
client = MockRequest.new(
|
102
|
+
host: 'https://localhost',
|
103
|
+
request_headers: headers,
|
104
|
+
version: 'v3'
|
105
|
+
)
|
106
|
+
args = [{'request_body' => {"hogekey" => "hogevalue"}}]
|
107
|
+
client.build_request('post', args)
|
108
|
+
assert_equal('application/json', client.request['Content-Type'])
|
109
|
+
assert_equal('{"hogekey":"hogevalue"}', client.request.body)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_build_request_get_application_json
|
113
|
+
headers = {
|
114
|
+
'Content-Type' => 'application/json'
|
115
|
+
}
|
116
|
+
client = MockRequest.new(
|
117
|
+
host: 'https://localhost',
|
118
|
+
request_headers: headers,
|
119
|
+
version: 'v3'
|
120
|
+
)
|
121
|
+
client.build_request('get', nil)
|
122
|
+
assert_equal('application/json', client.request['Content-Type'])
|
123
|
+
assert_equal(nil, client.request.body)
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_build_request_post_empty_body
|
127
|
+
headers = {
|
128
|
+
'Content-Type' => 'application/json'
|
129
|
+
}
|
130
|
+
client = MockRequest.new(
|
131
|
+
host: 'https://localhost',
|
132
|
+
request_headers: headers,
|
133
|
+
version: 'v3'
|
134
|
+
)
|
135
|
+
client.build_request('post', nil)
|
136
|
+
assert_equal('', client.request['Content-Type'])
|
137
|
+
assert_equal(nil, client.request.body)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_build_request_post_multipart
|
141
|
+
headers = {
|
142
|
+
'Content-Type' => 'multipart/form-data; boundary=xYzZY'
|
143
|
+
}
|
144
|
+
client = MockRequest.new(
|
145
|
+
host: 'https://localhost',
|
146
|
+
request_headers: headers,
|
147
|
+
)
|
148
|
+
name = 'post'
|
149
|
+
args = [{'request_body' => 'hogebody'}]
|
150
|
+
client.build_request(name, args)
|
151
|
+
assert_equal('multipart/form-data; boundary=xYzZY', client.request['Content-Type'])
|
152
|
+
assert_equal('hogebody', client.request.body)
|
96
153
|
end
|
97
154
|
|
98
155
|
def add_ssl
|
@@ -105,13 +162,13 @@ class TestClient < Minitest::Test
|
|
105
162
|
|
106
163
|
def test__
|
107
164
|
url1 = @client._('test')
|
108
|
-
assert_equal(
|
165
|
+
assert_equal(['test'], url1.url_path)
|
109
166
|
end
|
110
167
|
|
111
168
|
def test_method_missing
|
112
169
|
response = @client.get
|
113
|
-
assert_equal(response.status_code
|
114
|
-
assert_equal(
|
115
|
-
assert_equal(
|
170
|
+
assert_equal(200, response.status_code)
|
171
|
+
assert_equal({'message' => 'success'}, response.body)
|
172
|
+
assert_equal({'headers' => 'test'}, response.headers)
|
116
173
|
end
|
117
174
|
end
|