pager_duty-connection 2.2.0 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdd585e0292f12142b4deb85820c0bf5f9155f6d7ec607bddf53bceaf131c732
4
- data.tar.gz: 8b2f1784f52e3f4d70e135b2d70eff086de47a87b6e24b0079797211634617e3
3
+ metadata.gz: b054f9ef807fb4106210b76a8a04db02b52599a4c617df4d43f06b3a5f63c67c
4
+ data.tar.gz: 76f316fd0c10badb260c3353926f9ceb540c5af3b0ae33b597641e0f482ea2a3
5
5
  SHA512:
6
- metadata.gz: 857ce1740ca088180a548594f38aa8c4ab0af2bb5b3fe002bda1febd00e6a5c83bc89a01803596d5e518562a19186e0fd6c2f868a30f89827d6b39f7ca1988cf
7
- data.tar.gz: 7e3f96e3ea4d2eb17714eb2deb090316817cce70c3f2c77dd3cbfe306683ae462adf9e3ec34c5ac6a204523638ad005b7626b07751adf2224dc7ce78e5d20bb6
6
+ metadata.gz: 99dc2a3a2ba5eedb69ac4ac1f758df7bb54a7a632adb9af8bc4a3093bcc8b4638d637f63dd49221838b81ccd7badb51ba68d9f6cdc12ad1a0c0ed5a9aedcc558
7
+ data.tar.gz: '08a739a697b4f429e42d584ece06a5d7176fcb2099be85c6d1cdc0c79763bbaca2ff6bfc04ce5a17fe9fcc1102545bec6fb54c7a93d39f948a7ed62359d48373'
@@ -1,5 +1,5 @@
1
1
  module PagerDuty
2
2
  class Connection
3
- VERSION = "2.2.0"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  require 'faraday'
2
- require 'faraday_middleware'
2
+ require 'hashie'
3
3
  require 'active_support'
4
4
  require 'active_support/core_ext'
5
5
  require 'active_support/time_with_zone'
@@ -12,15 +12,39 @@ module PagerDuty
12
12
  API_VERSION = 2
13
13
  API_PREFIX = "https://api.pagerduty.com/"
14
14
 
15
- class FileNotFoundError < RuntimeError
16
- end
15
+ class FileNotFoundError < RuntimeError; end
16
+
17
+ class ApiError < RuntimeError; end
18
+
19
+ class RateLimitError < RuntimeError; end
20
+
21
+ class UnauthorizedError < RuntimeError; end
22
+
23
+ class ForbiddenError < RuntimeError; end
17
24
 
18
- class ApiError < RuntimeError
25
+ class RaiseUnauthorizedOn401 < Faraday::Middleware
26
+ def call(env)
27
+ response = @app.call(env)
28
+ if response.status == 401
29
+ raise PagerDuty::Connection::UnauthorizedError, response.env[:url].to_s
30
+ else
31
+ response
32
+ end
33
+ end
19
34
  end
20
35
 
21
- class RateLimitError < RuntimeError
36
+ class RaiseForbiddenOn403 < Faraday::Middleware
37
+ def call(env)
38
+ response = @app.call(env)
39
+ if response.status == 403
40
+ raise PagerDuty::Connection::ForbiddenError, response.env[:url].to_s
41
+ else
42
+ response
43
+ end
44
+ end
22
45
  end
23
46
 
47
+
24
48
  class RaiseFileNotFoundOn404 < Faraday::Middleware
25
49
  def call(env)
26
50
  response = @app.call env
@@ -40,10 +64,13 @@ module PagerDuty
40
64
  message = "Got HTTP #{response.status}: #{response.reason_phrase}\nFrom #{url}"
41
65
 
42
66
  if error = response.body
43
- # TODO May Need to check error.errors too
44
- message += "\n#{JSON.parse(error)}"
67
+ begin
68
+ # TODO May Need to check error.errors too
69
+ message += "\n#{JSON.parse(error)}"
70
+ rescue JSON::ParserError
71
+ message += "\n#{error}"
72
+ end
45
73
  end
46
-
47
74
  raise ApiError, message
48
75
  else
49
76
  response
@@ -67,9 +94,11 @@ module PagerDuty
67
94
  def call(env)
68
95
 
69
96
  body = env[:body]
70
- TIME_KEYS.each do |key|
71
- if body.has_key?(key)
72
- body[key] = body[key].iso8601 if body[key].respond_to?(:iso8601)
97
+ unless body.nil?
98
+ TIME_KEYS.each do |key|
99
+ if body.has_key?(key)
100
+ body[key] = body[key].iso8601 if body[key].respond_to?(:iso8601)
101
+ end
73
102
  end
74
103
  end
75
104
 
@@ -77,7 +106,7 @@ module PagerDuty
77
106
  end
78
107
  end
79
108
 
80
- class ParseTimeStrings < Faraday::Response::Middleware
109
+ class ParseTimeStrings < Faraday::Middleware
81
110
  TIME_KEYS = %w(
82
111
  at
83
112
  created_at
@@ -108,6 +137,10 @@ module PagerDuty
108
137
  pending_actions
109
138
  )
110
139
 
140
+ def on_complete(env)
141
+ parse(env[:body])
142
+ end
143
+
111
144
  def parse(body)
