opinionated_http 0.1.0 → 0.1.1

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: e0b33ff41de4de2487017dcb16c8af1bd049d8f59b99af148c2782f5aadbf90f
4
- data.tar.gz: fbb4ddce12a6aabb67827d124fd579e91d4a2b4def78d74c893dc82687519c96
3
+ metadata.gz: 70883413762ba2277b74061e20f9fd5faa73fccee8a762595a40793a93ed2689
4
+ data.tar.gz: 45bf3291006a3577a29f5fd603ad27c34b1d6948c54e67f71efb20862c0af613
5
5
  SHA512:
6
- metadata.gz: a3b31d0083666203057f05a38bdc0e7a5519af9757df935c9c772ca514bb7f8777c9b52a24edb960b201e5816bca356508d9470bfcd42fdcf83ee3bd622ec51b
7
- data.tar.gz: b6b9ba368403e795fc19b81a759e30cd03de38fd436c52222db7f7e73f79d4ad38fb1054c7ad6a23a2cddf5c6f55654127e334c76b0f5fd5f0ab3deab606163d
6
+ metadata.gz: eec7f0a191186d29a970284e04dc571a2c8329587a414fa41576852e59d08503928594e14fc8e65f9ebea1570f90e15ad5e878a7b26259eae4adc605e7e9063f
7
+ data.tar.gz: ac1ce6b6f65d720cf7ddac4d93621c608f609ad1e113ead056e710e0cfe37df70792459940cdd3ca9effe0d8a123e60df11e89cf2a713ab7855c1148ea29e86d
@@ -39,9 +39,10 @@ module OpinionatedHTTP
39
39
  force_retry: true,
40
40
  max_redirects: 10,
41
41
  after_connect: nil,
42
- verify_peer: false, # TODO: PersistentHTTP keeps returning cert expired even when it is valid.
42
+ verify_peer: false, # TODO: PersistentHTTP keeps returning cert expired even when it is valid.
43
43
  certificate: nil,
44
- private_key: nil
44
+ private_key: nil,
45
+ header: nil
45
46
  )
46
47
  @metric_prefix = metric_prefix
47
48
  @logger = logger || SemanticLogger[self]
@@ -90,7 +91,8 @@ module OpinionatedHTTP
90
91
  after_connect: @after_connect,
91
92
  certificate: @certificate,
92
93
  private_key: @private_key,
93
- verify_mode: @verify_peer ? OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT : OpenSSL::SSL::VERIFY_NONE
94
+ verify_mode: @verify_peer ? OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT : OpenSSL::SSL::VERIFY_NONE,
95
+ header: header
94
96
  )
95
97
  end
96
98
 
@@ -101,13 +103,35 @@ module OpinionatedHTTP
101
103
  Response.new(http_response, request)
102
104
  end
103
105
 
104
- def post(request: nil, **args)
106
+ def post(request: nil, json: nil, body: nil, **args)
107
+ raise(ArgumentError, "Either set :json or :body") if json && body
108
+
105
109
  request ||= Request.new(**args)
110
+ if json
111
+ request.format = :json
112
+ request.body = json
113
+ else
114
+ request.body = body
115
+ end
106
116
  request.verb = "Post"
107
117
  http_response = request(request)
108
118
  Response.new(http_response, request)
109
119
  end
110
120
 
121
+ def delete(request: nil, **args)
122
+ request ||= Request.new(**args)
123
+ request.verb = "Delete"
124
+ http_response = request(request)
125
+ Response.new(http_response, request)
126
+ end
127
+
128
+ def patch(request: nil, **args)
129
+ request ||= Request.new(**args)
130
+ request.verb = "Patch"
131
+ http_response = request(request)
132
+ Response.new(http_response, request)
133
+ end
134
+
111
135
  # Returns [Response] after submitting the [Request]
112
136
  def request(request)
113
137
  request.metric_prefix ||= metric_prefix
@@ -56,7 +56,7 @@ module OpinionatedHTTP
56
56
  case format
57
57
  when :json
58
58
  headers["Content-Type"] = "application/json"
59
- body.to_json #unless body.is_a?(String) || body.nil?
59
+ body.to_json unless body.is_a?(String) || body.nil?
60
60
  when nil
61
61
  body
62
62
  else
@@ -26,7 +26,7 @@ module OpinionatedHTTP
26
26
  return body if success?
27
27
 
28
28
  error_message = "HTTP #{verb.upcase}: #{action} Failure: (#{code}) #{message}"
29
- logger.error(message: error_message, metric: "#{metric_prefix}/exception")
29
+ logger.error(message: error_message, metric: "#{metric_prefix}/exception", payload: {body: body})
30
30
  raise(error_class, error_message)
31
31
  end
32
32
 
@@ -1,3 +1,3 @@
1
1
  module OpinionatedHTTP
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.1.1".freeze
3
3
  end
data/test/client_test.rb CHANGED
@@ -12,8 +12,7 @@ class ClientTest < Minitest::Test
12
12
  secret_config_prefix: "fake_service",
13
13
  metric_prefix: "FakeService",
14
14
  logger: SemanticLogger["FakeService"],
15
- error_class: ServiceError,
16
- header: {"Content-Type" => "application/json"}
15
+ error_class: ServiceError
17
16
  )
18
17
  end
19
18
 
@@ -58,6 +57,15 @@ class ClientTest < Minitest::Test
58
57
  end
59
58
  end
60
59
 
60
+ it "with JSON data" do
61
+ request = {zip: "12345", population: 54_321}
62
+ body = request.to_json
63
+ stub_request(Net::HTTPSuccess, 200, "OK", body) do
64
+ response = http.post(action: "lookup", json: request)
65
+ assert_equal request, response.body!.transform_keys!(&:to_sym)
66
+ end
67
+ end
68
+
61
69
  it "fails with body" do
62
70
  message = "HTTP POST: lookup Failure: (403) Forbidden"
63
71
  output = {zip: "12345", population: 54_321}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opinionated_http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-11 00:00:00.000000000 Z
11
+ date: 2022-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: persistent_http