timex 0.1.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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/CHANGELOG.md +11 -0
  4. data/CODE_OF_CONDUCT.md +132 -0
  5. data/LICENSE.txt +4 -0
  6. data/README.md +112 -0
  7. data/Rakefile +28 -0
  8. data/lib/generators/timex/install_generator.rb +21 -0
  9. data/lib/generators/timex/templates/install.rb +54 -0
  10. data/lib/timex/auto_check.rb +59 -0
  11. data/lib/timex/cancellation_token.rb +84 -0
  12. data/lib/timex/clock.rb +113 -0
  13. data/lib/timex/composers/adaptive.rb +222 -0
  14. data/lib/timex/composers/base.rb +20 -0
  15. data/lib/timex/composers/hedged.rb +146 -0
  16. data/lib/timex/composers/two_phase.rb +97 -0
  17. data/lib/timex/configuration.rb +163 -0
  18. data/lib/timex/deadline.rb +458 -0
  19. data/lib/timex/expired.rb +77 -0
  20. data/lib/timex/named_component.rb +33 -0
  21. data/lib/timex/on_timeout.rb +15 -0
  22. data/lib/timex/propagation/http_header.rb +49 -0
  23. data/lib/timex/propagation/rack_middleware.rb +180 -0
  24. data/lib/timex/registry.rb +132 -0
  25. data/lib/timex/result.rb +137 -0
  26. data/lib/timex/strategies/base.rb +88 -0
  27. data/lib/timex/strategies/closeable.rb +81 -0
  28. data/lib/timex/strategies/cooperative.rb +27 -0
  29. data/lib/timex/strategies/io.rb +247 -0
  30. data/lib/timex/strategies/ractor.rb +84 -0
  31. data/lib/timex/strategies/subprocess.rb +267 -0
  32. data/lib/timex/strategies/unsafe.rb +54 -0
  33. data/lib/timex/strategies/wakeup.rb +154 -0
  34. data/lib/timex/telemetry/adapters.rb +173 -0
  35. data/lib/timex/telemetry.rb +119 -0
  36. data/lib/timex/test/virtual_clock.rb +51 -0
  37. data/lib/timex/timeout_handling.rb +39 -0
  38. data/lib/timex/version.rb +8 -0
  39. data/lib/timex.rb +79 -0
  40. data/mkdocs.yml +193 -0
  41. metadata +239 -0
