network_resiliency 0.6.2 → 0.6.4

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: 5a2741f43768bd43985efdbf000fc82075d8fb2757e6af19a7ab0aeeae2f3a87
4
- data.tar.gz: 713af5ee87ca4a8149a3ce3f5d9416eb2fa03cc0bdea7aca1828e18a59595003
3
+ metadata.gz: 46125649099a417a46eaf119d48686bbed8090d4840ee13d607372e93df2df6a
4
+ data.tar.gz: 5e38386f5e8616d452383d007b97e4e2a4ae0895ad22eddadc8dcda28081da77
5
5
  SHA512:
6
- metadata.gz: 6d80cac5009c100449adec47f70636dc015b069dbd6e3901545f6378841de9ad8970b2156d948c4e9ff4deb1cb579141167078032af6faa88270d88566f592e0
7
- data.tar.gz: 7a9f01e6967657f61a40d80755d95f1c67387f598bfa73efb6d3d6f38661a7e17e5ccdf058834e3e8b09ba89bdb0d286019a4c3832b4d54908d044f5db9565e9
6
+ metadata.gz: a995769d78fbdaeff1ca869f277eaf1aafcf46531b0eb9c35b31e9782f9d4ded7c7f88ba50c6c88f95a0e4e356c1b4aa6e11a55a8a7b04a4622e79751174d9d4
7
+ data.tar.gz: 1e98ffcc20016e723802c9ce6ef2730357d7bf98fb7d86b24a057830f59f2f0fed946c21c0d8a3c4292af9b3013f49f21419e0dba1cbcf40251169c66fe6a4dc
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### v0.6.4 (2023-11-27)
2
+ - request normalization context
3
+
4
+ ### v0.6.3 (2023-11-27)
5
+ - custom request normalization
6
+
1
7
  ### v0.6.2 (2023-11-26)
2
8
  - syncer
3
9
  - redis without_reconnect
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.6.2)
4
+ network_resiliency (0.6.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -17,15 +17,16 @@ module NetworkResiliency
17
17
 
18
18
  ID_REGEX = %r{/[0-9]+(?=/|$)}.freeze
19
19
  UUID_REGEX = %r`/\h{8}-\h{4}-(\h{4})-\h{4}-\h{12}(?=/|$)`.freeze
20
+
20
21
  refine Net::HTTP do
21
22
  def normalize_path(path)
22
- path.gsub(
23
+ NetworkResiliency.normalize_request(:http, path, host: address).gsub(
23
24
  Regexp.union(
24
25
  NetworkResiliency::Adapter::HTTP::ID_REGEX,
25
26
  NetworkResiliency::Adapter::HTTP::UUID_REGEX,
26
27
  ),
27
28
  '/x',
28
- )
29
+ ).gsub(%r{//+}, "/")
29
30
  end
30
31
 
31
32
  def with_resilience(action, destination, idempotent, &block)
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.4"
3
3
  end
@@ -15,6 +15,7 @@ module NetworkResiliency
15
15
  autoload :Postgres, "network_resiliency/adapter/postgres"
16
16
  end
17
17
 
18
+ ADAPTERS = [ :http, :faraday, :redis, :mysql, :postgres ].freeze
18
19
  MODE = [ :observe, :resilient ].freeze
19
20
  RESILIENCY_SIZE_THRESHOLD = 1_000
20
21
 
@@ -103,6 +104,32 @@ module NetworkResiliency
103
104
  @mode = mode
104
105
  end
105
106
 
107
+ def normalize_request(adapter, request = nil, **context, &block)
108
+ unless ADAPTERS.include?(adapter)
109
+ raise ArgumentError, "invalid adapter: #{adapter}"
110
+ end
111
+
112
+ if request && block_given?
113
+ raise ArgumentError, "specify request or block, but not both"
114
+ end
115
+
116
+ if request.nil? && !context.empty?
117
+ raise ArgumentError, "can not speficy context without request"
118
+ end
119
+
120
+ @normalize_request ||= {}
121
+ @normalize_request[adapter] ||= []
122
+ @normalize_request[adapter] << block if block_given?
123
+
124
+ if request
125
+ @normalize_request[adapter].reduce(request) do |req, block|
126
+ block.call(req, **context)
127
+ end
128
+ else
129
+ @normalize_request[adapter]
130
+ end
131
+ end
132
+
106
133
  # private
107
134
 
108
135
  def record(adapter:, action:, destination:, duration:, error:, timeout:, attempts: 1)
@@ -291,6 +318,7 @@ module NetworkResiliency
291
318
  def reset
292
319
  @enabled = nil
293
320
  @mode = nil
321
+ @normalize_request = nil
294
322
  Thread.current["network_resiliency"] = nil
295
323
  StatsEngine.reset
296
324
  Syncer.stop
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: network_resiliency
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper