rage-rb 1.18.0 → 1.19.1

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: a2a6374b788898c53131e163a84117c929bc377da2859bfffde070d95b765ae9
4
- data.tar.gz: 375203e192cfd682f672e1a618aa801f975898c961ce81a1bfb3ec136807eadf
3
+ metadata.gz: 80ca2fffb3bfe313c4be9218461d8346872ea1384472e74ed0236ece99288cfa
4
+ data.tar.gz: e516241ce7ffa73973b22e4abffeeb40aa0cba342d3566e3517549de979dddf6
5
5
  SHA512:
6
- metadata.gz: 4d305b41be71203984c30ff07ce8253befb31b84fbb7c58108983f939dfc5774fb010a4b5d804b2d19e3a4effa9e5b1e755e050ce1453c12a60162d2c48a83fe
7
- data.tar.gz: 117a17acc84c35254dbffc60999b325d00a2c333c23962f9805c632913d300d887e65250b418665dca79108ada0a74d8862c41f3d1d4c682b7fcce77bbab7c48
6
+ metadata.gz: 5b3ea8087b89085a05946a6efd296d3d0bae2f40184356b41d17a49f62a1ad348a0ee4d0295694e6de845465ea004d9d2fb710e0d04316c132533952d9164fae
7
+ data.tar.gz: 8bf64fcb40ed0beccc1f975bec376ebeeadfe84e815e10e801b69ab8820d1ddbaf8b6c87bb3bcbab04e421376b963ee905bfcf13a44443c5391a3b3fb73e30d7
data/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.19.1] - 2025-12-26
4
+
5
+ ### Changed
6
+
7
+ - Use app-specific cookie keys for sessions (#189).
8
+
9
+ ## [1.19.0] - 2025-12-03
10
+
11
+ ### Added
12
+
13
+ - Add ability to specify external loggers (#178).
14
+ - Pass all of log data to deferred tasks (#173).
15
+ - Add the `Request#route_uri_pattern` method (#175).
16
+ - Support global log tags and context (#171, #177).
17
+
18
+ ### Fixed
19
+
20
+ - Fix reloading in dev with user-level fibers (#170).
21
+
3
22
  ## [1.18.0] - 2025-10-29
4
23
 
5
24
  ### Added
data/lib/rage/all.rb CHANGED
@@ -12,6 +12,7 @@ require_relative "uploaded_file"
12
12
  require_relative "errors"
13
13
  require_relative "params_parser"
14
14
  require_relative "code_loader"
15
+ require_relative "log_processor"
15
16
 
16
17
  require_relative "router/strategies/host"
17
18
  require_relative "router/backend"
@@ -4,10 +4,11 @@ class Rage::Application
4
4
  def initialize(router)
5
5
  @router = router
6
6
  @exception_app = build_exception_app
7
+ @log_processor = Rage.__log_processor
7
8
  end
8
9
 
9
10
  def call(env)
10
- init_logger(env)
11
+ @log_processor.init_request_logger(env)
11
12
 
12
13
  handler = @router.lookup(env)
13
14
 
@@ -25,34 +26,11 @@ class Rage::Application
25
26
  response = @exception_app.call(500, e)
26
27
 
27
28
  ensure
28
- finalize_logger(env, response, params)
29
+ @log_processor.finalize_request_logger(env, response, params)
29
30
  end
30
31
 
31
32
  private
32
33
 
33
- DEFAULT_LOG_CONTEXT = {}.freeze
34
- private_constant :DEFAULT_LOG_CONTEXT
35
-
36
- def init_logger(env)
37
- Thread.current[:rage_logger] = {
38
- tags: [(env["rage.request_id"] ||= Iodine::Rack::Utils.gen_request_tag)],
39
- context: DEFAULT_LOG_CONTEXT,
40
- request_start: Process.clock_gettime(Process::CLOCK_MONOTONIC)
41
- }
42
- end
43
-
44
- def finalize_logger(env, response, params)
45
- logger = Thread.current[:rage_logger]
46
-
47
- duration = (
48
- (Process.clock_gettime(Process::CLOCK_MONOTONIC) - logger[:request_start]) * 1000
49
- ).round(2)
50
-
51
- logger[:final] = { env:, params:, response:, duration: }
52
- Rage.logger.info("")
53
- logger[:final] = nil
54
- end
55
-
56
34
  def build_exception_app
57
35
  if Rage.env.development?
58
36
  ->(status, e) do
@@ -1,5 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ ##
4
+ # `Rage::Cable` provides built-in WebSocket support for Rage apps, similar to Action Cable in Rails. It lets you mount a separate WebSocket application, define channels and connections, subscribe clients to named streams, and broadcast messages in real time.
5
+ #
6
+ # Define a channel:
7
+ # ```ruby
8
+ # class ChatChannel < Rage::Cable::Channel
9
+ # def subscribed
10
+ # stream_from "chat"
11
+ # end
12
+ #
13
+ # def receive(data)
14
+ # puts "Received message: #{data['message']}"
15
+ # end
16
+ # end
17
+ # ```
18
+ #
19
+ # Mount the Cable application:
20
+ # ```ruby
21
+ # Rage.routes.draw do
22
+ # mount Rage::Cable.application, at: "/cable"
23
+ # end
24
+ # ```
25
+ #
26
+ # Broadcast a message to a stream:
27
+ # ```ruby
28
+ # Rage.cable.broadcast("chat", { message: "Hello, world!" })
29
+ # ```
30
+ #
3
31
  module Rage::Cable
4
32
  # Create a new Cable application.
5
33
  #
@@ -52,11 +80,10 @@ module Rage::Cable
52
80
  end
53
81
 
54
82
  @protocol = protocol
55
- @default_log_context = {}.freeze
83
+ @log_processor = Rage.__log_processor
56
84
  end
57
85
 
58
86
  def on_open(connection)
59
- connection.env["rage.request_id"] ||= Iodine::Rack::Utils.gen_request_tag
60
87
  schedule_fiber(connection) { @protocol.on_open(connection) }
61
88
  end
62
89
 
@@ -83,7 +110,7 @@ module Rage::Cable
83
110
 
84
111
  def schedule_fiber(connection)
85
112
  Fiber.schedule do
86
- Thread.current[:rage_logger] = { tags: [connection.env["rage.request_id"]], context: @default_log_context }
113
+ @log_processor.init_request_logger(connection.env)
87
114
  yield
88
115
  rescue => e
89
116
  log_error(e)