rage-rb 1.22.1 → 1.24.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 +42 -0
- data/CONTRIBUTING.md +240 -0
- data/README.md +2 -1
- data/lib/rage/all.rb +1 -0
- data/lib/rage/application.rb +1 -0
- data/lib/rage/cable/cable.rb +20 -15
- data/lib/rage/cable/channel.rb +2 -1
- data/lib/rage/configuration.rb +229 -27
- data/lib/rage/controller/api.rb +17 -33
- data/lib/rage/controller/renderers.rb +47 -0
- data/lib/rage/deferred/backends/disk.rb +19 -3
- data/lib/rage/deferred/deferred.rb +7 -0
- data/lib/rage/deferred/metadata.rb +9 -1
- data/lib/rage/deferred/queue.rb +5 -4
- data/lib/rage/deferred/scheduler.rb +25 -0
- data/lib/rage/deferred/task.rb +90 -9
- data/lib/rage/errors.rb +86 -0
- data/lib/rage/events/subscriber.rb +6 -1
- data/lib/rage/internal.rb +45 -0
- data/lib/rage/logger/logger.rb +1 -1
- data/lib/rage/middleware/fiber_wrapper.rb +1 -0
- data/lib/rage/openapi/builder.rb +1 -1
- data/lib/rage/openapi/converter.rb +48 -3
- data/lib/rage/openapi/nodes/method.rb +2 -1
- data/lib/rage/openapi/nodes/root.rb +2 -1
- data/lib/rage/openapi/openapi.rb +12 -1
- data/lib/rage/openapi/parser.rb +73 -2
- data/lib/rage/openapi/parsers/ext/alba.rb +35 -6
- data/lib/rage/openapi/parsers/request.rb +2 -2
- data/lib/rage/openapi/parsers/response.rb +2 -2
- data/lib/rage/openapi/parsers/yaml.rb +27 -5
- data/lib/rage/params_parser.rb +2 -2
- data/lib/rage/{cable → pubsub}/adapters/redis.rb +43 -23
- data/lib/rage/pubsub/pubsub.rb +25 -0
- data/lib/rage/rails.rb +16 -0
- data/lib/rage/router/README.md +1 -1
- data/lib/rage/router/dsl.rb +72 -10
- data/lib/rage/sse/application.rb +31 -2
- data/lib/rage/sse/sse.rb +96 -0
- data/lib/rage/sse/stream.rb +78 -0
- data/lib/rage/telemetry/spans/broadcast_sse_stream.rb +50 -0
- data/lib/rage/telemetry/spans/process_sse_stream.rb +1 -0
- data/lib/rage/telemetry/telemetry.rb +2 -1
- data/lib/rage/telemetry/tracer.rb +1 -0
- data/lib/rage/uploaded_file.rb +3 -7
- data/lib/rage/version.rb +1 -1
- data/lib/rage-rb.rb +8 -1
- metadata +9 -4
- data/lib/rage/cable/adapters/base.rb +0 -16
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# The **sse.stream.broadcast** span wraps the process of broadcasting a message to an unbounded SSE stream.
|
|
5
|
+
#
|
|
6
|
+
# This span is started when {Rage::SSE.broadcast Rage::SSE.broadcast} is called, and ends when the broadcast operation is complete.
|
|
7
|
+
# See {handle handle} for the list of arguments passed to handler methods.
|
|
8
|
+
#
|
|
9
|
+
# @see Rage::Telemetry::Handler Rage::Telemetry::Handler
|
|
10
|
+
#
|
|
11
|
+
class Rage::Telemetry::Spans::BroadcastSSEStream
|
|
12
|
+
class << self
|
|
13
|
+
# @private
|
|
14
|
+
def id
|
|
15
|
+
"sse.stream.broadcast"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @private
|
|
19
|
+
def span_parameters
|
|
20
|
+
%w[stream:]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @private
|
|
24
|
+
def handler_arguments
|
|
25
|
+
{
|
|
26
|
+
name: '"Rage::SSE.broadcast"',
|
|
27
|
+
stream: "stream"
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @!parse [ruby]
|
|
32
|
+
# # @param id ["sse.stream.broadcast"] ID of the span
|
|
33
|
+
# # @param name ["Rage::SSE.broadcast"] human-readable name of the operation
|
|
34
|
+
# # @param stream [Object] the identifier of the stream to which the message is being broadcasted
|
|
35
|
+
# # @yieldreturn [Rage::Telemetry::SpanResult]
|
|
36
|
+
# #
|
|
37
|
+
# # @example
|
|
38
|
+
# # class MyTelemetryHandler < Rage::Telemetry::Handler
|
|
39
|
+
# # handle "sse.stream.broadcast", with: :my_handler
|
|
40
|
+
# #
|
|
41
|
+
# # def my_handler(id:, name:, stream:)
|
|
42
|
+
# # yield
|
|
43
|
+
# # end
|
|
44
|
+
# # end
|
|
45
|
+
# # @note Rage automatically detects which parameters your handler method accepts and only passes those parameters.
|
|
46
|
+
# # You can omit any of the parameters described here.
|
|
47
|
+
# def handle(id:, name:, stream:)
|
|
48
|
+
# end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# This span starts when a connection is opened and ends when the stream is finished.
|
|
7
7
|
# See {handle handle} for the list of arguments passed to handler methods.
|
|
8
8
|
#
|
|
9
|
+
# @note This span is not used for unbounded SSE streams created via {Rage::SSE.stream Rage::SSE.stream}.
|
|
9
10
|
# @see Rage::Telemetry::Handler Rage::Telemetry::Handler
|
|
10
11
|
#
|
|
11
12
|
class Rage::Telemetry::Spans::ProcessSSEStream
|
|
@@ -70,7 +70,7 @@ module Rage::Telemetry
|
|
|
70
70
|
#
|
|
71
71
|
# | ID | Reference | Description |
|
|
72
72
|
# | --- | --- |
|
|
73
|
-
# | `core.fiber.dispatch` | {DispatchFiber} | Wraps the scheduling and processing of system-level fibers created by the framework to process requests
|
|
73
|
+
# | `core.fiber.dispatch` | {DispatchFiber} | Wraps the scheduling and processing of system-level fibers created by the framework to process requests, deferred tasks, or SSE streams |
|
|
74
74
|
# | `core.fiber.spawn` | {SpawnFiber} | Wraps the scheduling and processing of application-level fibers created via {Fiber.schedule} |
|
|
75
75
|
# | `core.fiber.await` | {AwaitFiber} | Wraps the processing of the {Fiber.await} calls |
|
|
76
76
|
# | `controller.action.process` | {ProcessControllerAction} | Wraps the processing of controller actions |
|
|
@@ -83,6 +83,7 @@ module Rage::Telemetry
|
|
|
83
83
|
# | `events.event.publish` | {PublishEvent} | Wraps the publishing of events via {Rage::Events Rage::Events} |
|
|
84
84
|
# | `events.subscriber.process` | {ProcessEventSubscriber} | Wraps the processing of events by subscribers |
|
|
85
85
|
# | `sse.stream.process` | {ProcessSSEStream} | Wraps the processing of an SSE stream |
|
|
86
|
+
# | `sse.stream.broadcast` | {BroadcastSSEStream} | Wraps the process of broadcasting a message to an unbounded SSE stream |
|
|
86
87
|
#
|
|
87
88
|
module Spans
|
|
88
89
|
end
|
data/lib/rage/uploaded_file.rb
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# of its interface is available directly for convenience.
|
|
8
8
|
#
|
|
9
9
|
# Rage will automatically unlink the files, so there is no need to clean them with a separate maintenance task.
|
|
10
|
+
#
|
|
10
11
|
class Rage::UploadedFile
|
|
11
12
|
# The basename of the file in the client.
|
|
12
13
|
attr_reader :original_filename
|
|
@@ -29,14 +30,9 @@ class Rage::UploadedFile
|
|
|
29
30
|
@file.read(length, buffer)
|
|
30
31
|
end
|
|
31
32
|
|
|
32
|
-
# Shortcut for `file.open`.
|
|
33
|
-
def open
|
|
34
|
-
@file.open
|
|
35
|
-
end
|
|
36
|
-
|
|
37
33
|
# Shortcut for `file.close`.
|
|
38
|
-
def close
|
|
39
|
-
@file.close
|
|
34
|
+
def close
|
|
35
|
+
@file.close
|
|
40
36
|
end
|
|
41
37
|
|
|
42
38
|
# Shortcut for `file.path`.
|
data/lib/rage/version.rb
CHANGED
data/lib/rage-rb.rb
CHANGED
|
@@ -40,6 +40,12 @@ module Rage
|
|
|
40
40
|
Rage::Events
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
# Shorthand to access {Rage::Errors Rage::Errors}.
|
|
44
|
+
# @return [Rage::Errors]
|
|
45
|
+
def self.errors
|
|
46
|
+
Rage::Errors
|
|
47
|
+
end
|
|
48
|
+
|
|
43
49
|
# Shorthand to access {Rage::SSE Rage::SSE}.
|
|
44
50
|
# @return [Rage::SSE]
|
|
45
51
|
def self.sse
|
|
@@ -191,10 +197,11 @@ module Rage
|
|
|
191
197
|
autoload :OpenAPI, "rage/openapi/openapi"
|
|
192
198
|
autoload :Deferred, "rage/deferred/deferred"
|
|
193
199
|
autoload :Events, "rage/events/events"
|
|
194
|
-
autoload :
|
|
200
|
+
autoload :PubSub, "rage/pubsub/pubsub"
|
|
195
201
|
end
|
|
196
202
|
|
|
197
203
|
module RageController
|
|
204
|
+
autoload :Renderers, "rage/controller/renderers"
|
|
198
205
|
end
|
|
199
206
|
|
|
200
207
|
require_relative "rage/env"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rage-rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.24.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Roman Samoilov
|
|
@@ -134,6 +134,7 @@ files:
|
|
|
134
134
|
- Appraisals
|
|
135
135
|
- CHANGELOG.md
|
|
136
136
|
- CODE_OF_CONDUCT.md
|
|
137
|
+
- CONTRIBUTING.md
|
|
137
138
|
- Gemfile
|
|
138
139
|
- LICENSE.txt
|
|
139
140
|
- README.md
|
|
@@ -143,8 +144,6 @@ files:
|
|
|
143
144
|
- lib/rage.rb
|
|
144
145
|
- lib/rage/all.rb
|
|
145
146
|
- lib/rage/application.rb
|
|
146
|
-
- lib/rage/cable/adapters/base.rb
|
|
147
|
-
- lib/rage/cable/adapters/redis.rb
|
|
148
147
|
- lib/rage/cable/cable.rb
|
|
149
148
|
- lib/rage/cable/channel.rb
|
|
150
149
|
- lib/rage/cable/connection.rb
|
|
@@ -157,6 +156,7 @@ files:
|
|
|
157
156
|
- lib/rage/code_loader.rb
|
|
158
157
|
- lib/rage/configuration.rb
|
|
159
158
|
- lib/rage/controller/api.rb
|
|
159
|
+
- lib/rage/controller/renderers.rb
|
|
160
160
|
- lib/rage/cookies.rb
|
|
161
161
|
- lib/rage/deferred/backends/disk.rb
|
|
162
162
|
- lib/rage/deferred/backends/nil.rb
|
|
@@ -166,6 +166,7 @@ files:
|
|
|
166
166
|
- lib/rage/deferred/middleware_chain.rb
|
|
167
167
|
- lib/rage/deferred/proxy.rb
|
|
168
168
|
- lib/rage/deferred/queue.rb
|
|
169
|
+
- lib/rage/deferred/scheduler.rb
|
|
169
170
|
- lib/rage/deferred/task.rb
|
|
170
171
|
- lib/rage/env.rb
|
|
171
172
|
- lib/rage/errors.rb
|
|
@@ -203,6 +204,8 @@ files:
|
|
|
203
204
|
- lib/rage/openapi/parsers/shared_reference.rb
|
|
204
205
|
- lib/rage/openapi/parsers/yaml.rb
|
|
205
206
|
- lib/rage/params_parser.rb
|
|
207
|
+
- lib/rage/pubsub/adapters/redis.rb
|
|
208
|
+
- lib/rage/pubsub/pubsub.rb
|
|
206
209
|
- lib/rage/rails.rb
|
|
207
210
|
- lib/rage/request.rb
|
|
208
211
|
- lib/rage/response.rb
|
|
@@ -225,10 +228,12 @@ files:
|
|
|
225
228
|
- lib/rage/sse/connection_proxy.rb
|
|
226
229
|
- lib/rage/sse/message.rb
|
|
227
230
|
- lib/rage/sse/sse.rb
|
|
231
|
+
- lib/rage/sse/stream.rb
|
|
228
232
|
- lib/rage/tasks.rb
|
|
229
233
|
- lib/rage/telemetry/handler.rb
|
|
230
234
|
- lib/rage/telemetry/spans/await_fiber.rb
|
|
231
235
|
- lib/rage/telemetry/spans/broadcast_cable_stream.rb
|
|
236
|
+
- lib/rage/telemetry/spans/broadcast_sse_stream.rb
|
|
232
237
|
- lib/rage/telemetry/spans/create_websocket_connection.rb
|
|
233
238
|
- lib/rage/telemetry/spans/dispatch_fiber.rb
|
|
234
239
|
- lib/rage/telemetry/spans/enqueue_deferred_task.rb
|
|
@@ -279,7 +284,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
279
284
|
requirements:
|
|
280
285
|
- - ">="
|
|
281
286
|
- !ruby/object:Gem::Version
|
|
282
|
-
version: 3.
|
|
287
|
+
version: 3.3.0
|
|
283
288
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
284
289
|
requirements:
|
|
285
290
|
- - ">="
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Rage::Cable::Adapters::Base
|
|
4
|
-
def pick_a_worker(&block)
|
|
5
|
-
_lock, lock_path = Tempfile.new.yield_self { |file| [file, file.path] }
|
|
6
|
-
|
|
7
|
-
Iodine.on_state(:on_start) do
|
|
8
|
-
if File.new(lock_path).flock(File::LOCK_EX | File::LOCK_NB)
|
|
9
|
-
if Rage.logger.debug?
|
|
10
|
-
puts "INFO: #{Process.pid} is managing #{self.class.name.split("::").last} subscriptions."
|
|
11
|
-
end
|
|
12
|
-
block.call
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|