network_resiliency 0.6.2 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
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