spikard 0.13.0 → 0.15.3

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 (207) hide show
  1. checksums.yaml +4 -4
  2. data/Steepfile +6 -0
  3. data/ext/spikard_rb/extconf.rb +1 -2
  4. data/ext/spikard_rb/{Cargo.lock → native/Cargo.lock} +818 -423
  5. data/ext/spikard_rb/native/Cargo.toml +24 -0
  6. data/ext/spikard_rb/src/lib.rs +5366 -3
  7. data/lib/spikard/native.rb +86 -0
  8. data/lib/spikard/version.rb +6 -1
  9. data/lib/spikard.rb +8 -52
  10. data/lib/spikard_rb.so +0 -0
  11. data/sig/types.rbs +427 -0
  12. metadata +14 -243
  13. data/LICENSE +0 -1
  14. data/README.md +0 -285
  15. data/ext/spikard_rb/Cargo.toml +0 -17
  16. data/lib/spikard/app.rb +0 -458
  17. data/lib/spikard/background.rb +0 -58
  18. data/lib/spikard/config.rb +0 -506
  19. data/lib/spikard/converters.rb +0 -13
  20. data/lib/spikard/grpc.rb +0 -232
  21. data/lib/spikard/handler_wrapper.rb +0 -113
  22. data/lib/spikard/provide.rb +0 -315
  23. data/lib/spikard/response.rb +0 -198
  24. data/lib/spikard/schema.rb +0 -243
  25. data/lib/spikard/sse.rb +0 -111
  26. data/lib/spikard/streaming_response.rb +0 -44
  27. data/lib/spikard/testing.rb +0 -474
  28. data/lib/spikard/upload_file.rb +0 -131
  29. data/lib/spikard/websocket.rb +0 -59
  30. data/sig/spikard.rbs +0 -739
  31. data/vendor/crates/spikard-bindings-shared/Cargo.toml +0 -75
  32. data/vendor/crates/spikard-bindings-shared/examples/config_extraction.rs +0 -132
  33. data/vendor/crates/spikard-bindings-shared/src/config_extractor.rs +0 -905
  34. data/vendor/crates/spikard-bindings-shared/src/conversion_traits.rs +0 -210
  35. data/vendor/crates/spikard-bindings-shared/src/di_traits.rs +0 -252
  36. data/vendor/crates/spikard-bindings-shared/src/error_response.rs +0 -404
  37. data/vendor/crates/spikard-bindings-shared/src/grpc_metadata.rs +0 -199
  38. data/vendor/crates/spikard-bindings-shared/src/handler_base.rs +0 -252
  39. data/vendor/crates/spikard-bindings-shared/src/json_conversion.rs +0 -829
  40. data/vendor/crates/spikard-bindings-shared/src/lazy_cache.rs +0 -587
  41. data/vendor/crates/spikard-bindings-shared/src/lib.rs +0 -33
  42. data/vendor/crates/spikard-bindings-shared/src/lifecycle_base.rs +0 -298
  43. data/vendor/crates/spikard-bindings-shared/src/lifecycle_executor.rs +0 -594
  44. data/vendor/crates/spikard-bindings-shared/src/response_builder.rs +0 -743
  45. data/vendor/crates/spikard-bindings-shared/src/response_interpreter.rs +0 -944
  46. data/vendor/crates/spikard-bindings-shared/src/test_client_base.rs +0 -260
  47. data/vendor/crates/spikard-bindings-shared/src/validation_helpers.rs +0 -369
  48. data/vendor/crates/spikard-bindings-shared/tests/config_extractor_behavior.rs +0 -192
  49. data/vendor/crates/spikard-bindings-shared/tests/error_response_edge_cases.rs +0 -383
  50. data/vendor/crates/spikard-bindings-shared/tests/full_coverage.rs +0 -459
  51. data/vendor/crates/spikard-bindings-shared/tests/handler_base_integration.rs +0 -280
  52. data/vendor/crates/spikard-bindings-shared/tests/integration_tests.rs +0 -669
  53. data/vendor/crates/spikard-core/Cargo.toml +0 -55
  54. data/vendor/crates/spikard-core/src/bindings/mod.rs +0 -3
  55. data/vendor/crates/spikard-core/src/bindings/response.rs +0 -130
  56. data/vendor/crates/spikard-core/src/debug.rs +0 -127
  57. data/vendor/crates/spikard-core/src/di/container.rs +0 -711
  58. data/vendor/crates/spikard-core/src/di/dependency.rs +0 -273
  59. data/vendor/crates/spikard-core/src/di/error.rs +0 -118
  60. data/vendor/crates/spikard-core/src/di/factory.rs +0 -548
  61. data/vendor/crates/spikard-core/src/di/graph.rs +0 -507
  62. data/vendor/crates/spikard-core/src/di/mod.rs +0 -192
  63. data/vendor/crates/spikard-core/src/di/resolved.rs +0 -428
  64. data/vendor/crates/spikard-core/src/di/value.rs +0 -282
  65. data/vendor/crates/spikard-core/src/errors.rs +0 -72
  66. data/vendor/crates/spikard-core/src/http.rs +0 -492
  67. data/vendor/crates/spikard-core/src/lib.rs +0 -29
  68. data/vendor/crates/spikard-core/src/lifecycle.rs +0 -1273
  69. data/vendor/crates/spikard-core/src/metadata.rs +0 -378
  70. data/vendor/crates/spikard-core/src/parameters.rs +0 -2546
  71. data/vendor/crates/spikard-core/src/problem.rs +0 -358
  72. data/vendor/crates/spikard-core/src/request_data.rs +0 -1146
  73. data/vendor/crates/spikard-core/src/router.rs +0 -530
  74. data/vendor/crates/spikard-core/src/schema_registry.rs +0 -197
  75. data/vendor/crates/spikard-core/src/type_hints.rs +0 -311
  76. data/vendor/crates/spikard-core/src/validation/error_mapper.rs +0 -710
  77. data/vendor/crates/spikard-core/src/validation/mod.rs +0 -470
  78. data/vendor/crates/spikard-core/tests/bindings_response_tests.rs +0 -136
  79. data/vendor/crates/spikard-core/tests/di_dependency_defaults.rs +0 -37
  80. data/vendor/crates/spikard-core/tests/error_mapper.rs +0 -761
  81. data/vendor/crates/spikard-core/tests/parameters_edge_cases.rs +0 -106
  82. data/vendor/crates/spikard-core/tests/parameters_full.rs +0 -701
  83. data/vendor/crates/spikard-core/tests/parameters_schema_and_formats.rs +0 -301
  84. data/vendor/crates/spikard-core/tests/request_data_roundtrip.rs +0 -67
  85. data/vendor/crates/spikard-core/tests/validation_coverage.rs +0 -250
  86. data/vendor/crates/spikard-core/tests/validation_error_paths.rs +0 -45
  87. data/vendor/crates/spikard-http/Cargo.toml +0 -82
  88. data/vendor/crates/spikard-http/examples/sse-notifications.rs +0 -148
  89. data/vendor/crates/spikard-http/examples/websocket-chat.rs +0 -92
  90. data/vendor/crates/spikard-http/src/auth.rs +0 -301
  91. data/vendor/crates/spikard-http/src/background.rs +0 -1859
  92. data/vendor/crates/spikard-http/src/bindings/mod.rs +0 -3
  93. data/vendor/crates/spikard-http/src/bindings/response.rs +0 -1
  94. data/vendor/crates/spikard-http/src/body_metadata.rs +0 -8
  95. data/vendor/crates/spikard-http/src/cors.rs +0 -1026
  96. data/vendor/crates/spikard-http/src/debug.rs +0 -128
  97. data/vendor/crates/spikard-http/src/di_handler.rs +0 -1672
  98. data/vendor/crates/spikard-http/src/grpc/framing.rs +0 -653
  99. data/vendor/crates/spikard-http/src/grpc/handler.rs +0 -1211
  100. data/vendor/crates/spikard-http/src/grpc/mod.rs +0 -556
  101. data/vendor/crates/spikard-http/src/grpc/service.rs +0 -706
  102. data/vendor/crates/spikard-http/src/grpc/streaming.rs +0 -319
  103. data/vendor/crates/spikard-http/src/handler_response.rs +0 -901
  104. data/vendor/crates/spikard-http/src/handler_trait.rs +0 -1015
  105. data/vendor/crates/spikard-http/src/handler_trait_tests.rs +0 -290
  106. data/vendor/crates/spikard-http/src/jsonrpc/http_handler.rs +0 -502
  107. data/vendor/crates/spikard-http/src/jsonrpc/method_registry.rs +0 -648
  108. data/vendor/crates/spikard-http/src/jsonrpc/mod.rs +0 -60
  109. data/vendor/crates/spikard-http/src/jsonrpc/openrpc.rs +0 -325
  110. data/vendor/crates/spikard-http/src/jsonrpc/protocol.rs +0 -1207
  111. data/vendor/crates/spikard-http/src/jsonrpc/router.rs +0 -2262
  112. data/vendor/crates/spikard-http/src/lib.rs +0 -566
  113. data/vendor/crates/spikard-http/src/lifecycle/adapter.rs +0 -230
  114. data/vendor/crates/spikard-http/src/lifecycle.rs +0 -1193
  115. data/vendor/crates/spikard-http/src/middleware/mod.rs +0 -560
  116. data/vendor/crates/spikard-http/src/middleware/multipart.rs +0 -912
  117. data/vendor/crates/spikard-http/src/middleware/urlencoded.rs +0 -513
  118. data/vendor/crates/spikard-http/src/middleware/validation.rs +0 -768
  119. data/vendor/crates/spikard-http/src/openapi/mod.rs +0 -309
  120. data/vendor/crates/spikard-http/src/openapi/parameter_extraction.rs +0 -535
  121. data/vendor/crates/spikard-http/src/openapi/schema_conversion.rs +0 -1363
  122. data/vendor/crates/spikard-http/src/openapi/spec_generation.rs +0 -667
  123. data/vendor/crates/spikard-http/src/query_parser.rs +0 -793
  124. data/vendor/crates/spikard-http/src/response.rs +0 -720
  125. data/vendor/crates/spikard-http/src/server/fast_router.rs +0 -186
  126. data/vendor/crates/spikard-http/src/server/grpc_routing.rs +0 -1243
  127. data/vendor/crates/spikard-http/src/server/handler.rs +0 -1661
  128. data/vendor/crates/spikard-http/src/server/lifecycle_execution.rs +0 -253
  129. data/vendor/crates/spikard-http/src/server/mod.rs +0 -1717
  130. data/vendor/crates/spikard-http/src/server/request_extraction.rs +0 -871
  131. data/vendor/crates/spikard-http/src/server/routing_factory.rs +0 -618
  132. data/vendor/crates/spikard-http/src/sse.rs +0 -1409
  133. data/vendor/crates/spikard-http/src/testing/form.rs +0 -52
  134. data/vendor/crates/spikard-http/src/testing/multipart.rs +0 -64
  135. data/vendor/crates/spikard-http/src/testing/test_client.rs +0 -825
  136. data/vendor/crates/spikard-http/src/testing.rs +0 -617
  137. data/vendor/crates/spikard-http/src/websocket.rs +0 -1477
  138. data/vendor/crates/spikard-http/tests/auth_integration.rs +0 -645
  139. data/vendor/crates/spikard-http/tests/background_behavior.rs +0 -832
  140. data/vendor/crates/spikard-http/tests/common/grpc_helpers.rs +0 -1012
  141. data/vendor/crates/spikard-http/tests/common/handlers.rs +0 -309
  142. data/vendor/crates/spikard-http/tests/common/mod.rs +0 -33
  143. data/vendor/crates/spikard-http/tests/common/test_builders.rs +0 -628
  144. data/vendor/crates/spikard-http/tests/di_handler_error_responses.rs +0 -162
  145. data/vendor/crates/spikard-http/tests/di_integration.rs +0 -192
  146. data/vendor/crates/spikard-http/tests/doc_snippets.rs +0 -5
  147. data/vendor/crates/spikard-http/tests/grpc_bidirectional_streaming.rs +0 -430
  148. data/vendor/crates/spikard-http/tests/grpc_client_streaming.rs +0 -738
  149. data/vendor/crates/spikard-http/tests/grpc_error_handling_test.rs +0 -652
  150. data/vendor/crates/spikard-http/tests/grpc_integration_test.rs +0 -334
  151. data/vendor/crates/spikard-http/tests/grpc_metadata_test.rs +0 -532
  152. data/vendor/crates/spikard-http/tests/grpc_server_integration.rs +0 -495
  153. data/vendor/crates/spikard-http/tests/grpc_server_streaming.rs +0 -975
  154. data/vendor/crates/spikard-http/tests/lifecycle_execution.rs +0 -1093
  155. data/vendor/crates/spikard-http/tests/middleware_stack_integration.rs +0 -389
  156. data/vendor/crates/spikard-http/tests/multipart_behavior.rs +0 -656
  157. data/vendor/crates/spikard-http/tests/request_extraction_full.rs +0 -513
  158. data/vendor/crates/spikard-http/tests/server_auth_middleware_behavior.rs +0 -328
  159. data/vendor/crates/spikard-http/tests/server_config_builder.rs +0 -335
  160. data/vendor/crates/spikard-http/tests/server_configured_router_behavior.rs +0 -374
  161. data/vendor/crates/spikard-http/tests/server_cors_preflight.rs +0 -83
  162. data/vendor/crates/spikard-http/tests/server_handler_wrappers.rs +0 -464
  163. data/vendor/crates/spikard-http/tests/server_method_router_additional_behavior.rs +0 -286
  164. data/vendor/crates/spikard-http/tests/server_method_router_coverage.rs +0 -118
  165. data/vendor/crates/spikard-http/tests/server_middleware_behavior.rs +0 -99
  166. data/vendor/crates/spikard-http/tests/server_middleware_branches.rs +0 -204
  167. data/vendor/crates/spikard-http/tests/server_openapi_jsonrpc_static.rs +0 -427
  168. data/vendor/crates/spikard-http/tests/server_router_behavior.rs +0 -121
  169. data/vendor/crates/spikard-http/tests/sse_behavior.rs +0 -620
  170. data/vendor/crates/spikard-http/tests/sse_full_behavior.rs +0 -584
  171. data/vendor/crates/spikard-http/tests/sse_handler_behavior.rs +0 -130
  172. data/vendor/crates/spikard-http/tests/test_client_requests.rs +0 -167
  173. data/vendor/crates/spikard-http/tests/testing_helpers.rs +0 -87
  174. data/vendor/crates/spikard-http/tests/testing_module_coverage.rs +0 -155
  175. data/vendor/crates/spikard-http/tests/urlencoded_content_type.rs +0 -82
  176. data/vendor/crates/spikard-http/tests/websocket_behavior.rs +0 -663
  177. data/vendor/crates/spikard-http/tests/websocket_full_behavior.rs +0 -440
  178. data/vendor/crates/spikard-http/tests/websocket_integration.rs +0 -150
  179. data/vendor/crates/spikard-rb/Cargo.toml +0 -63
  180. data/vendor/crates/spikard-rb/build.rs +0 -200
  181. data/vendor/crates/spikard-rb/src/background.rs +0 -63
  182. data/vendor/crates/spikard-rb/src/config/mod.rs +0 -5
  183. data/vendor/crates/spikard-rb/src/config/server_config.rs +0 -401
  184. data/vendor/crates/spikard-rb/src/conversion.rs +0 -688
  185. data/vendor/crates/spikard-rb/src/di/builder.rs +0 -100
  186. data/vendor/crates/spikard-rb/src/di/mod.rs +0 -410
  187. data/vendor/crates/spikard-rb/src/grpc/handler.rs +0 -875
  188. data/vendor/crates/spikard-rb/src/grpc/mod.rs +0 -13
  189. data/vendor/crates/spikard-rb/src/gvl.rs +0 -80
  190. data/vendor/crates/spikard-rb/src/handler.rs +0 -699
  191. data/vendor/crates/spikard-rb/src/integration/mod.rs +0 -3
  192. data/vendor/crates/spikard-rb/src/lib.rs +0 -2268
  193. data/vendor/crates/spikard-rb/src/lifecycle.rs +0 -334
  194. data/vendor/crates/spikard-rb/src/metadata/mod.rs +0 -5
  195. data/vendor/crates/spikard-rb/src/metadata/route_extraction.rs +0 -507
  196. data/vendor/crates/spikard-rb/src/request.rs +0 -439
  197. data/vendor/crates/spikard-rb/src/runtime/mod.rs +0 -5
  198. data/vendor/crates/spikard-rb/src/runtime/server_runner.rs +0 -368
  199. data/vendor/crates/spikard-rb/src/server.rs +0 -304
  200. data/vendor/crates/spikard-rb/src/sse.rs +0 -231
  201. data/vendor/crates/spikard-rb/src/testing/client.rs +0 -698
  202. data/vendor/crates/spikard-rb/src/testing/mod.rs +0 -7
  203. data/vendor/crates/spikard-rb/src/testing/sse.rs +0 -108
  204. data/vendor/crates/spikard-rb/src/testing/websocket.rs +0 -573
  205. data/vendor/crates/spikard-rb/src/websocket.rs +0 -521
  206. data/vendor/crates/spikard-rb-macros/Cargo.toml +0 -20
  207. data/vendor/crates/spikard-rb-macros/src/lib.rs +0 -51
