philiprehberger-header_kit 0.3.0 → 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 +11 -0
- data/README.md +25 -8
- 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,17 @@ 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
|
+
|
|
16
|
+
## [0.3.1] - 2026-03-31
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Standardize README badges, support section, and license format
|
|
20
|
+
|
|
10
21
|
## [0.3.0] - 2026-03-31
|
|
11
22
|
|
|
12
23
|
### Added
|
data/README.md
CHANGED
|
@@ -2,12 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/philiprehberger/rb-header-kit/actions/workflows/ci.yml)
|
|
4
4
|
[](https://rubygems.org/gems/philiprehberger-header_kit)
|
|
5
|
-
[](https://github.com/philiprehberger/rb-header-kit/releases)
|
|
6
5
|
[](https://github.com/philiprehberger/rb-header-kit/commits/main)
|
|
7
|
-
[](LICENSE)
|
|
8
|
-
[](https://github.com/philiprehberger/rb-header-kit/issues?q=is%3Aissue+is%3Aopen+label%3Abug)
|
|
9
|
-
[](https://github.com/philiprehberger/rb-header-kit/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement)
|
|
10
|
-
[](https://github.com/sponsors/philiprehberger)
|
|
11
6
|
|
|
12
7
|
HTTP header parsing, construction, and content negotiation
|
|
13
8
|
|
|
@@ -186,6 +181,16 @@ Philiprehberger::HeaderKit.parse_via('1.1 vegur, 1.0 fred')
|
|
|
186
181
|
# => [{protocol: "1.1", host: "vegur"}, {protocol: "1.0", host: "fred"}]
|
|
187
182
|
```
|
|
188
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
|
+
|
|
189
194
|
## API
|
|
190
195
|
|
|
191
196
|
| Method | Description |
|
|
@@ -209,6 +214,7 @@ Philiprehberger::HeaderKit.parse_via('1.1 vegur, 1.0 fred')
|
|
|
209
214
|
| `HeaderKit.security_headers(**options)` | Generate recommended security headers |
|
|
210
215
|
| `HeaderKit.parse_forwarded(header)` | Parse RFC 7239 Forwarded header |
|
|
211
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) |
|
|
212
218
|
|
|
213
219
|
## Development
|
|
214
220
|
|
|
@@ -220,10 +226,21 @@ bundle exec rubocop
|
|
|
220
226
|
|
|
221
227
|
## Support
|
|
222
228
|
|
|
223
|
-
If you find this
|
|
229
|
+
If you find this project useful:
|
|
230
|
+
|
|
231
|
+
⭐ [Star the repo](https://github.com/philiprehberger/rb-header-kit)
|
|
232
|
+
|
|
233
|
+
🐛 [Report issues](https://github.com/philiprehberger/rb-header-kit/issues?q=is%3Aissue+is%3Aopen+label%3Abug)
|
|
234
|
+
|
|
235
|
+
💡 [Suggest features](https://github.com/philiprehberger/rb-header-kit/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement)
|
|
236
|
+
|
|
237
|
+
❤️ [Sponsor development](https://github.com/sponsors/philiprehberger)
|
|
238
|
+
|
|
239
|
+
🌐 [All Open Source Projects](https://philiprehberger.com/open-source-packages)
|
|
240
|
+
|
|
241
|
+
💻 [GitHub Profile](https://github.com/philiprehberger)
|
|
224
242
|
|
|
225
|
-
[
|
|
226
|
-
[](https://philiprehberger.com/open-source-packages)
|
|
243
|
+
🔗 [LinkedIn Profile](https://www.linkedin.com/in/philiprehberger)
|
|
227
244
|
|
|
228
245
|
## License
|
|
229
246
|
|
|
@@ -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
|