miasma 0.3.4 → 0.3.6
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/CHANGELOG.md +3 -0
- data/lib/miasma/types/api.rb +21 -7
- data/lib/miasma/version.rb +1 -1
- data/miasma.gemspec +2 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a471e7134e77e97f6033f06d6824da13f855cbc19c168b02c31ea5793357d7c1
|
4
|
+
data.tar.gz: 51870ee9bab612af01b632be5316e585a22d508e94c398eb22042c52a96dca9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 543ddacf9eaa53433430bde752406cefa6699ae850e9ee28ed82a23ba4ccd0c373e55f4de2bde3cfca359b54a10422aa2bbe529e7c7a04d063c45f2682a216bd
|
7
|
+
data.tar.gz: b4033baa376b004ad9caf250afe703866a18175962c282bead06eec01d1eddf53e4c207e6c93c9b9cbdf43c7c90f9740909c122919a155f194776c3f8a08db0b
|
data/CHANGELOG.md
CHANGED
data/lib/miasma/types/api.rb
CHANGED
@@ -11,9 +11,11 @@ module Miasma
|
|
11
11
|
# Maximum allowed HTTP request retries (for non-HTTP related errors)
|
12
12
|
MAX_REQUEST_RETRIES = 5
|
13
13
|
|
14
|
+
include Bogo::Logger::Helpers
|
14
15
|
include Miasma::Utils::Lazy
|
15
16
|
include Miasma::Utils::Memoization
|
16
17
|
|
18
|
+
logger_name(:api)
|
17
19
|
always_clean!
|
18
20
|
|
19
21
|
# Create new API connection
|
@@ -25,7 +27,8 @@ module Miasma
|
|
25
27
|
if creds.is_a?(Hash)
|
26
28
|
load_data(creds)
|
27
29
|
else
|
28
|
-
raise TypeError
|
30
|
+
raise TypeError, "Expecting `credentials` to be of type `Hash`. " \
|
31
|
+
"Received: `#{creds.class}`"
|
29
32
|
end
|
30
33
|
after_setup(creds)
|
31
34
|
connect
|
@@ -104,9 +107,7 @@ module Miasma
|
|
104
107
|
end
|
105
108
|
request_args = [].tap do |ary|
|
106
109
|
_endpoint = args.delete(:endpoint) || endpoint
|
107
|
-
ary.push(
|
108
|
-
File.join(_endpoint, args[:path].to_s)
|
109
|
-
)
|
110
|
+
ary.push(File.join(_endpoint, args[:path].to_s))
|
110
111
|
options = {}.tap do |opts|
|
111
112
|
[:form, :params, :json, :body].each do |key|
|
112
113
|
opts[key] = args[key] if args[key]
|
@@ -140,7 +141,8 @@ module Miasma
|
|
140
141
|
def retryable_request(http_method, &block)
|
141
142
|
Bogo::Retry.build(
|
142
143
|
data.fetch(:retry_type, :exponential),
|
143
|
-
:max_attempts => retryable_allowed?(http_method) ?
|
144
|
+
:max_attempts => retryable_allowed?(http_method) ?
|
145
|
+
data.fetch(:retry_max, MAX_REQUEST_RETRIES) : 0,
|
144
146
|
:wait_interval => data[:retry_interval],
|
145
147
|
:ui => data[:retry_ui],
|
146
148
|
:auto_run => false,
|
@@ -174,6 +176,7 @@ module Miasma
|
|
174
176
|
# override if things need to be done prior to
|
175
177
|
# the actual request (like signature generation)
|
176
178
|
def make_request(connection, http_method, request_args)
|
179
|
+
logger.debug("making #{http_method.to_s.upcase} request - #{request_args.inspect}")
|
177
180
|
connection.send(http_method, *request_args)
|
178
181
|
end
|
179
182
|
|
@@ -185,16 +188,20 @@ module Miasma
|
|
185
188
|
def format_response(result, extract_body = true)
|
186
189
|
extracted_headers = Smash[result.headers.map { |k, v| [Utils.snake(k), v] }]
|
187
190
|
if extract_body
|
191
|
+
logger.debug("extracting HTTP response body")
|
188
192
|
body_content = result.body.to_s
|
189
193
|
body_content.encode!("UTF-8", "binary",
|
190
194
|
:invalid => :replace,
|
191
195
|
:undef => :replace,
|
192
196
|
:replace => "")
|
193
197
|
if extracted_headers[:content_type].to_s.include?("json")
|
198
|
+
logger.debug("unpacking HTTP response body using JSON")
|
194
199
|
extracted_body = from_json(body_content) || body_content
|
195
200
|
elsif extracted_headers[:content_type].to_s.include?("xml")
|
201
|
+
logger.debug("unpacking HTTP response body using XML")
|
196
202
|
extracted_body = from_xml(body_content) || body_content
|
197
203
|
else
|
204
|
+
logger.debug("unpacking HTTP response body using best effort")
|
198
205
|
extracted_body = from_json(body_content) ||
|
199
206
|
from_xml(body_content) ||
|
200
207
|
body_content
|
@@ -203,6 +210,7 @@ module Miasma
|
|
203
210
|
unless extracted_body
|
204
211
|
# @note if body is over 100KB, do not extract
|
205
212
|
if extracted_headers[:content_length].to_i < 102400
|
213
|
+
logger.warn("skipping body extraction and formatting due to size")
|
206
214
|
extracted_body = result.body.to_s
|
207
215
|
else
|
208
216
|
extracted_body = result.body
|
@@ -222,7 +230,10 @@ module Miasma
|
|
222
230
|
def from_json(string)
|
223
231
|
begin
|
224
232
|
MultiJson.load(string).to_smash
|
225
|
-
rescue MultiJson::ParseError
|
233
|
+
rescue MultiJson::ParseError => err
|
234
|
+
logger.error("failed to load JSON string - #{err.class}: #{err}")
|
235
|
+
logger.debug("JSON string load failure: #{string.inspect}")
|
236
|
+
logger.debug("JSON error - #{err.class}: #{err}\n#{err.backtrace.join("\n")}")
|
226
237
|
nil
|
227
238
|
end
|
228
239
|
end
|
@@ -234,7 +245,10 @@ module Miasma
|
|
234
245
|
def from_xml(string)
|
235
246
|
begin
|
236
247
|
MultiXml.parse(string).to_smash
|
237
|
-
rescue MultiXml::ParseError
|
248
|
+
rescue MultiXml::ParseError => err
|
249
|
+
logger.error("failed to load XML string - #{err.class}: #{err}")
|
250
|
+
logger.debug("XML string load failure: #{string.inspect}")
|
251
|
+
logger.debug("XML error - #{err.class}: #{err}\n#{err.backtrace.join("\n")}")
|
238
252
|
nil
|
239
253
|
end
|
240
254
|
end
|
data/lib/miasma/version.rb
CHANGED
data/miasma.gemspec
CHANGED
@@ -10,11 +10,11 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = "Smoggy API"
|
11
11
|
s.license = "Apache 2.0"
|
12
12
|
s.require_path = "lib"
|
13
|
-
s.add_runtime_dependency "http", ">= 0.8.12", "<
|
13
|
+
s.add_runtime_dependency "http", ">= 0.8.12", "< 4.0"
|
14
14
|
s.add_runtime_dependency "multi_json"
|
15
15
|
s.add_runtime_dependency "multi_xml"
|
16
16
|
s.add_runtime_dependency "xml-simple"
|
17
|
-
s.add_runtime_dependency "bogo", ">= 0.2.
|
17
|
+
s.add_runtime_dependency "bogo", ">= 0.2.12", "< 1.0"
|
18
18
|
s.add_development_dependency "pry"
|
19
19
|
s.add_development_dependency "minitest"
|
20
20
|
s.add_development_dependency "rspec", "~> 3.5"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miasma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 0.8.12
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '4.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 0.8.12
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '4.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: multi_json
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,7 +78,7 @@ dependencies:
|
|
78
78
|
requirements:
|
79
79
|
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0.2.
|
81
|
+
version: 0.2.12
|
82
82
|
- - "<"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '1.0'
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: 0.2.
|
91
|
+
version: 0.2.12
|
92
92
|
- - "<"
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '1.0'
|