@@ -0,0 +1,86 @@
1
+ # This file is auto-generated by alef — DO NOT EDIT.
2
+ # alef:hash:5edec17b527ff92ce6cce13114f42972a434edf40e174a174cbb292c5f29567f
3
+ # To regenerate: alef generate
4
+ # To verify freshness: alef verify --exit-code
5
+ # Issues & docs: https://github.com/kreuzberg-dev/alef
6
+ # frozen_string_literal: true
7
+
8
+ require 'json'
9
+ require 'sorbet-runtime'
10
+ require 'spikard_rb'
11
+ module Spikard
12
+ # Security scheme types
13
+ module SecuritySchemeInfo
14
+ extend T::Helpers
15
+ extend T::Sig
16
+
17
+ interface!
18
+
19
+ # Dispatch from a Hash to the appropriate variant constructor.
20
+ # @param hash [Hash] with discriminator field and variant-specific fields
21
+ # @return [variant_class] an instance of the appropriate variant
22
+ sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T.untyped) }
23
+ def self.from_hash(hash)
24
+ discriminator = hash[:type] || hash['type']
25
+ case discriminator
26
+ when 'http' then SecuritySchemeInfoHttp.from_hash(hash)
27
+ when 'apiKey' then SecuritySchemeInfoApiKey.from_hash(hash)
28
+ else raise "Unknown discriminator: #{discriminator}"
29
+ end
30
+ end
31
+ end
32
+
33
+ # Variant SecuritySchemeInfoHttp of the SecuritySchemeInfo sum type.
34
+ SecuritySchemeInfoHttp = Data.define(:scheme, :bearer_format) do
35
+ include SecuritySchemeInfo
36
+ extend T::Sig
37
+
38
+ # @return [String]
39
+ sig { returns(String) }
40
+ def scheme = super # rubocop:disable Lint/UselessMethodDefinition
41
+
42
+ # @return [T.nilable(String)]
43
+ sig { returns(T.nilable(String)) }
44
+ def bearer_format = super # rubocop:disable Lint/UselessMethodDefinition
45
+
46
+ sig { returns(T::Boolean) }
47
+ def http? = true
48
+
49
+ sig { returns(T::Boolean) }
50
+ def api_key? = false
51
+
52
+ # @param hash [Hash] deserialized from the native extension
53
+ # @return [self]
54
+ sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T.attached_class) }
55
+ def self.from_hash(hash)
56
+ new(scheme: hash[:scheme] || hash['scheme'], bearer_format: hash[:bearer_format] || hash['bearer_format'])
57
+ end
58
+ end
59
+
60
+ # Variant SecuritySchemeInfoApiKey of the SecuritySchemeInfo sum type.
61
+ SecuritySchemeInfoApiKey = Data.define(:location, :name) do
62
+ include SecuritySchemeInfo
63
+ extend T::Sig
64
+
65
+ # @return [String]
66
+ sig { returns(String) }
67
+ def location = super # rubocop:disable Lint/UselessMethodDefinition
68
+
69
+ # @return [String]
70
+ sig { returns(String) }
71
+ def name = super # rubocop:disable Lint/UselessMethodDefinition
72
+
73
+ sig { returns(T::Boolean) }
74
+ def http? = false
75
+
76
+ sig { returns(T::Boolean) }
77
+ def api_key? = true
78
+
79
+ # @param hash [Hash] deserialized from the native extension
80
+ # @return [self]
81
+ sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T.attached_class) }
82
+ def self.from_hash(hash)
83
+ new(location: hash[:location] || hash['location'], name: hash[:name] || hash['name'])
84
+ end
85
+ end
86
+ end
@@ -1,5 +1,10 @@
1
+ # This file is auto-generated by alef — DO NOT EDIT.
2
+ # alef:hash:a37eb853a8ae098db1da14ad188f43587f0c70078b4f75ce80f07f607804871f
3
+ # To regenerate: alef generate
4
+ # To verify freshness: alef verify --exit-code
5
+ # Issues & docs: https://github.com/kreuzberg-dev/alef
1
6
  # frozen_string_literal: true
2
7
 
3
8
  module Spikard
4
- VERSION = '0.13.0'
9
+ VERSION = '0.15.3'
5
10
  end
data/lib/spikard.rb CHANGED
@@ -1,57 +1,13 @@
1
+ # This file is auto-generated by alef — DO NOT EDIT.
2
+ # alef:hash:5c62d312ae2c1f0cd7d066ce8b2986e3e074ad0372813b665ae9cd9525b62162
3
+ # To regenerate: alef generate
4
+ # To verify freshness: alef verify --exit-code
5
+ # Issues & docs: https://github.com/kreuzberg-dev/alef
1
6
  # frozen_string_literal: true
2
7
 
3
- # Main Ruby namespace for the Spikard bindings.
4
- module Spikard
5
- end
6
-
7
- begin
8
- require 'json'
9
- rescue LoadError
10
- # Fallback to pure-Ruby implementation when native JSON extension is unavailable
11
- require 'json/pure'
12
- end
13
8
  require_relative 'spikard/version'
14
- require_relative 'spikard/config'
15
- require_relative 'spikard/response'
16
- require_relative 'spikard/background'
17
- require_relative 'spikard/schema'
18
- require_relative 'spikard/websocket'
19
- require_relative 'spikard/sse'
20
- require_relative 'spikard/grpc'
21
- require_relative 'spikard/upload_file'
22
- require_relative 'spikard/converters'
23
- require_relative 'spikard/provide'
24
- require_relative 'spikard/handler_wrapper'
25
- require_relative 'spikard/app'
26
- require_relative 'spikard/testing'
27
-
28
- begin
29
- require 'spikard_rb'
30
- rescue LoadError => e
31
- raise LoadError, <<~MSG, e.backtrace
32
- Failed to load the Spikard native extension (spikard_rb). Run `bundle exec rake ext:build` to compile it before executing tests.
33
- Original error: #{e.message}
34
- MSG
35
- end
9
+ require_relative 'spikard/native'
36
10
 