112
145
  case body
113
146
  when Hash, ::Hashie::Mash
@@ -150,13 +183,34 @@ module PagerDuty
150
183
  end
151
184
  end
152
185
 
186
+ class Mashify < Faraday::Middleware
187
+ def on_complete(env)
188
+ env[:body] = parse(env[:body])
189
+ end
190
+
191
+ def parse(body)
192
+ case body
193
+ when Hash
194
+ ::Hashie::Mash.new(body)
195
+ when Array
196
+ body.map { |item| parse(item) }
197
+ else
198
+ body
199
+ end
200
+ end
201
+ end
202
+
153
203
  def initialize(token, token_type: :Token, url: API_PREFIX, debug: false)
154
204
  @connection = Faraday.new do |conn|
155
205
  conn.url_prefix = url
156
206
 
157
207
  case token_type
158
208
  when :Token
159
- conn.request :token_auth, token
209
+ if faraday_v1?
210
+ conn.request :token_auth, token
211
+ else
212
+ conn.request :authorization, 'Token', token
213
+ end
160
214
  when :Bearer
161
215
  conn.request :authorization, 'Bearer', token
162
216
  else raise ArgumentError, "invalid token_type: #{token_type.inspect}"
@@ -170,7 +224,7 @@ module PagerDuty
170
224
 
171
225
  # json back, mashify it
172
226
  conn.use ParseTimeStrings
173
- conn.response :mashify
227
+ conn.use Mashify
174
228
  conn.response :json
175
229
  conn.response :logger, ::Logger.new(STDOUT), bodies: true if debug
176
230
 
@@ -180,12 +234,20 @@ module PagerDuty
180
234
  conn.use RaiseApiErrorOnNon200
181
235
  conn.use RaiseFileNotFoundOn404
182
236
  conn.use RaiseRateLimitOn429
237
+ conn.use RaiseForbiddenOn403
238
+ conn.use RaiseUnauthorizedOn401
183
239
 
184
240
  conn.adapter Faraday.default_adapter
185
241
  end
186
242
  end
187
243
 
188
244
  def get(path, request = {})
245
+ # The run_request() method body argument defaults to {}, which is incorrect for GET requests
246
+ # https://github.com/technicalpickles/pager_duty-connection/issues/56
247
+ # NOTE: PagerDuty support discourages GET requests with bodies, but not throwing an ArgumentError to prevent breaking
248
+ # corner-case implementations.
249
+ request[:body] = nil if !request[:body]
250
+
189
251
  # paginate anything being 'get'ed, because the offset/limit isn't intuitive
190
252
  request[:query_params] = {} if !request[:query_params]
191
253
  page = request[:query_params].fetch(:page, 1).to_i
@@ -193,6 +255,7 @@ module PagerDuty
193
255
  offset = (page - 1) * limit
194
256
 
195
257
  query_params = request[:query_params].merge(offset: offset, limit: limit)
258
+ query_params.delete(:page)
196
259
 
197
260
  run_request(:get, path, **request.merge(query_params: query_params))
198
261
  end
@@ -211,6 +274,14 @@ module PagerDuty
211
274
 
212
275
  private
213
276
 
277
+ def faraday_v1?
278
+ faraday_version < Gem::Version.new("2")
279
+ end
280
+
281
+ def faraday_version
282
+ @faraday_version ||= Gem.loaded_specs["faraday"].version
283
+ end
284
+
214
285
  def run_request(method, path, body: {}, headers: {}, query_params: {})
215
286
  path = path.gsub(/^\//, '') # strip leading slash, to make sure relative things happen on the connection
216
287
 
@@ -17,8 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency "faraday", "~> 1.0"
21
- gem.add_dependency "faraday_middleware", "~> 1.0"
20
+ gem.add_dependency "faraday", ">= 1.10", "< 3"
22
21
  gem.add_dependency "activesupport", ">= 3.2", "< 8.0"
23
22
  gem.add_dependency "hashie", ">= 1.2"
24
23
 
metadata CHANGED
@@ -1,43 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pager_duty-connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Nichols
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-10 00:00:00.000000000 Z
11
+ date: 2024-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
17
+ - - ">="
25
18
  - !ruby/object:Gem::Version
26
- version: '1.0'
27
- - !ruby/object:Gem::Dependency
28
- name: faraday_middleware
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
19
+ version: '1.10'
20
+ - - "<"
32
21
  - !ruby/object:Gem::Version
33
- version: '1.0'
22
+ version: '3'
34
23
  type: :runtime
35
24
  prerelease: false
36
25
  version_requirements: !ruby/object:Gem::Requirement
37
26
  requirements:
38
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.10'
30
+ - - "<"
39
31
  - !ruby/object:Gem::Version
40
- version: '1.0'
32
+ version: '3'
41
33
  - !ruby/object:Gem::Dependency
42
34
  name: activesupport
43
35
  requirement: !ruby/object:Gem::Requirement
@@ -124,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
116
  - !ruby/object:Gem::Version
125
117
  version: '0'
126
118
  requirements: []
127
- rubygems_version: 3.4.12
119
+ rubygems_version: 3.4.18
128
120
  signing_key:
129
121
  specification_version: 4
130
122
  summary: Written with the power of faraday, pager_duty-connection tries to be a simple