data/mkdocs.yml ADDED
@@ -0,0 +1,193 @@
1
+ # yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json
2
+
3
+ site_name: TIMEx
4
+ site_description: A Swiss-army knife for timeouts in Ruby.
5
+ site_author: drexed
6
+ site_url: https://drexed.github.io/timex/
7
+ repo_name: drexed/timex
8
+ repo_url: https://github.com/drexed/timex
9
+ edit_uri: edit/main/docs/
10
+ copyright: Drexed, Inc. © 2026 - EoT
11
+
12
+ theme:
13
+ name: material
14
+ custom_dir: docs/overrides
15
+ logo: assets/favicon.svg
16
+ favicon: assets/favicon.ico
17
+ icon:
18
+ repo: fontawesome/brands/github
19
+ font:
20
+ text: DM Sans
21
+ code: DM Mono
22
+ palette:
23
+ - media: "(prefers-color-scheme)"
24
+ primary: custom
25
+ accent: custom
26
+ toggle:
27
+ icon: material/brightness-auto
28
+ name: Switch to light mode
29
+ - media: "(prefers-color-scheme: light)"
30
+ scheme: default
31
+ primary: custom
32
+ accent: custom
33
+ toggle:
34
+ icon: material/brightness-7
35
+ name: Switch to dark mode
36
+ - media: "(prefers-color-scheme: dark)"
37
+ scheme: slate
38
+ primary: custom
39
+ accent: custom
40
+ toggle:
41
+ icon: material/brightness-4
42
+ name: Switch to system preference
43
+ features:
44
+ - content.code.annotate
45
+ - content.code.copy
46
+ - content.tabs.link
47
+ - content.tooltips
48
+ - navigation.footer
49
+ - navigation.instant
50
+ - navigation.instant.prefetch
51
+ - navigation.instant.progress
52
+ - navigation.expand
53
+ - navigation.path
54
+ - navigation.sections
55
+ - navigation.tabs
56
+ - navigation.tabs.sticky
57
+ - navigation.top
58
+ - navigation.tracking
59
+ - search.highlight
60
+ - search.share
61
+ - search.suggest
62
+
63
+ markdown_extensions:
64
+ - admonition
65
+ - attr_list
66
+ - md_in_html
67
+ - pymdownx.details
68
+ - pymdownx.superfences:
69
+ custom_fences:
70
+ - name: mermaid
71
+ class: mermaid
72
+ format: !!python/name:pymdownx.superfences.fence_code_format
73
+ - pymdownx.highlight:
74
+ anchor_linenums: true
75
+ line_spans: __span
76
+ pygments_lang_class: true
77
+ - pymdownx.inlinehilite
78
+ - pymdownx.snippets
79
+ - pymdownx.tabbed:
80
+ alternate_style: true
81
+ - tables
82
+ - toc:
83
+ permalink: true
84
+ title: On this page
85
+
86
+ plugins:
87
+ - search
88
+ - rss:
89
+ match_path: blog/posts/.*
90
+ date_from_meta:
91
+ as_creation: date
92
+ categories:
93
+ - categories
94
+ - blog:
95
+ blog_dir: blog
96
+ blog_toc: true
97
+ post_date_format: long
98
+ post_url_format: "{slug}"
99
+ archive_date_format: MMMM yyyy
100
+ draft_if_future_date: true
101
+ categories_allowed:
102
+ - Tutorials
103
+ - Updates
104
+ - llmstxt:
105
+ markdown_description: >-
106
+ TIMEx is a Ruby library for safe, composable timeouts: a Deadline value object,
107
+ cooperative and forceful strategies, composers, propagation, and telemetry—without
108
+ stdlib Timeout's async-exception hazards.
109
+ full_output: llms-full.txt
110
+ sections:
111
+ "Getting Started":
112
+ - index.md: TIMEx overview, installation, and landing content
113
+ - getting_started.md: TIMEx.deadline, check!, requirements, quick tour
114
+ - comparison.md: TIMEx vs stdlib Timeout safety trade-offs
115
+ - configuration.md: TIMEx.configure process-wide defaults
116
+ - migrating_from_stdlib_timeout.md: Leaving Timeout.timeout behind
117
+ Basics:
118
+ - basics/deadline.md: Deadline monotonic wall clock min shield headers
119
+ - basics/clock.md: Real and virtual clocks for tests
120
+ - basics/facade.md: TIMEx.deadline TIMEx.call strategy on_timeout
121
+ - basics/cancellation_token.md: Cancellation token integration
122
+ Strategies:
123
+ - strategies/cooperative.md: Cooperative checkpoints check!
124
+ - strategies/io.md: Per-syscall IO timeouts
125
+ - strategies/wakeup.md: Wakeup strategy
126
+ - strategies/closeable.md: Closeable resource strategy
127
+ - strategies/subprocess.md: Isolated subprocess timeouts
128
+ - strategies/ractor.md: Ractor-based abandonment
129
+ - strategies/unsafe.md: Thread.raise escape hatch
130
+ Composers:
131
+ - composers/two_phase.md: Soft then hard two-phase timeouts
132
+ - composers/hedged.md: Hedged idempotent RPC tail latency
133
+ - composers/adaptive.md: Adaptive timeout from history
134
+ Propagation:
135
+ - propagation/http_header.md: X-TIMEx-Deadline HTTP propagation
136
+ - propagation/rack.md: Rack middleware for request budgets
137
+ Guides:
138
+ - internals.md: Registry strategies wiring
139
+ - tips_and_tricks.md: Patterns and gotchas
140
+ - testing.md: Virtual clock and TIMEx.reset_configuration!
141
+ - telemetry.md: Null Logger ASN OpenTelemetry adapters
142
+ - auto_check.md: TracePoint auto check! for legacy code
143
+
144
+ nav:
145
+ - Home: index.md
146
+ - Documentation:
147
+ - Getting Started: getting_started.md
148
+ - Configuration: configuration.md
149
+ - Internals: internals.md
150
+ - Telemetry: telemetry.md
151
+ - Auto-Check: auto_check.md
152
+ - Basics:
153
+ - Deadline: basics/deadline.md
154
+ - Clock: basics/clock.md
155
+ - Facade: basics/facade.md
156
+ - Cancellation Token: basics/cancellation_token.md
157
+ - Strategies:
158
+ - Cooperative: strategies/cooperative.md
159
+ - IO: strategies/io.md
160
+ - Wakeup: strategies/wakeup.md
161
+ - Closeable: strategies/closeable.md
162
+ - Subprocess: strategies/subprocess.md
163
+ - Ractor: strategies/ractor.md
164
+ - Unsafe: strategies/unsafe.md
165
+ - Composers:
166
+ - TwoPhase: composers/two_phase.md
167
+ - Hedged: composers/hedged.md
168
+ - Adaptive: composers/adaptive.md
169
+ - Propagation:
170
+ - HTTP Header: propagation/http_header.md
171
+ - Rack Middleware: propagation/rack.md
172
+ - More:
173
+ - Testing: testing.md
174
+ - Tips and Tricks: tips_and_tricks.md
175
+ - Comparison: comparison.md
176
+ - Migration: migrating_from_stdlib_timeout.md
177
+ - References:
178
+ - API Documentation: https://drexed.github.io/timex/api/index.html
179
+ - llms.txt: https://drexed.github.io/timex/llms.txt
180
+ - llms-full.txt: https://drexed.github.io/timex/llms-full.txt
181
+ - AI Skills: https://github.com/drexed/timex/blob/main/skills
182
+ - Blog: blog/index.md
183
+
184
+ extra:
185
+ generator: false
186
+ social:
187
+ - icon: fontawesome/brands/github
188
+ link: https://github.com/drexed/timex
189
+ - icon: fontawesome/solid/rss
190
+ link: https://drexed.github.io/timex/feed_rss_created.xml
191
+
192
+ extra_css:
193
+ - stylesheets/extra.css
metadata ADDED
@@ -0,0 +1,239 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: timex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Juan Gomez
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: bundler
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: i18n
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rake
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rdoc
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rubocop
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rubocop-performance
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubocop-rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop-rspec
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: yard
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: yard-lint
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ description: A Swiss-army knife for timeouts in Ruby.
167
+ email:
168
+ - drexed@users.noreply.github.com
169
+ executables: []
170
+ extensions: []
171
+ extra_rdoc_files: []
172
+ files:
173
+ - ".DS_Store"
174
+ - CHANGELOG.md
175
+ - CODE_OF_CONDUCT.md
176
+ - LICENSE.txt
177
+ - README.md
178
+ - Rakefile
179
+ - lib/generators/timex/install_generator.rb
180
+ - lib/generators/timex/templates/install.rb
181
+ - lib/timex.rb
182
+ - lib/timex/auto_check.rb
183
+ - lib/timex/cancellation_token.rb
184
+ - lib/timex/clock.rb
185
+ - lib/timex/composers/adaptive.rb
186
+ - lib/timex/composers/base.rb
187
+ - lib/timex/composers/hedged.rb
188
+ - lib/timex/composers/two_phase.rb
189
+ - lib/timex/configuration.rb
190
+ - lib/timex/deadline.rb
191
+ - lib/timex/expired.rb
192
+ - lib/timex/named_component.rb
193
+ - lib/timex/on_timeout.rb
194
+ - lib/timex/propagation/http_header.rb
195
+ - lib/timex/propagation/rack_middleware.rb
196
+ - lib/timex/registry.rb
197
+ - lib/timex/result.rb
198
+ - lib/timex/strategies/base.rb
199
+ - lib/timex/strategies/closeable.rb
200
+ - lib/timex/strategies/cooperative.rb
201
+ - lib/timex/strategies/io.rb
202
+ - lib/timex/strategies/ractor.rb
203
+ - lib/timex/strategies/subprocess.rb
204
+ - lib/timex/strategies/unsafe.rb
205
+ - lib/timex/strategies/wakeup.rb
206
+ - lib/timex/telemetry.rb
207
+ - lib/timex/telemetry/adapters.rb
208
+ - lib/timex/test/virtual_clock.rb
209
+ - lib/timex/timeout_handling.rb
210
+ - lib/timex/version.rb
211
+ - mkdocs.yml
212
+ homepage: https://github.com/drexed/timex
213
+ licenses:
214
+ - LGPL-3.0
215
+ metadata:
216
+ homepage_uri: https://github.com/drexed/timex
217
+ source_code_uri: https://github.com/drexed/timex
218
+ changelog_uri: https://github.com/drexed/timex/blob/main/CHANGELOG.md
219
+ bug_tracker_uri: https://github.com/drexed/timex/issues
220
+ documentation_uri: https://github.com/drexed/timex/blob/main/README.md
221
+ rubygems_mfa_required: 'true'
222
+ rdoc_options: []
223
+ require_paths:
224
+ - lib
225
+ required_ruby_version: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: 3.3.0
230
+ required_rubygems_version: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ requirements: []
236
+ rubygems_version: 4.0.11
237
+ specification_version: 4
238
+ summary: A Swiss-army knife for timeouts in Ruby.
239
+ test_files: []