rage-rb 1.8.0 → 1.9.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: 4adc4048bfa84558a6b86b15cbcab8e6153858878425bde66db78a975fa46f46
4
- data.tar.gz: 46bef9f42fdd681bdf593f037a73ca8ae2d435acad9eed5ddf4b3740bf61b601
3
+ metadata.gz: d8b2423a2cb780fd3f8ffc4e76a6690fff37162836e3d2d64791c7f058b3d63f
4
+ data.tar.gz: 86c2ee3464e5668e78409d7eae2e987c4e6a5aa54bea024c7cca694dd142019e
5
5
  SHA512:
6
- metadata.gz: 754b954d46d065020e0c2184c04f1a13d0c0a64ddf11d1b034062df4cc669460c259032a8bf40a61c876579f1774e50e9b57181d4d3e1301c4610577e11c6734
7
- data.tar.gz: 4207556922f8fd2c82d07ba8664f53847dc1e5afb6bb5d38260ac0ccd428dd011fd8c6bf34f69aa75af97044a838df23c6c36b5baae1ae7cd3d4c08455fc699b
6
+ metadata.gz: cc810e46ff275e4595c2631f3cb5cbd19d38dd42885b393bb240ffb8b96ff6cb6f0f93015a461c469cbb88e13cbcc53288f385db590bd2562dc604a4d38b423e
7
+ data.tar.gz: 6be5256d0c92fd495f6afa2ba3d9f6a08cfe6058429040f10d035594ad9a54d050241fa443029836042e7435681563f36bfee89b04eecaeb31055206adff41ef
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.9.0] - 2024-08-24
4
+
5
+ ### Added
6
+
7
+ - Static file server (#100).
8
+ - Rails 7.2 compatibility (#101).
9
+
10
+ ### Fixed
11
+
12
+ - Correctly set Rails env (#102).
13
+
3
14
  ## [1.8.0] - 2024-08-06
4
15
 
5
16
  ### Added
data/lib/rage/cli.rb CHANGED
@@ -29,12 +29,15 @@ module Rage
29
29
  app = ::Rack::Builder.parse_file(options[:config] || "config.ru")
30
30
  app = app[0] if app.is_a?(Array)
31
31
 
32
- port = options[:port] || Rage.config.server.port
33
- address = options[:binding] || (Rage.env.production? ? "0.0.0.0" : "localhost")
34
- timeout = Rage.config.server.timeout
35
- max_clients = Rage.config.server.max_clients
32
+ server_options = { service: :http, handler: app }
36
33
 
37
- ::Iodine.listen service: :http, handler: app, port: port, address: address, timeout: timeout, max_clients: max_clients
34
+ server_options[:port] = options[:port] || Rage.config.server.port
35
+ server_options[:address] = options[:binding] || (Rage.env.production? ? "0.0.0.0" : "localhost")
36
+ server_options[:timeout] = Rage.config.server.timeout
37
+ server_options[:max_clients] = Rage.config.server.max_clients
38
+ server_options[:public] = Rage.config.public_file_server.enabled ? Rage.root.join("public").to_s : nil
39
+
40
+ ::Iodine.listen(**server_options)
38
41
  ::Iodine.threads = Rage.config.server.threads_count
39
42
  ::Iodine.workers = Rage.config.server.workers_count
40
43
 
@@ -124,6 +127,10 @@ module Rage
124
127
 
125
128
  def set_env(options)
126
129
  ENV["RAGE_ENV"] = options[:environment] if options[:environment]
130
+
131
+ # at this point we don't know whether the app is running in standalone or Rails mode;
132
+ # we set both variables to make sure applications are running in the same environment;
133
+ ENV["RAILS_ENV"] = ENV["RAGE_ENV"] if ENV["RAGE_ENV"] && ENV["RAILS_ENV"] != ENV["RAGE_ENV"]
127
134
  end
128
135
  end
129
136
 
@@ -102,6 +102,12 @@
102
102
  #
103
103
  # > Specifies connection timeout.
104
104
  #
105
+ # # Static file server
106
+ #
107
+ # • _config.public_file_server.enabled_
108
+ #
109
+ # > Configures whether Rage should serve static files from the public directory. Defaults to `false`.
110
+ #
105
111
  # # Cable Configuration
106
112
  #
107
113
  # • _config.cable.protocol_
@@ -165,6 +171,10 @@ class Rage::Configuration
165
171
  @cable ||= Cable.new
166
172
  end
167
173
 
174
+ def public_file_server
175
+ @public_file_server ||= PublicFileServer.new
176
+ end
177
+
168
178
  def internal
169
179
  @internal ||= Internal.new
170
180
  end
@@ -246,6 +256,10 @@ class Rage::Configuration
246
256
  end
247
257
  end
248
258
 
259
+ class PublicFileServer
260
+ attr_accessor :enabled
261
+ end
262
+
249
263
  # @private
250
264
  class Internal
251
265
  attr_accessor :rails_mode
@@ -148,10 +148,14 @@ module Rage::Ext::ActiveRecord::ConnectionPool
148
148
  end
149
149
 
150
150
  # Yields a connection from the connection pool to the block.
151
- def with_connection
152
- yield connection
151
+ def with_connection(_ = nil)
152
+ unless (conn = @__in_use[Fiber.current])
153
+ conn = connection
154
+ fresh_connection = true
155
+ end
156
+ yield conn
153
157
  ensure
154
- release_connection
158
+ release_connection if fresh_connection
155
159
  end
156
160
 
157
161
  # Returns an array containing the connections currently in the pool.
@@ -230,6 +234,10 @@ module Rage::Ext::ActiveRecord::ConnectionPool
230
234
  connection
231
235
  end
232
236
 
237
+ def lease_connection
238
+ connection
239
+ end
240
+
233
241
  # Check in a database connection back into the pool, indicating that you no longer need this connection.
234
242
  def checkin(conn)
235
243
  fiber = @__in_use.key(conn)
@@ -31,6 +31,6 @@ if defined?(ActiveRecord::ConnectionAdapters::ConnectionPool)
31
31
  end
32
32
 
33
33
  # patch `ActiveRecord::ConnectionPool`
34
- if defined?(ActiveRecord) && ENV["RAGE_PATCH_AR_POOL"]
34
+ if defined?(ActiveRecord) && ENV["RAGE_PATCH_AR_POOL"] && !Rage.env.test?
35
35
  Rage.patch_active_record_connection_pool
36
36
  end
data/lib/rage/rails.rb CHANGED
@@ -44,7 +44,10 @@ end
44
44
  # clone Rails logger
45
45
  Rails.configuration.after_initialize do
46
46
  if Rails.logger && !Rage.logger
47
- rails_logdev = Rails.logger.instance_variable_get(:@logdev)
47
+ rails_logdev = Rails.logger.yield_self { |logger|
48
+ logger.respond_to?(:broadcasts) ? logger.broadcasts.last : logger
49
+ }.instance_variable_get(:@logdev)
50
+
48
51
  Rage.configure do
49
52
  config.logger = Rage::Logger.new(rails_logdev.dev) if rails_logdev.is_a?(Logger::LogDevice)
50
53
  end
data/lib/rage/request.rb CHANGED
@@ -37,6 +37,45 @@ class Rage::Request
37
37
  )
38
38
  end
39
39
 
40
+ # Returns the full URL of the request.
41
+ # @example
42
+ # request.url # => "https://example.com/users?show_archived=true"
43
+ def url
44
+ scheme = @env["rack.url_scheme"]
45
+ host = @env["SERVER_NAME"]
46
+ port = @env["SERVER_PORT"]
47
+ path = @env["PATH_INFO"]
48
+ query_string = @env["QUERY_STRING"]
49
+
50
+ port_part = (scheme == "http" && port == "80") || (scheme == "https" && port == "443") ? "" : ":#{port}"
51
+ query_part = query_string.empty? ? "" : "?#{query_string}"
52
+
53
+ "#{scheme}://#{host}#{port_part}#{path}#{query_part}"
54
+ end
55
+
56
+ # Returns the path of the request.
57
+ # @example
58
+ # request.path # => "/users"
59
+ def path
60
+ @env["PATH_INFO"]
61
+ end
62
+
63
+ # Returns the full path including the query string.
64
+ # @example
65
+ # request.fullpath # => "/users?show_archived=true"
66
+ def fullpath
67
+ path = @env["PATH_INFO"]
68
+ query_string = @env["QUERY_STRING"]
69
+ query_string.empty? ? path : "#{path}?#{query_string}"
70
+ end
71
+
72
+ # Returns the user agent of the request.
73
+ # @example
74
+ # request.user_agent # => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
75
+ def user_agent
76
+ @env["HTTP_USER_AGENT"]
77
+ end
78
+
40
79
  private
41
80
 
42
81
  def if_none_match
data/lib/rage/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rage
4
- VERSION = "1.8.0"
4
+ VERSION = "1.9.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rage-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Samoilov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-06 00:00:00.000000000 Z
11
+ date: 2024-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor