philiprehberger-header_kit 0.3.1 → 0.4.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +11 -0
- data/lib/philiprehberger/header_kit/retry_after.rb +21 -0
- data/lib/philiprehberger/header_kit/version.rb +1 -1
- data/lib/philiprehberger/header_kit.rb +12 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7515c78405c89a2690d8a4fc48b802bdf9c5b79dd9deae14fe07de8a8673d2df
|
|
4
|
+
data.tar.gz: ca05991394f985b4b5b0148a6db2c826bc9101eb04787b6f6adf9c4d2839ab1b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 02ce3113575c5c98db4e4b010138861a983488db0e888b09644dfe6162b48af2864190b815f82d33d1e0b6cbf5855eed176b1ec6bd30fdd73966f7be59b538b1
|
|
7
|
+
data.tar.gz: 387dd665c493e2d308e3cb76581733691d231d2160e3c6ad6cee724a818470f3fb31e089dd607206680738508b204f5630c0c48fae4f1c05ed89ed97c2bd4057
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2026-04-04
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `parse_retry_after` for parsing Retry-After headers (numeric seconds or HTTP date)
|
|
15
|
+
|
|
10
16
|
## [0.3.1] - 2026-03-31
|
|
11
17
|
|
|
12
18
|
### Changed
|
data/README.md
CHANGED
|
@@ -181,6 +181,16 @@ Philiprehberger::HeaderKit.parse_via('1.1 vegur, 1.0 fred')
|
|
|
181
181
|
# => [{protocol: "1.1", host: "vegur"}, {protocol: "1.0", host: "fred"}]
|
|
182
182
|
```
|
|
183
183
|
|
|
184
|
+
### Parse Retry-After
|
|
185
|
+
|
|
186
|
+
```ruby
|
|
187
|
+
Philiprehberger::HeaderKit.parse_retry_after("120")
|
|
188
|
+
# => {seconds: 120}
|
|
189
|
+
|
|
190
|
+
Philiprehberger::HeaderKit.parse_retry_after("Fri, 04 Apr 2026 12:00:00 GMT")
|
|
191
|
+
# => {date: 2026-04-04 12:00:00 UTC}
|
|
192
|
+
```
|
|
193
|
+
|
|
184
194
|
## API
|
|
185
195
|
|
|
186
196
|
| Method | Description |
|
|
@@ -204,6 +214,7 @@ Philiprehberger::HeaderKit.parse_via('1.1 vegur, 1.0 fred')
|
|
|
204
214
|
| `HeaderKit.security_headers(**options)` | Generate recommended security headers |
|
|
205
215
|
| `HeaderKit.parse_forwarded(header)` | Parse RFC 7239 Forwarded header |
|
|
206
216
|
| `HeaderKit.parse_via(header)` | Parse Via header into structured entries |
|
|
217
|
+
| `HeaderKit.parse_retry_after(header)` | Parse Retry-After header (seconds or HTTP date) |
|
|
207
218
|
|
|
208
219
|
## Development
|
|
209
220
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Philiprehberger
|
|
6
|
+
module HeaderKit
|
|
7
|
+
module RetryAfter
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
def parse(header)
|
|
11
|
+
return nil if header.nil? || header.empty?
|
|
12
|
+
|
|
13
|
+
if header.match?(/\A\d+\z/)
|
|
14
|
+
{ seconds: header.to_i }
|
|
15
|
+
else
|
|
16
|
+
{ date: Time.httpdate(header) }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -14,6 +14,7 @@ require_relative 'header_kit/negotiation'
|
|
|
14
14
|
require_relative 'header_kit/cors'
|
|
15
15
|
require_relative 'header_kit/security'
|
|
16
16
|
require_relative 'header_kit/forwarded'
|
|
17
|
+
require_relative 'header_kit/retry_after'
|
|
17
18
|
|
|
18
19
|
module Philiprehberger
|
|
19
20
|
module HeaderKit
|
|
@@ -174,5 +175,16 @@ module Philiprehberger
|
|
|
174
175
|
def self.parse_via(header)
|
|
175
176
|
Forwarded.parse_via(header)
|
|
176
177
|
end
|
|
178
|
+
|
|
179
|
+
# Parse a Retry-After header.
|
|
180
|
+
#
|
|
181
|
+
# Returns a hash with :seconds (Integer) for numeric values,
|
|
182
|
+
# or :date (Time) for HTTP date values. Returns nil for nil/empty input.
|
|
183
|
+
#
|
|
184
|
+
# @param header [String] the Retry-After header value
|
|
185
|
+
# @return [Hash, nil] hash with :seconds or :date key, or nil
|
|
186
|
+
def self.parse_retry_after(header)
|
|
187
|
+
RetryAfter.parse(header)
|
|
188
|
+
end
|
|
177
189
|
end
|
|
178
190
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: philiprehberger-header_kit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Philip Rehberger
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-04-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Parse and build Accept, Accept-Language, Accept-Encoding, Authorization,
|
|
14
14
|
Cache-Control, Content-Type, Cookie, Link, CORS, Forwarded, and Via HTTP headers.
|
|
@@ -35,6 +35,7 @@ files:
|
|
|
35
35
|
- lib/philiprehberger/header_kit/forwarded.rb
|
|
36
36
|
- lib/philiprehberger/header_kit/link.rb
|
|
37
37
|
- lib/philiprehberger/header_kit/negotiation.rb
|
|
38
|
+
- lib/philiprehberger/header_kit/retry_after.rb
|
|
38
39
|
- lib/philiprehberger/header_kit/security.rb
|
|
39
40
|
- lib/philiprehberger/header_kit/version.rb
|
|
40
41
|
homepage: https://philiprehberger.com/open-source-packages/ruby/philiprehberger-header_kit
|