spaceborne 0.1.28 → 0.1.33

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 955e28674b34b44d8264465bd6aea0473a32d24bd41ac0b7420c742d74f24105
4
- data.tar.gz: 0a3a31bad0eb61d9d61d0acd85e717397a75ad8e586bb36de063c67201be2a0e
3
+ metadata.gz: f58273cad226d88a4d39c7065f1c1628990f779024ca7e4c4a5456b8381c033d
4
+ data.tar.gz: 19eae317b4a2cd4a69a14b5e2afe8f721c08728ead59ff6a6cba732c4722afbd
5
5
  SHA512:
6
- metadata.gz: 2df85cbba09e2f1906770f968b881eaed916524faa4a9e6287a4602c753e03112880c0ca7e359680a62582a26df7f836bfdcd2f0a1414de9899038c0ec60e10c
7
- data.tar.gz: 65e15247604df879cb821121c46ccc17f891a1204ae1895cf844a84d940151d68d0dc0a0bde9e6c26f1ee56bb462c75a90c4aa5f4d23aac9523c8d8c77102106
6
+ metadata.gz: 41c07d21fdd9bad257bff28db8c911e3339846e1691cf72ebeedb26d0ab1afd3253a731d7d847af00f9b32a15b7cf4f8e6bda9eab5271c8a32388858e9858333
7
+ data.tar.gz: e60a31d5d9ad75915c4ef6d31615b96e8ca45c22b40dd0eb3ad77c7f91fcf4163a6f95c1ce4abff8c98b35b717d978c6d968223a7200368849b84cef28a2e2a8
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  .byebug_history
11
+ .idea/
data/README.md CHANGED
@@ -205,8 +205,9 @@ Validation for headers follows the same pattern as above, although nesting of mu
205
205
  * `expect_header_types same arguments/handling as expect_json_types`
206
206
  5. It is possible to use non-json data in a request
207
207
  6. Expectations on a response with an array of hashes with keys that are unknown, but that have a defined structure are supported (using the '*' in a path)
208
+ 7. Responses that have header with Content-Encoding of gzip are gunzip'd in json_body
208
209
 
209
- The following example shows how this works
210
+ The following example shows how extension # 6 works
210
211
 
