httpigeon 2.4.3 → 2.5.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: 25a65b398f4af0053c9a47fece2a1aca8a50de2f7dfab47ea0c268c77490071d
4
- data.tar.gz: 49025c5b1963273e6711357e97271801ada1db14655b4d45de9c15eb29598efc
3
+ metadata.gz: d974d75f6942b6ef6b52e44a68f28712beaae150d1737c60d32aed8f1a139dfb
4
+ data.tar.gz: 84e6d7c7c22183135d7d5efc4fc4ab2f1fcb93efdcf20db4f50e9b3e402bdc87
5
5
  SHA512:
6
- metadata.gz: 3b4db4d3a51b01651c495a9519f9e45af9af83909f8d322f607b9371df4ba2231d7add72a9f57fed4ead40b922b4611224e2658d4bfc2becf4678e00136e0f2e
7
- data.tar.gz: f05f26331d38ed6c88f1d17a1ddbe55a40b7fe2bb686a8cc664674e1beb3287159567f8c1c5e279eb00e4b5e195e21b3d5bfa0d04371208a401ed3cce4745065
6
+ metadata.gz: 964b248375adbb313cf40c6102e884cbd0f5adedcbd6e5d148d724b4c5e6058c920d02c62593c6516806f7f72d83f722f1d17da36bea9d7ec0a5002ae2104306
7
+ data.tar.gz: 3a09eb4595ca7b579bd8ceb970a972267e9d86d758b8c14ff65381959dd1fce51d5bce4c33ababedd0c0024f13ca9a7b3e6e9d670ef3717eed115f26f9f5184f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.5.0](https://github.com/dailypay/httpigeon/compare/v2.4.4...v2.5.0) (2026-11-05)
4
+
5
+
6
+ ### Features
7
+
8
+ * **AX-2975:** Allow activesupport 8.0 and 8.1 ([#68](https://github.com/dailypay/httpigeon/issues/68)) ([50b9965](https://github.com/dailypay/httpigeon/commit/50b9965a6660e6fb780f99a9c35a745affd27b30))
9
+
10
+ ## [2.4.4](https://github.com/dailypay/httpigeon/compare/v2.4.3...v2.4.4) (2026-07-17)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **ASV-4361:** close five log-redaction and dispatch findings ([#64](https://github.com/dailypay/httpigeon/issues/64)) ([ef56054](https://github.com/dailypay/httpigeon/commit/ef5605465787d5cea1cce6f39ffd96763502a968))
16
+
3
17
  ## [2.4.3](https://github.com/dailypay/httpigeon/compare/v2.4.2...v2.4.3) (2026-05-01)
4
18
 
5
19
 
data/httpigeon.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ["lib"]
29
29
 
30
30
  spec.add_dependency "faraday", "~> 2.14.1"
31
- spec.add_dependency "activesupport", "~> 7.2.0"
31
+ spec.add_dependency "activesupport", ">= 7.2", "< 8.2"
32
32
 
33
33
  spec.add_development_dependency "rake", "~> 13.3"
34
34
  spec.add_development_dependency "rspec", "~> 3.4"
@@ -48,15 +48,21 @@ module HTTPigeon
48
48
 
49
49
  if filter.present?
50
50
  replacement = filter.split('::')[1].presence
51
- v = replacement.present? ? replacement : redact_value(v)
52
- end
53
-
54
- if v.is_a?(Hash)
55
- [k, redact_hash(v)]
56
- elsif v.is_a?(Array)
57
- [k, v.map { |val| redact(val) }]
58
- else
51
+ # Replace collections wholesale; partial redaction leaks bytes of
52
+ # nested secrets.
53
+ v = if replacement.present?
54
+ replacement
55
+ elsif v.is_a?(Hash) || v.is_a?(Array)
56
+ HTTPigeon.redactor_string
57
+ else
58
+ redact_value(v)
59
+ end
59
60
  [k, v]
61
+ else
62
+ # Recurse through the dispatcher so nested values redact like
63
+ # top-level ones. This runs content/regex filters over string
64
+ # values too (e.g. secrets in JSON bodies).
65
+ [k, redact(v)]
60
66
  end
61
67
  end
62
68
  end
@@ -67,13 +73,23 @@ module HTTPigeon
67
73
 
68
74
  next unless pattern.match?(%r{^/.*/([guysim]*)$})
69
75
 
76
+ regex = regex_for(pattern)
77
+
70
78
  data = if replacement.present?
71
- data.gsub(regex_for(pattern), replacement)
79
+ # Block form keeps the replacement literal; the string form
80
+ # expands backreferences (\1, \&) and re-emits the secret.
81
+ data.gsub(regex) { replacement }
72
82
  else
73
- data.gsub(regex_for(pattern)) do |sub|
74
- captures = sub.match(regex_for(pattern))&.captures
75
-
76
- captures.present? ? captures[0] + redact_value(captures[1]) : sub
83
+ data.gsub(regex) do |sub|
84
+ captures = Regexp.last_match&.captures
85
+
86
+ # A zero-width capture yields nil; skip it rather than
87
+ # concatenating nil and raising TypeError.
88
+ if captures.present? && !captures[1].nil?
89
+ captures[0] + redact_value(captures[1])
90
+ else
91
+ sub
92
+ end
77
93
  end
78
94
  end
79
95
  end
@@ -84,12 +84,12 @@ module HTTPigeon
84
84
 
85
85
  raw_response = if HTTPigeon.mount_circuit_breaker
86
86
  fuse.execute(request_id: connection.headers[REQUEST_ID_HEADER]) do
87
- connection.send(method, path, payload) do |request|
87
+ connection.send(sym_method, path, payload) do |request|
88
88
  yield(request) if block_given?
89
89
  end
90
90
  end
91
91
  else
92
- connection.send(method, path, payload) do |request|
92
+ connection.send(sym_method, path, payload) do |request|
93
93
  yield(request) if block_given?
94
94
  end
95
95
  end
@@ -1,3 +1,3 @@
1
1
  module HTTPigeon
2
- VERSION = "2.4.3".freeze
2
+ VERSION = "2.5.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpigeon
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.3
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 2k-joker
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-01 00:00:00.000000000 Z
11
+ date: 2026-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '7.2'
34
+ - - "<"
32
35
  - !ruby/object:Gem::Version
33
- version: 7.2.0
36
+ version: '8.2'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '7.2'
44
+ - - "<"
39
45
  - !ruby/object:Gem::Version
40
- version: 7.2.0
46
+ version: '8.2'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rake
43
49
  requirement: !ruby/object:Gem::Requirement