37
- at_exit do
38
- if defined?(Spikard::Native) &&
39
- Spikard::Native.respond_to?(:__shutdown_websocket_workers__, true)
40
- Spikard::Native.__shutdown_websocket_workers__
41
- end
42
- end
43
-
44
- if defined?(Spikard::Native::TestClient) && !Spikard::Native::TestClient.method_defined?(:__spikard_native_request,
45
- false)
46
- Spikard::Native::TestClient.class_eval do
47
- alias_method :__spikard_native_request, :request
48
-
49
- def request(method, path, options = nil)
50
- __spikard_native_request(method, path, options)
51
- end
52
- end
11
+ module Spikard
12
+ # Re-export all types and functions from native extension
53
13
  end
54
-
55
- # Convenience aliases and methods
56
- Spikard::TestClient = Spikard::Testing::TestClient
57
- Spikard.extend Spikard::HandlerWrapper
data/lib/spikard_rb.so ADDED
Binary file
data/sig/types.rbs ADDED
@@ -0,0 +1,427 @@
1
+ # This file is auto-generated by alef — DO NOT EDIT.
2
+ # alef:hash:dbf8bf90f99d68da22b871df1d242fee8be43b6b6779f41c132936c3df22a1fd
3
+ # To regenerate: alef generate
4
+ # To verify freshness: alef verify --exit-code
5
+ # Issues & docs: https://github.com/kreuzberg-dev/alef
6
+
7
+ module Spikard
8
+
9
+ VERSION: String
10
+
11
+ type json_value = Hash[String, untyped] | Array[untyped] | String | Integer | Float | bool | nil
12
+ type JsonValue = json_value
13
+
14
+ class UploadFile
15
+ attr_reader filename: String
16
+ attr_reader content_type: String
17
+ attr_reader size: Integer
18
+ attr_reader content: String
19
+ attr_reader content_encoding: String
20
+
21
+ def initialize: (filename: String, ?content_type: String, ?size: Integer, content: String, ?content_encoding: String) -> void
22
+ def as_bytes: () -> String
23
+ def read_to_string: () -> String
24
+ def content_type_or_default: () -> String
25
+ end
26
+
27
+ class ResponseSnapshot
28
+ attr_reader status: Integer
29
+ attr_reader headers: Hash[String, String]
30
+ attr_reader body: String
31
+
32
+ def initialize: (status: Integer, headers: Hash[String, String], body: String) -> void
33
+ def text: () -> String
34
+ def header: (String name) -> String?
35
+ end
36
+
37
+ class CorsConfig
38
+ attr_accessor allowed_origins: Array[String]?
39
+ attr_accessor allowed_methods: Array[String]?
40
+ attr_accessor allowed_headers: Array[String]?
41
+ attr_accessor expose_headers: Array[String]?
42
+ attr_accessor max_age: Integer?
43
+ attr_accessor allow_credentials: bool?
44
+
45
+ def initialize: (?allowed_origins: Array[String], ?allowed_methods: Array[String], ?allowed_headers: Array[String], ?expose_headers: Array[String], ?max_age: Integer, ?allow_credentials: bool) -> void
46
+ def allowed_methods_joined: () -> String
47
+ def allowed_headers_joined: () -> String
48
+ def is_origin_allowed: (String origin) -> bool
49
+ def is_method_allowed: (String method) -> bool
50
+ def are_headers_allowed: (Array[String] requested) -> bool
51
+ def self.default: () -> CorsConfig
52
+ end
53
+
54
+ class CompressionConfig
55
+ attr_accessor gzip: bool?
56
+ attr_accessor brotli: bool?
57
+ attr_accessor min_size: Integer?
58
+ attr_accessor quality: Integer?
59
+
60
+ def initialize: (?gzip: bool, ?brotli: bool, ?min_size: Integer, ?quality: Integer) -> void
61
+ def self.default: () -> CompressionConfig
62
+ end
63
+
64
+ class RateLimitConfig
65
+ attr_accessor per_second: Integer?
66
+ attr_accessor burst: Integer?
67
+ attr_accessor ip_based: bool?
68
+
69
+ def initialize: (?per_second: Integer, ?burst: Integer, ?ip_based: bool) -> void
70
+ def self.default: () -> RateLimitConfig
71
+ end
72
+
73
+ class JsonRpcMethodInfo
74
+ attr_reader method_name: String
75
+ attr_reader description: String
76
+ attr_reader params_schema: JsonValue
77
+ attr_reader result_schema: JsonValue
78
+ attr_reader deprecated: bool
79
+ attr_reader tags: Array[String]
80
+
81
+ def initialize: (method_name: String, ?description: String, ?params_schema: JsonValue, ?result_schema: JsonValue, deprecated: bool, tags: Array[String]) -> void
82
+ end
83
+
84
+ class ProblemDetails
85
+ attr_reader type_uri: String
86
+ attr_reader title: String
87
+ attr_reader status: Integer
88
+ attr_reader detail: String
89
+ attr_reader instance: String
90
+ attr_reader extensions: Hash[String, JsonValue]
91
+
92
+ def initialize: (type_uri: String, title: String, status: Integer, ?detail: String, ?instance: String, extensions: Hash[String, JsonValue]) -> void
93
+ def with_detail: (String detail) -> ProblemDetails
94
+ def with_instance: (String instance) -> ProblemDetails
95
+ def to_json: () -> String
96
+ def to_json_pretty: () -> String
97
+ def self.not_found: (String detail) -> ProblemDetails
98
+ def self.method_not_allowed: (String detail) -> ProblemDetails
99
+ def self.internal_server_error: (String detail) -> ProblemDetails
100
+ def self.bad_request: (String detail) -> ProblemDetails
101
+ end
102
+
103
+ class GraphQLRouteConfig
104
+ def path: (String path) -> GraphQLRouteConfig
105
+ def method: (String method) -> GraphQLRouteConfig
106
+ def enable_playground: (bool enable) -> GraphQLRouteConfig
107
+ def description: (String description) -> GraphQLRouteConfig
108
+ def get_path: () -> String
109
+ def get_method: () -> String
110
+ def is_playground_enabled: () -> bool
111
+ def get_description: () -> String?
112
+ def self.default: () -> GraphQLRouteConfig
113
+ end
114
+
115
+ class SchemaConfig
116
+ attr_accessor introspection_enabled: bool?
117
+ attr_accessor complexity_limit: Integer?
118
+ attr_accessor depth_limit: Integer?
119
+
120
+ def initialize: (?introspection_enabled: bool, ?complexity_limit: Integer, ?depth_limit: Integer) -> void
121
+ def self.default: () -> SchemaConfig
122
+ end
123
+
124
+ class QueryOnlyConfig
125
+ attr_accessor introspection_enabled: bool?
126
+ attr_accessor complexity_limit: Integer?
127
+ attr_accessor depth_limit: Integer?
128
+
129
+ def initialize: (?introspection_enabled: bool, ?complexity_limit: Integer, ?depth_limit: Integer) -> void
130
+ def self.default: () -> QueryOnlyConfig
131
+ end
132
+
133
+ class QueryMutationConfig
134
+ attr_accessor introspection_enabled: bool?
135
+ attr_accessor complexity_limit: Integer?
136
+ attr_accessor depth_limit: Integer?
137
+
138
+ def initialize: (?introspection_enabled: bool, ?complexity_limit: Integer, ?depth_limit: Integer) -> void
139
+ def self.default: () -> QueryMutationConfig
140
+ end
141
+
142
+ class FullSchemaConfig
143
+ attr_accessor introspection_enabled: bool?
144
+ attr_accessor complexity_limit: Integer?
145
+ attr_accessor depth_limit: Integer?
146
+
147
+ def initialize: (?introspection_enabled: bool, ?complexity_limit: Integer, ?depth_limit: Integer) -> void
148
+ def self.default: () -> FullSchemaConfig
149
+ end
150
+
151
+ class AsyncApiConfig
152
+ attr_accessor enabled: bool?
153
+ attr_accessor spec: JsonValue?
154
+
155
+ def initialize: (?enabled: bool, ?spec: JsonValue) -> void
156
+ end
157
+
158
+ class ParsedChannel
159
+ attr_reader name: String
160
+ attr_reader address: String
161
+ attr_reader messages: Array[String]
162
+ attr_reader bindings: JsonValue
163
+
164
+ def initialize: (name: String, address: String, messages: Array[String], ?bindings: JsonValue) -> void
165
+ end
166
+
167
+ class ParsedOperation
168
+ attr_reader name: String
169
+ attr_reader action: String
170
+ attr_reader channel: String
171
+
172
+ def initialize: (name: String, action: String, channel: String) -> void
173
+ end
174
+
175
+ class ParsedMessage
176
+ attr_reader name: String
177
+ attr_reader schema: JsonValue
178
+
179
+ def initialize: (name: String, ?schema: JsonValue) -> void
180
+ end
181
+
182
+ class ParseResult
183
+ attr_reader spec_version: String
184
+ attr_reader title: String
185
+ attr_reader api_version: String
186
+ attr_reader channels: Array[ParsedChannel]
187
+ attr_reader operations: Array[ParsedOperation]
188
+ attr_reader messages: Array[ParsedMessage]
189
+
190
+ def initialize: (spec_version: String, title: String, api_version: String, channels: Array[ParsedChannel], operations: Array[ParsedOperation], messages: Array[ParsedMessage]) -> void
191
+ end
192
+
193
+ class ParseRequest
194
+ attr_reader spec: JsonValue
195
+
196
+ def initialize: (spec: JsonValue) -> void
197
+ end
198
+
199
+ class ValidationResponse
200
+ attr_reader valid: bool
201
+ attr_reader errors: Array[String]
202
+
203
+ def initialize: (valid: bool, errors: Array[String]) -> void
204
+ end
205
+
206
+ class ValidateRequest
207
+ attr_reader spec: JsonValue
208
+ attr_reader channel: String
209
+ attr_reader message: String
210
+ attr_reader payload: JsonValue
211
+
212
+ def initialize: (spec: JsonValue, channel: String, message: String, payload: JsonValue) -> void
213
+ end
214
+
215
+ class BackgroundTaskConfig
216
+ attr_accessor max_queue_size: Integer?
217
+ attr_accessor max_concurrent_tasks: Integer?
218
+ attr_accessor drain_timeout_secs: Integer?
219
+
220
+ def initialize: (?max_queue_size: Integer, ?max_concurrent_tasks: Integer, ?drain_timeout_secs: Integer) -> void
221
+ def self.default: () -> BackgroundTaskConfig
222
+ end
223
+
224
+ class BackgroundJobMetadata
225
+ attr_accessor name: String?
226
+ attr_accessor request_id: String?
227
+
228
+ def initialize: (?name: String, ?request_id: String) -> void
229
+ def self.default: () -> BackgroundJobMetadata
230
+ end
231
+
232
+ class GrpcConfig
233
+ attr_accessor enabled: bool?
234
+ attr_accessor max_message_size: Integer?
235
+ attr_accessor enable_compression: bool?
236
+ attr_accessor request_timeout: Integer?
237
+ attr_accessor max_concurrent_streams: Integer?
238
+ attr_accessor enable_keepalive: bool?
239
+ attr_accessor keepalive_interval: Integer?
240
+ attr_accessor keepalive_timeout: Integer?
241
+ attr_accessor max_stream_response_bytes: Integer?
242
+
243
+ def initialize: (?enabled: bool, ?max_message_size: Integer, ?enable_compression: bool, ?request_timeout: Integer, ?max_concurrent_streams: Integer, ?enable_keepalive: bool, ?keepalive_interval: Integer, ?keepalive_timeout: Integer, ?max_stream_response_bytes: Integer) -> void
244
+ def self.default: () -> GrpcConfig
245
+ end
246
+
247
+ class JsonRpcConfig
248
+ attr_accessor enabled: bool?
249
+ attr_accessor endpoint_path: String?
250
+ attr_accessor enable_batch: bool?
251
+ attr_accessor max_batch_size: Integer?
252
+
253
+ def initialize: (?enabled: bool, ?endpoint_path: String, ?enable_batch: bool, ?max_batch_size: Integer) -> void
254
+ def self.default: () -> JsonRpcConfig
255
+ end
256
+
257
+ class OpenApiConfig
258
+ attr_accessor enabled: bool?
259
+ attr_accessor title: String?
260
+ attr_accessor version: String?
261
+ attr_accessor description: String?
262
+ attr_accessor swagger_ui_path: String?
263
+ attr_accessor redoc_path: String?
264
+ attr_accessor openapi_json_path: String?
265
+ attr_accessor contact: ContactInfo?
266
+ attr_accessor license: LicenseInfo?
267
+ attr_accessor servers: Array[ServerInfo]?
268
+ attr_accessor security_schemes: Hash[String, SecuritySchemeInfo]?
269
+
270
+ def initialize: (?enabled: bool, ?title: String, ?version: String, ?description: String, ?swagger_ui_path: String, ?redoc_path: String, ?openapi_json_path: String, ?contact: ContactInfo, ?license: LicenseInfo, ?servers: Array[ServerInfo], ?security_schemes: Hash[String, SecuritySchemeInfo]) -> void
271
+ def self.default: () -> OpenApiConfig
272
+ end
273
+
274
+ class ContactInfo
275
+ attr_reader name: String
276
+ attr_reader email: String
277
+ attr_reader url: String
278
+
279
+ def initialize: (?name: String, ?email: String, ?url: String) -> void
280
+ end
281
+
282
+ class LicenseInfo
283
+ attr_reader name: String
284
+ attr_reader url: String
285
+
286
+ def initialize: (name: String, ?url: String) -> void
287
+ end
288
+
289
+ class ServerInfo
290
+ attr_reader url: String
291
+ attr_reader description: String
292
+
293
+ def initialize: (url: String, ?description: String) -> void
294
+ end
295
+
296
+ class Response
297
+ attr_accessor content: JsonValue?
298
+ attr_accessor status_code: Integer?
299
+ attr_accessor headers: Hash[String, String]?
300
+
301
+ def initialize: (?content: JsonValue, ?status_code: Integer, ?headers: Hash[String, String]) -> void
302
+ def set_header: (String key, String value) -> void
303
+ def set_cookie: (String key, String value, bool secure, bool http_only, ?Integer max_age, ?String domain, ?String path, ?String same_site) -> void
304
+ def self.default: () -> Response
305
+ end
306
+
307
+ class SseEvent
308
+ attr_reader event_type: String
309
+ attr_reader data: JsonValue
310
+ attr_reader id: String
311
+ attr_reader retry: Integer
312
+
313
+ def initialize: (?event_type: String, data: JsonValue, ?id: String, ?retry: Integer) -> void
314
+ def with_id: (String id) -> SseEvent
315
+ def with_retry: (Integer retry_ms) -> SseEvent
316
+ end
317
+
318
+ class TestingSseEvent
319
+ attr_reader data: String
320
+
321
+ def initialize: (data: String) -> void
322
+ end
323
+
324
+ class JwtConfig
325
+ attr_reader secret: String
326
+ attr_reader algorithm: String
327
+ attr_reader audience: Array[String]
328
+ attr_reader issuer: String
329
+ attr_reader leeway: Integer
330
+
331
+ def initialize: (secret: String, algorithm: String, ?audience: Array[String], ?issuer: String, leeway: Integer) -> void
332
+ end
333
+
334
+ class ApiKeyConfig
335
+ attr_reader keys: Array[String]
336
+ attr_reader header_name: String
337
+
338
+ def initialize: (keys: Array[String], header_name: String) -> void
339
+ end
340
+
341
+ class StaticFilesConfig
342
+ attr_reader directory: String
343
+ attr_reader route_prefix: String
344
+ attr_reader index_file: bool
345
+ attr_reader cache_control: String
346
+
347
+ def initialize: (directory: String, route_prefix: String, index_file: bool, ?cache_control: String) -> void
348
+ end
349
+
350
+ class ServerConfig
351
+ attr_accessor host: String?
352
+ attr_accessor port: Integer?
353
+ attr_accessor workers: Integer?
354
+ attr_accessor enable_request_id: bool?
355
+ attr_accessor max_body_size: Integer?
356
+ attr_accessor request_timeout: Integer?
357
+ attr_accessor compression: CompressionConfig?
358
+ attr_accessor rate_limit: RateLimitConfig?
359
+ attr_accessor jwt_auth: JwtConfig?
360
+ attr_accessor api_key_auth: ApiKeyConfig?
361
+ attr_accessor static_files: Array[StaticFilesConfig]?
362
+ attr_accessor graceful_shutdown: bool?
363
+ attr_accessor shutdown_timeout: Integer?
364
+ attr_accessor asyncapi: AsyncApiConfig?
365
+ attr_accessor openapi: OpenApiConfig?
366
+ attr_accessor jsonrpc: JsonRpcConfig?
367
+ attr_accessor grpc: GrpcConfig?
368
+ attr_accessor background_tasks: BackgroundTaskConfig?
369
+ attr_accessor enable_http_trace: bool?
370
+
371
+ def initialize: (?host: String, ?port: Integer, ?workers: Integer, ?enable_request_id: bool, ?max_body_size: Integer, ?request_timeout: Integer, ?compression: CompressionConfig, ?rate_limit: RateLimitConfig, ?jwt_auth: JwtConfig, ?api_key_auth: ApiKeyConfig, ?static_files: Array[StaticFilesConfig], ?graceful_shutdown: bool, ?shutdown_timeout: Integer, ?asyncapi: AsyncApiConfig, ?openapi: OpenApiConfig, ?jsonrpc: JsonRpcConfig, ?grpc: GrpcConfig, ?background_tasks: BackgroundTaskConfig, ?enable_http_trace: bool) -> void
372
+ def self.default: () -> ServerConfig
373
+ end
374
+
375
+ class GraphQLSubscriptionSnapshot
376
+ attr_reader operation_id: String
377
+ attr_reader acknowledged: bool
378
+ attr_reader event: JsonValue
379
+ attr_reader errors: Array[JsonValue]
380
+ attr_reader complete_received: bool
381
+
382
+ def initialize: (operation_id: String, acknowledged: bool, ?event: JsonValue, errors: Array[JsonValue], complete_received: bool) -> void
383
+ end
384
+
385
+ class TestClient
386
+ def get: (String path, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
387
+ def post: (String path, ?JsonValue json, ?Array[String] form_data, String multipart, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
388
+ def request_raw: (Method method, String path, String body, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
389
+ def put: (String path, ?JsonValue json, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
390
+ def patch: (String path, ?JsonValue json, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
391
+ def delete: (String path, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
392
+ def options: (String path, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
393
+ def head: (String path, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
394
+ def trace: (String path, ?Array[String] query_params, ?Array[String] headers) -> ResponseSnapshot
395
+ def graphql_at: (String endpoint, String query, ?JsonValue variables, ?String operation_name) -> ResponseSnapshot
396
+ def graphql: (String query, ?JsonValue variables, ?String operation_name) -> ResponseSnapshot
397
+ def graphql_with_status: (String query, ?JsonValue variables, ?String operation_name) -> String
398
+ def graphql_subscription_at: (String endpoint, String query, ?JsonValue variables, ?String operation_name) -> GraphQLSubscriptionSnapshot
399
+ def graphql_subscription: (String query, ?JsonValue variables, ?String operation_name) -> GraphQLSubscriptionSnapshot
400
+ end
401
+
402
+ class SnapshotError
403
+ end
404
+
405
+ class WebSocketMessage
406
+ end
407
+
408
+ class Method
409
+ type value = :get | :post | :put | :patch | :delete | :head | :options | :trace
410
+ end
411
+
412
+ class SecuritySchemeInfo
413
+ end
414
+
415
+ def self.schema_query_only: () -> QueryOnlyConfig
416
+
417
+ def self.schema_query_mutation: () -> QueryMutationConfig
418
+
419
+ def self.schema_full: () -> FullSchemaConfig
420
+
421
+ class GraphQLErrorInfo
422
+ def status_code: () -> Integer
423
+ def transient?: () -> bool
424
+ def error_type: () -> String
425
+ end
426
+
427
+ end