211
212
  ```ruby
212
213
  { "array_of_hashes": [
data/lib/spaceborne.rb CHANGED
@@ -34,12 +34,11 @@ module Spaceborne
34
34
  def response_body
35
35
  return '' if response.request.method.casecmp('head').zero?
36
36
 
37
- str = if json?(response.headers)
38
- " JSON_BODY\n#{JSON.pretty_generate(json_body)}\n"
39
- else
40
- " BODY\n#{response.body}\n"
41
- end
42
- str
37
+ if json?(response.headers)
38
+ " JSON_BODY\n#{JSON.pretty_generate(json_body)}\n"
39
+ else
40
+ " BODY\n#{response.body}\n"
41
+ end
43
42
  end
44
43
 
45
44
  def request_info(str = "\n")
@@ -59,8 +58,16 @@ end
59
58
 
60
59
  # monkeypatch Airborne
61
60
  module Airborne
61
+ def decode_body
62
+ if response.headers[:content_encoding]&.include?('gzip')
63
+ Zlib::Inflate.new(32 + Zlib::MAX_WBITS).inflate(response.body)
64
+ else
65
+ response.body
66
+ end
67
+ end
68
+
62
69
  def json_body
63
- @json_body ||= JSON.parse(response.body, symbolize_names: true)
70
+ @json_body ||= JSON.parse(decode_body, symbolize_names: true)
64
71
  rescue StandardError
65
72
  raise InvalidJsonError, 'Api request returned invalid json'
66
73
  end
@@ -133,8 +140,8 @@ module Airborne
133
140
  rescue RestClient::ServerBrokeConnection => e
134
141
  raise e
135
142
  rescue RestClient::Exception => e
136
- if [301, 302].include?(e.response.code)
137
- e.response.follow_redirection
143
+ if [301, 302].include?(e.response&.code)
144
+ e.response.&follow_redirection
138
145
  else
139
146
  e.response
140
147
  end
@@ -160,16 +167,16 @@ module Airborne
160
167
  end
161
168
  end
162
169
 
163
- def exception_path_adder(args)
170
+ def exception_path_adder(args, body)
164
171
  yield
165
- rescue Airborne::ExpectationError => e
166
- e.message << "\nexpect arguments: #{args}"
172
+ rescue RSpec::Expectations::ExpectationNotMetError, Airborne::ExpectationError => e
173
+ e.message << "\nexpect arguments: #{args}\ndata element: #{body}"
167
174
  raise e
168
175
  end
169
176
 
170
177
  def expect_json_types(*args)
171
178
  call_with_relative_path(json_body, args) do |param, body|
172
- exception_path_adder(args) do
179
+ exception_path_adder(args, body) do
173
180
  expect_json_types_impl(param, body)
174
181
  end
175
182
  end
@@ -177,7 +184,7 @@ module Airborne
177
184
 
178
185
  def expect_json(*args)
179
186
  call_with_relative_path(json_body, args) do |param, body|
180
- exception_path_adder(args) do
187
+ exception_path_adder(args, body) do
181
188
  expect_json_impl(param, body)
182
189
  end
183
190
  end
@@ -185,7 +192,7 @@ module Airborne
185
192
 
186
193
  def expect_header_types(*args)
187
194
  call_with_relative_path(response.headers, args) do |param, body|
188
- exception_path_adder(args) do
195
+ exception_path_adder(args, body) do
189
196
  expect_json_types_impl(param, body)
190
197
  end
191
198
  end
@@ -193,7 +200,7 @@ module Airborne
193
200
 
194
201
  def expect_header(*args)
195
202
  call_with_relative_path(response.headers, args) do |param, body|
196
- exception_path_adder(args) do
203
+ exception_path_adder(args, body) do
197
204
  expect_json_impl(param, body)
198
205
  end
199
206
  end
@@ -214,9 +221,9 @@ module Airborne
214
221
  when 'Array'
215
222
  expect_all(json, &block)
216
223
  when 'Hash'
217
- json.each do |k, _v|
218
- yield json[k]
219
- end
224
+ json.each { |k, _v| yield json[k] }
225
+ else
226
+ raise ExpectationError, "expected array or hash, got #{json.class.name}"
220
227
  end
221
228
  end
222
229
 
@@ -1,3 +1,3 @@
1
1
  module Spaceborne
2
- VERSION = '0.1.28'.freeze
2
+ VERSION = '0.1.33'.freeze
3
3
  end
data/spaceborne.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = 'Extends brooklynDev/airborne'
13
13
  spec.homepage = 'https://github.com/keithrw54/spaceborne.git'
14
14
  spec.license = 'MIT'
15
- spec.required_ruby_version = '2.5.5'
15
+ spec.required_ruby_version = '~> 2.5.5'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features)/})
@@ -22,12 +22,12 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ['lib']
23
23
 
24
24
  spec.add_runtime_dependency 'activesupport'
25
- spec.add_runtime_dependency 'airborne', '~> 0.2.13'
25
+ spec.add_runtime_dependency 'airborne', '~> 0.3'
26
26
  spec.add_runtime_dependency 'curlyrest', '~> 0.1.30'
27
27
  spec.add_runtime_dependency 'rack'
28
- spec.add_runtime_dependency 'rack-test', '~> 0.6', '>= 0.6.2'
28
+ spec.add_runtime_dependency 'rack-test', '~> 1.1', '<= 2.0'
29
29
  spec.add_runtime_dependency 'rest-client', '< 3.0', '>= 1.7.3'
30
- spec.add_runtime_dependency 'rspec', '~> 3.1'
30
+ spec.add_runtime_dependency 'rspec', '~> 3.8'
31
31
  spec.add_development_dependency 'webmock', '~> 0'
32
32
 
33
33
  spec.add_development_dependency 'byebug', '~> 10.0.2'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spaceborne
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.28
4
+ version: 0.1.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Williams
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-15 00:00:00.000000000 Z
11
+ date: 2021-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.13
33
+ version: '0.3'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.13
40
+ version: '0.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: curlyrest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,20 +72,20 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.6'
76
- - - ">="
75
+ version: '1.1'
76
+ - - "<="
77
77
  - !ruby/object:Gem::Version
78
- version: 0.6.2
78
+ version: '2.0'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - "~>"
84
84
  - !ruby/object:Gem::Version
85
- version: '0.6'
86
- - - ">="
85
+ version: '1.1'
86
+ - - "<="
87
87
  - !ruby/object:Gem::Version
88
- version: 0.6.2
88
+ version: '2.0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rest-client
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -112,14 +112,14 @@ dependencies:
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: '3.1'
115
+ version: '3.8'
116
116
  type: :runtime
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: '3.1'
122
+ version: '3.8'
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: webmock
125
125
  requirement: !ruby/object:Gem::Requirement
@@ -191,7 +191,7 @@ require_paths:
191
191
  - lib
192
192
  required_ruby_version: !ruby/object:Gem::Requirement
193
193
  requirements:
194
- - - '='
194
+ - - "~>"
195
195
  - !ruby/object:Gem::Version
196
196
  version: 2.5.5
197
197
  required_rubygems_version: !ruby/object:Gem::Requirement