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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b397e499d587d20070ad785372aa81dc6574f583de2663cb105598ba229f3b52
4
- data.tar.gz: cf8de787ddaa0f5cf2c95efa89f17e8db64d0368262bdd691b29c029fc0587fe
3
+ metadata.gz: 7515c78405c89a2690d8a4fc48b802bdf9c5b79dd9deae14fe07de8a8673d2df
4
+ data.tar.gz: ca05991394f985b4b5b0148a6db2c826bc9101eb04787b6f6adf9c4d2839ab1b
5
5
  SHA512:
6
- metadata.gz: 600588c8096d75b8b8559a2aa0d9477025a7e02706e3906f7c57297999f303083078f8dd7dfe75c70a56a2ddb6e424d88c69e94b11cfee8a9038eb1c1e7bc275
7
- data.tar.gz: 9984feba85757ee07365321359798fe91a87c0f44902c65c81f52bb1885683c0971ea78590eee5db427e952afe72bbc1dceee4eba39478ca90e24e04622bcb97
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Philiprehberger
4
4
  module HeaderKit
5
- VERSION = '0.3.1'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  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.3.1
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-03-31 00:00:00.000000000 Z
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