bubbles-rest-client 0.3.1 → 0.7.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/.github/FUNDING.yml +1 -0
- data/.gitignore +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +77 -0
- data/CONTRIBUTING.md +31 -0
- data/README.md +7 -111
- data/Rakefile +2 -7
- data/bubbles.gemspec +4 -3
- data/lib/bubbles/config.rb +147 -105
- data/lib/bubbles/endpoint.rb +17 -7
- data/lib/bubbles/rest_client_resources.rb +246 -153
- data/lib/bubbles/rest_environment.rb +45 -3
- data/lib/bubbles/version.rb +1 -1
- data/lib/bubbles.rb +3 -6
- data/lib/tasks/coverage.rake +22 -0
- data/lib/tasks/spec.rake +5 -0
- metadata +29 -10
- data/Gemfile.lock +0 -85
@@ -3,28 +3,27 @@ require 'bubbles/rest_environment'
|
|
3
3
|
|
4
4
|
module Bubbles
|
5
5
|
class RestClientResources
|
6
|
-
def environment
|
7
|
-
Bubbles.configuration.environment
|
6
|
+
def environment(env_name = nil)
|
7
|
+
Bubbles.configuration.environment(env_name)
|
8
8
|
end
|
9
9
|
|
10
10
|
##
|
11
11
|
# Create a new instance of +RestClientResources+.
|
12
12
|
#
|
13
13
|
# @param env The +RestEnvironment+ that should be used for this set of resources.
|
14
|
-
# @param api_key The API key to use to send to the host for unauthenticated requests.
|
14
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
15
|
+
# to +nil+.
|
16
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
17
|
+
# +"X-API-Key"+.
|
15
18
|
#
|
16
|
-
def initialize(env, api_key)
|
17
|
-
unless env
|
18
|
-
env = :local
|
19
|
-
end
|
20
|
-
|
19
|
+
def initialize(env, api_key = nil, api_key_name='X-API-Key')
|
21
20
|
unless api_key
|
22
21
|
api_key = ''
|
23
22
|
end
|
24
23
|
|
25
|
-
@environment = get_environment env
|
26
24
|
@api_key = api_key
|
27
25
|
@auth_token = nil
|
26
|
+
@api_key_name = api_key_name
|
28
27
|
end
|
29
28
|
|
30
29
|
##
|
@@ -32,17 +31,16 @@ module Bubbles
|
|
32
31
|
#
|
33
32
|
# @param [RestEnvironment] env The +RestEnvironment+ to use to execute the request
|
34
33
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
34
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
35
|
+
# call. Defaults to an empty +Hash+.
|
35
36
|
#
|
36
37
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the GET call.
|
37
38
|
#
|
38
|
-
def self.execute_get_unauthenticated(env, endpoint)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
else
|
44
|
-
next RestClient.get(url.to_s, headers)
|
45
|
-
end
|
39
|
+
def self.execute_get_unauthenticated(env, endpoint, uri_params, additional_headers = {}, api_key = nil, api_key_name='X-API-Key')
|
40
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
41
|
+
|
42
|
+
execute_rest_call(env, endpoint, nil, nil, composite_headers, uri_params) do |env, url, data, headers|
|
43
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).get(headers)
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
@@ -53,19 +51,30 @@ module Bubbles
|
|
53
51
|
#
|
54
52
|
# @param [RestEnvironment] env The +RestEnvironment+ to use to execute the request
|
55
53
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
56
|
-
# @param [
|
54
|
+
# @param [Symbol] auth_type The authorization type to use (Bearer, or Basic)
|
55
|
+
# @param [String] auth_value The authorization token OR encoded value (login/password )to use for authentication.
|
57
56
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
57
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
58
|
+
# call. Defaults to an empty +Hash+.
|
59
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
60
|
+
# to +nil+.
|
61
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
62
|
+
# +"X-API-Key"+.
|
58
63
|
#
|
59
64
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the GET call.
|
60
65
|
#
|
61
|
-
def self.execute_get_authenticated(env, endpoint,
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
def self.execute_get_authenticated(env, endpoint, auth_type, auth_value, uri_params, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
67
|
+
if auth_type == :basic
|
68
|
+
composite_headers = RestClientResources.build_composite_headers(endpoint.additional_headers, {
|
69
|
+
Authorization: 'Basic ' + Base64.strict_encode64(auth_value)
|
70
|
+
})
|
71
|
+
auth_value = nil
|
72
|
+
else
|
73
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
74
|
+
end
|
75
|
+
|
76
|
+
execute_rest_call(env, endpoint, nil, auth_value, composite_headers, uri_params) do |env, url, data, headers|
|
77
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).get(headers)
|
69
78
|
end
|
70
79
|
end
|
71
80
|
|
@@ -76,17 +85,21 @@ module Bubbles
|
|
76
85
|
#
|
77
86
|
# @param [RestEnvironment] env The +RestEnvironment+ to use to execute the request
|
78
87
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
88
|
+
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
89
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
90
|
+
# call. Defaults to an empty +Hash+.
|
91
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
92
|
+
# to +nil+.
|
93
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
94
|
+
# +"X-API-Key"+.
|
79
95
|
#
|
80
96
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the GET call.
|
81
97
|
#
|
82
|
-
def self.execute_head_unauthenticated(env, endpoint, uri_params, additional_headers)
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
else
|
88
|
-
next RestClient.head(url.to_s, headers)
|
89
|
-
end
|
98
|
+
def self.execute_head_unauthenticated(env, endpoint, uri_params, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
99
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
100
|
+
|
101
|
+
execute_rest_call(env, endpoint, nil, nil, composite_headers, uri_params) do |env, url, data, headers|
|
102
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).head(headers)
|
90
103
|
end
|
91
104
|
end
|
92
105
|
|
@@ -100,49 +113,20 @@ module Bubbles
|
|
100
113
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
101
114
|
# @param [String] auth_token The authorization token to use for authentication.
|
102
115
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
116
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
117
|
+
# call. Defaults to an empty +Hash+.
|
118
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
119
|
+
# to +nil+.
|
120
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
121
|
+
# +"X-API-Key"+.
|
103
122
|
#
|
104
123
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the HEAD call.
|
105
124
|
#
|
106
|
-
def self.execute_head_authenticated(env, endpoint, auth_token, uri_params)
|
107
|
-
|
108
|
-
if env.scheme == 'https'
|
109
|
-
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE)
|
110
|
-
.head(headers)
|
111
|
-
else
|
112
|
-
next RestClient.head(url.to_s, headers)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
##
|
118
|
-
# Execute a HEAD request without authentication but with some parameters encoded in the URI string.
|
119
|
-
#
|
120
|
-
# @param [RestEnvironment] env The +RestEnvironment+ to use to execute the request
|
121
|
-
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
122
|
-
# @param [String] api_key The API key to use to validate the client.
|
123
|
-
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
124
|
-
# @param [Hash] headers An optional +Hash+ of additional headers to pass with the request.
|
125
|
-
#
|
126
|
-
# @return [RestClient::Response] The +Response+ resulting from the execution of the HEAD call.
|
127
|
-
#
|
128
|
-
def self.execute_head_unauthenticated_with_uri_params(env, endpoint, api_key, uri_params, headers=nil)
|
129
|
-
additional_headers = {
|
130
|
-
'X-Api-Key' => api_key
|
131
|
-
}
|
125
|
+
def self.execute_head_authenticated(env, endpoint, auth_token, uri_params, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
126
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
132
127
|
|
133
|
-
|
134
|
-
|
135
|
-
additional_headers[nextHeader[0]] = nextHeader[1]
|
136
|
-
}
|
137
|
-
end
|
138
|
-
|
139
|
-
execute_rest_call(env, endpoint, nil, nil, additional_headers, uri_params) do |env, url, data, headers|
|
140
|
-
if env.scheme == 'https'
|
141
|
-
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE)
|
142
|
-
.head(headers)
|
143
|
-
else
|
144
|
-
next RestClient.head(url.to_s, headers)
|
145
|
-
end
|
128
|
+
execute_rest_call(env, endpoint, nil, auth_token, composite_headers, uri_params) do |env, url, data, headers|
|
129
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).head(headers)
|
146
130
|
end
|
147
131
|
end
|
148
132
|
|
@@ -153,29 +137,20 @@ module Bubbles
|
|
153
137
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
154
138
|
# @param [String] api_key The API key to use to process the request. Will be placed in an 'X-API-KEY' header.
|
155
139
|
# @param [Hash] data A +Hash+ of key-value pairs that will be sent in the body of the http request.
|
156
|
-
# @param [Hash]
|
157
|
-
#
|
140
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
141
|
+
# call. Defaults to an empty +Hash+.
|
142
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
143
|
+
# to +nil+.
|
144
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
145
|
+
# +"X-API-Key"+.
|
158
146
|
#
|
159
147
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the POST call.
|
160
148
|
#
|
161
|
-
def self.
|
162
|
-
|
163
|
-
'X-Api-Key' => api_key
|
164
|
-
}
|
149
|
+
def self.execute_post_unauthenticated(env, endpoint, data, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
150
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
165
151
|
|
166
|
-
|
167
|
-
|
168
|
-
additional_headers[nextHeader[0]] = nextHeader[1]
|
169
|
-
}
|
170
|
-
end
|
171
|
-
|
172
|
-
execute_rest_call(env, endpoint, data, nil, additional_headers) do |env, url, data, headers|
|
173
|
-
if env.scheme == 'https'
|
174
|
-
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE)
|
175
|
-
.post(data.to_json, additional_headers)
|
176
|
-
else
|
177
|
-
next RestClient.post url.to_s, data.to_json, additional_headers
|
178
|
-
end
|
152
|
+
execute_rest_call(env, endpoint, data, nil, composite_headers) do |env, url, data, headers|
|
153
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).post(data.to_json, headers)
|
179
154
|
end
|
180
155
|
end
|
181
156
|
|
@@ -187,18 +162,27 @@ module Bubbles
|
|
187
162
|
# @param [String] auth_token The authorization token retrieved during some former authentication call. Will be
|
188
163
|
# placed into a Authorization header.
|
189
164
|
# @param [Hash] data A +Hash+ of key-value pairs that will be sent in the body of the http request.
|
165
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
166
|
+
# call. Defaults to an empty +Hash+.
|
167
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
168
|
+
# to +nil+.
|
169
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
170
|
+
# +"X-API-Key"+.
|
190
171
|
#
|
191
172
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the POST call.
|
192
173
|
#
|
193
|
-
def self.execute_post_authenticated(env, endpoint,
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
174
|
+
def self.execute_post_authenticated(env, endpoint, auth_type, auth_value, data, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
175
|
+
if auth_type == :basic
|
176
|
+
composite_headers = RestClientResources.build_composite_headers(endpoint.additional_headers, {
|
177
|
+
Authorization: 'Basic ' + Base64.strict_encode64(auth_value)
|
178
|
+
})
|
179
|
+
auth_value = nil
|
180
|
+
else
|
181
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
182
|
+
end
|
198
183
|
|
199
|
-
|
200
|
-
|
201
|
-
end
|
184
|
+
execute_rest_call(env, endpoint, data, auth_value, composite_headers) do |env, url, data, headers|
|
185
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).post(data.to_json, headers)
|
202
186
|
end
|
203
187
|
end
|
204
188
|
|
@@ -211,18 +195,20 @@ module Bubbles
|
|
211
195
|
# placed into a Authorization header.
|
212
196
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
213
197
|
# @param [Hash] data A +Hash+ of key-value pairs that will be sent in the body of the http request.
|
198
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
199
|
+
# call. Defaults to an empty +Hash+.
|
200
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
201
|
+
# to +nil+.
|
202
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
203
|
+
# +"X-API-Key"+.
|
214
204
|
#
|
215
205
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the PATCH call.
|
216
206
|
#
|
217
|
-
def self.execute_patch_authenticated(env, endpoint, auth_token, uri_params, data)
|
218
|
-
|
219
|
-
if env.scheme == 'https'
|
220
|
-
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE)
|
221
|
-
.patch(data.to_json, headers)
|
207
|
+
def self.execute_patch_authenticated(env, endpoint, auth_token, uri_params, data, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
208
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
222
209
|
|
223
|
-
|
224
|
-
|
225
|
-
end
|
210
|
+
return execute_rest_call(env, endpoint, data, auth_token, composite_headers, uri_params) do |env, url, data, headers|
|
211
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).patch(data.to_json, headers)
|
226
212
|
end
|
227
213
|
end
|
228
214
|
|
@@ -233,17 +219,20 @@ module Bubbles
|
|
233
219
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
234
220
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
235
221
|
# @param [Hash] data A +Hash+ of key-value pairs that will be sent in the body of the http request.
|
222
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
223
|
+
# call. Defaults to an empty +Hash+.
|
224
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
225
|
+
# to +nil+.
|
226
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
227
|
+
# +"X-API-Key"+.
|
236
228
|
#
|
237
229
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the PATCH call.
|
238
230
|
#
|
239
|
-
def self.execute_patch_unauthenticated(env, endpoint, uri_params, data)
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
else
|
245
|
-
next RestClient.patch(url.to_s, data.to_json, headers)
|
246
|
-
end
|
231
|
+
def self.execute_patch_unauthenticated(env, endpoint, uri_params, data, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
232
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
233
|
+
|
234
|
+
return execute_rest_call(env, endpoint, data, nil, composite_headers, uri_params) do |env, url, data, headers|
|
235
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).patch(data.to_json, headers)
|
247
236
|
end
|
248
237
|
end
|
249
238
|
|
@@ -256,18 +245,20 @@ module Bubbles
|
|
256
245
|
# placed into a Authorization header.
|
257
246
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
258
247
|
# @param [Hash] data A +Hash+ of key-value pairs that will be sent in the body of the http request.
|
248
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
249
|
+
# call. Defaults to an empty +Hash+.
|
250
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
251
|
+
# to +nil+.
|
252
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
253
|
+
# +"X-API-Key"+.
|
259
254
|
#
|
260
255
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the PUT call.
|
261
256
|
#
|
262
|
-
def self.execute_put_authenticated(env, endpoint, auth_token, uri_params, data)
|
263
|
-
|
264
|
-
if env.scheme == 'https'
|
265
|
-
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE)
|
266
|
-
.put(data.to_json, headers)
|
257
|
+
def self.execute_put_authenticated(env, endpoint, auth_token, uri_params, data, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
258
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
267
259
|
|
268
|
-
|
269
|
-
|
270
|
-
end
|
260
|
+
return execute_rest_call(env, endpoint, data, auth_token, composite_headers, uri_params) do |env, url, data, headers|
|
261
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).put(data.to_json, headers)
|
271
262
|
end
|
272
263
|
end
|
273
264
|
|
@@ -278,17 +269,20 @@ module Bubbles
|
|
278
269
|
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
279
270
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
280
271
|
# @param [Hash] data A +Hash+ of key-value pairs that will be sent in the body of the http request.
|
272
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
273
|
+
# call. Defaults to an empty +Hash+.
|
274
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
275
|
+
# to +nil+.
|
276
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
277
|
+
# +"X-API-Key"+.
|
281
278
|
#
|
282
279
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the PUT call.
|
283
280
|
#
|
284
|
-
def self.execute_put_unauthenticated(env, endpoint, uri_params, data)
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
else
|
290
|
-
next RestClient.put(url.to_s, data.to_json, headers)
|
291
|
-
end
|
281
|
+
def self.execute_put_unauthenticated(env, endpoint, uri_params, data, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
282
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
283
|
+
|
284
|
+
return execute_rest_call(env, endpoint, data, nil, composite_headers, uri_params) do |env, url, data, headers|
|
285
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).put(data.to_json, headers)
|
292
286
|
end
|
293
287
|
end
|
294
288
|
|
@@ -300,17 +294,43 @@ module Bubbles
|
|
300
294
|
# @param [String] auth_token The authorization token retrieved during some former authentication call. Will be
|
301
295
|
# placed into a Authorization header.
|
302
296
|
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
297
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
298
|
+
# call. Defaults to an empty +Hash+.
|
299
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
300
|
+
# to +nil+.
|
301
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
302
|
+
# +"X-API-Key"+.
|
303
303
|
#
|
304
304
|
# @return [RestClient::Response] The +Response+ resulting from the execution of the DELETE call.
|
305
305
|
#
|
306
|
-
def self.execute_delete_authenticated(env, endpoint, auth_token, uri_params)
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
306
|
+
def self.execute_delete_authenticated(env, endpoint, auth_token, uri_params, additional_headers = {}, api_key = nil, api_key_name = 'X-API-Key')
|
307
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
308
|
+
|
309
|
+
execute_rest_call(env, endpoint, nil, auth_token, composite_headers, uri_params) do |env, url, data, headers|
|
310
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).delete(headers)
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
##
|
315
|
+
# Execute a DELETE request without authentication.
|
316
|
+
#
|
317
|
+
# @param [RestEnvironment] env The +RestEnvironment+ to use to execute the request
|
318
|
+
# @param [Endpoint] endpoint The +Endpoint+ which should be requested
|
319
|
+
# @param [Hash] uri_params A +Hash+ of identifiers to values to replace in the URI string.
|
320
|
+
# @param [Hash] additional_headers A +Hash+ of key-value pairs that will be sent as additional headers in the API
|
321
|
+
# call. Defaults to an empty +Hash+.
|
322
|
+
# @param [String] api_key (Optional) The API key to use to send to the host for unauthenticated requests. Defaults
|
323
|
+
# to +nil+.
|
324
|
+
# @param [String] api_key_name (Optional) The name of the header in which to send the API key. Defaults to
|
325
|
+
# +"X-API-Key"+.
|
326
|
+
#
|
327
|
+
# @return [RestClient::Response] The +Response+ resulting from the execution of the DELETE call.
|
328
|
+
#
|
329
|
+
def self.execute_delete_unauthenticated(env, endpoint, uri_params, additional_headers = {}, api_key = nil, api_key_name = 'X-Api-Key')
|
330
|
+
composite_headers = self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers)
|
331
|
+
|
332
|
+
execute_rest_call(env, endpoint, nil, nil, composite_headers, uri_params) do |env, url, data, headers|
|
333
|
+
next RestClient::Resource.new(url.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE).delete(headers)
|
314
334
|
end
|
315
335
|
end
|
316
336
|
|
@@ -333,8 +353,81 @@ module Bubbles
|
|
333
353
|
# self.local_environment
|
334
354
|
# end
|
335
355
|
|
356
|
+
##
|
357
|
+
# Build a set of headers from two existing sets.
|
358
|
+
#
|
359
|
+
# This takes two sets of headers, as +Hash+es and merges them to create a single +Hash+ with all of the members of
|
360
|
+
# the previous two.
|
361
|
+
#
|
362
|
+
# @param [Hash] headers A set of existing headers.
|
363
|
+
# @param [Hash] additional_headers Another set of headers
|
364
|
+
#
|
365
|
+
# @return A +Hash+ containing all of the members of the input parameters. Key conflicts will be resolved to the
|
366
|
+
# benefit of +additional_headers+, meaning that whatever is in the value of the key within the
|
367
|
+
# +additional_headers+ +Hash+ will be used.
|
368
|
+
#
|
369
|
+
def self.build_composite_headers(headers, additional_headers)
|
370
|
+
composite_headers = headers
|
371
|
+
|
372
|
+
unless additional_headers.empty?
|
373
|
+
additional_headers.each { |nextHeader|
|
374
|
+
composite_headers[nextHeader[0]] = nextHeader[1]
|
375
|
+
}
|
376
|
+
end
|
377
|
+
|
378
|
+
composite_headers
|
379
|
+
end
|
380
|
+
|
381
|
+
##
|
382
|
+
# Retrieve an encoded authorization (username and password) for a given
|
383
|
+
# +Endpoint+ and data set.
|
384
|
+
#
|
385
|
+
# @param endpoint The +Endpoint+ that this authorization will be used for.
|
386
|
+
# @param data A set of elements (typically username and password) that
|
387
|
+
# should be encoded.
|
388
|
+
#
|
389
|
+
# @return A +String+ containing an encoding of the values passed in as
|
390
|
+
# +data+, concatenated with a colon.
|
391
|
+
#
|
392
|
+
def self.get_encoded_authorization(endpoint, data)
|
393
|
+
count = 0
|
394
|
+
auth_value = ''
|
395
|
+
endpoint.encode_authorization.each { |auth_key|
|
396
|
+
if data[auth_key]
|
397
|
+
if count > 0
|
398
|
+
auth_value = auth_value + ':' + data[auth_key]
|
399
|
+
else
|
400
|
+
auth_value = data[auth_key]
|
401
|
+
end
|
402
|
+
|
403
|
+
count = count + 1
|
404
|
+
|
405
|
+
data.delete(auth_key)
|
406
|
+
end
|
407
|
+
}
|
408
|
+
|
409
|
+
auth_value
|
410
|
+
end
|
411
|
+
|
336
412
|
private
|
337
413
|
|
414
|
+
def self.get_headers_with_api_key(endpoint, api_key, api_key_name, additional_headers = {})
|
415
|
+
if api_key and endpoint.api_key_required?
|
416
|
+
composite_headers = RestClientResources.build_composite_headers(additional_headers, {
|
417
|
+
api_key_name.to_s => api_key,
|
418
|
+
:content_type => :json,
|
419
|
+
:accept => :json
|
420
|
+
})
|
421
|
+
else
|
422
|
+
composite_headers = RestClientResources.build_composite_headers(additional_headers, {
|
423
|
+
:content_type => :json,
|
424
|
+
:accept => :json
|
425
|
+
})
|
426
|
+
end
|
427
|
+
|
428
|
+
composite_headers
|
429
|
+
end
|
430
|
+
|
338
431
|
##
|
339
432
|
# Execute a REST call to the API.
|
340
433
|
#
|
@@ -354,8 +447,12 @@ module Bubbles
|
|
354
447
|
# will return an +OpenStruct+; otherwise, the +Response+ will be returned.
|
355
448
|
#
|
356
449
|
def self.execute_rest_call(env, endpoint, data, auth_token, headers, uri_params = {}, &block)
|
450
|
+
unless headers
|
451
|
+
raise ArgumentError.new('Expected headers to be non-nil')
|
452
|
+
end
|
453
|
+
|
357
454
|
unless block
|
358
|
-
raise ArgumentError('This method requires that a block is given
|
455
|
+
raise ArgumentError.new('This method requires that a block is given')
|
359
456
|
end
|
360
457
|
|
361
458
|
url = endpoint.get_expanded_url env, uri_params
|
@@ -365,23 +462,19 @@ module Bubbles
|
|
365
462
|
data = {}
|
366
463
|
end
|
367
464
|
|
368
|
-
if headers == nil
|
369
|
-
headers = {
|
370
|
-
:content_type => :json
|
371
|
-
}
|
372
|
-
else
|
373
|
-
headers[:content_type] = :json
|
374
|
-
end
|
375
|
-
|
376
465
|
unless auth_token == nil
|
377
466
|
headers[:authorization] = 'Bearer ' + auth_token
|
378
467
|
end
|
379
468
|
|
380
|
-
headers[:accept] = :json
|
381
|
-
|
382
469
|
response = block.call(env, url, data, headers)
|
383
|
-
|
470
|
+
|
471
|
+
rescue *[SocketError, Errno::ECONNREFUSED]
|
384
472
|
response = { :error => 'Unable to connect to host ' + env.host.to_s + ':' + env.port.to_s }.to_json
|
473
|
+
if endpoint.return_type == :body_as_object
|
474
|
+
response = JSON.parse(response, object_class: OpenStruct)
|
475
|
+
end
|
476
|
+
|
477
|
+
return response
|
385
478
|
end
|
386
479
|
|
387
480
|
if endpoint.return_type == :body_as_object and endpoint.method != :head
|
@@ -393,4 +486,4 @@ module Bubbles
|
|
393
486
|
response
|
394
487
|
end
|
395
488
|
end
|
396
|
-
end
|
489
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Bubbles
|
2
2
|
class RestEnvironment
|
3
|
-
attr_accessor :
|
3
|
+
attr_accessor :host, :port, :api_key, :api_key_name
|
4
4
|
|
5
5
|
##
|
6
6
|
# Construct a new instance of +RestEnvironment+.
|
@@ -9,17 +9,59 @@ module Bubbles
|
|
9
9
|
# @param [String] host The host to communicate with.
|
10
10
|
# @param [Integer] port The port on which the communication channel should operate.
|
11
11
|
# @param [String] api_key (Optional) The API key to use to identify your client with the API. Defaults to +nil+.
|
12
|
+
# @param [String] api_key_name (Optional) The name of the header that will specify the API key. Defaults to +"X-API-Key"+.
|
12
13
|
#
|
13
|
-
def initialize(scheme='https', host='api.foamfactory.com', port=443, api_key=nil)
|
14
|
+
def initialize(scheme='https', host='api.foamfactory.com', port=443, api_key=nil, api_key_name='X-API-Key')
|
14
15
|
@scheme = scheme
|
15
16
|
@port = port
|
16
17
|
|
17
|
-
if @scheme == 'http' && @port ==
|
18
|
+
if @scheme == 'http' && @port == nil
|
18
19
|
@port = 80
|
20
|
+
elsif @scheme == 'https' && @port == nil
|
21
|
+
@port = 443
|
19
22
|
end
|
20
23
|
|
21
24
|
@host = host
|
22
25
|
@api_key = api_key
|
26
|
+
@api_key_name = api_key_name
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Retrieve the name of the API key to be used.
|
31
|
+
#
|
32
|
+
# This will be the "key" portion of the key-value of the API key header.
|
33
|
+
#
|
34
|
+
# @return [String] The API key name, if set; "X-API-Key", otherwise.
|
35
|
+
#
|
36
|
+
def api_key_name
|
37
|
+
@api_key_name
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Retrieve an API key from this +RestEnvironment+, but only if a specific +Endpoint+ requires it.
|
42
|
+
#
|
43
|
+
# If an +Endpoint+ has +api_key_required+ set to +true+, this method will return the API for the current
|
44
|
+
# +RestEnvironment+. If not, then it will return +nil+, rather than just blindly returning the API key for every
|
45
|
+
# possible retrieval, even if the +Endpoint+ doesn't require it.
|
46
|
+
#
|
47
|
+
# @return [String] The API key for this +RestEnvironment+, if the specified +Endpoint+ requires it; +nil+,
|
48
|
+
# otherwise.
|
49
|
+
#
|
50
|
+
def get_api_key_if_needed(endpoint)
|
51
|
+
if endpoint.api_key_required?
|
52
|
+
@api_key
|
53
|
+
else
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Retrieve the scheme of the current +RestEnvironment+, as a +Symbol+.
|
60
|
+
#
|
61
|
+
# @return [Symbol] The scheme of the current +RestEnvironment+, as a +Symbol+.
|
62
|
+
#
|
63
|
+
def scheme
|
64
|
+
@scheme.to_s
|
23
65
|
end
|
24
66
|
end
|
25
67
|
end
|
data/lib/bubbles/version.rb
CHANGED
data/lib/bubbles.rb
CHANGED
@@ -10,11 +10,9 @@ require 'json'
|
|
10
10
|
|
11
11
|
module Bubbles
|
12
12
|
class Resources < RestClientResources
|
13
|
-
def initialize
|
14
|
-
|
15
|
-
|
16
|
-
# @api_key = api_key
|
17
|
-
# @auth_token = nil
|
13
|
+
def initialize(api_key='')
|
14
|
+
super
|
15
|
+
|
18
16
|
@packageName = Bubbles::VersionInformation.package_name
|
19
17
|
@versionName = Bubbles::VersionInformation.version_name
|
20
18
|
@versionCode = Bubbles::VersionInformation.version_code
|
@@ -29,4 +27,3 @@ module Bubbles
|
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
32
|
-
|