rails_live_reload 0.3.6 → 0.4.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: fe3a0f4113f0b1bab7c56e466d40a55e4d6c730a1a5403a81b395c4acec6851b
4
- data.tar.gz: 46b451a628be2d0d4c653aed136b93b855259ae897e696e5b85964f4b9338677
3
+ metadata.gz: db5db77fb55392f4a13cc966e01f4b083d9cf4188a2d5b3452f830b1e9c3aa00
4
+ data.tar.gz: e9a07dca4b7af7468fbb0916edc670e68fe9385b2fe1e16913620f4189f44fea
5
5
  SHA512:
6
- metadata.gz: 17c3e1f2ad82ba341f7aaa5b447bb0857e325e07ad1b9076685349a5183811830c398cdac54f35aa29a734cdbe0c1f43f06f608001dffef8ed97a4b48f3bbdf2
7
- data.tar.gz: '0585b2eddb81b8aec7510eed21a080ef97daf21300ed64cac6c8e9b5ffaa5b8df2e6c98564a49cd5eec990882a95e31e4866c5e82816fd22a65f109eecad2f79'
6
+ metadata.gz: '0975db6d0b09d8857f0915827bba985b9898a202c409b03c987c1cd070946173e910ea448ccee47237ddbdc1c29e3ecf4f9c821b452ce62e564724510870cdff'
7
+ data.tar.gz: 18760d509b20520babd42d501bf80c8a5411038e60e1a915e37faeda79c837b489a9823288c21a181d5fcfdf50fc61473361adabb652d767e83ccf2b14616ddb
@@ -1,7 +1,11 @@
1
1
  module RailsLiveReload
2
2
  class Railtie < ::Rails::Engine
3
- if RailsLiveReload.enabled? && (defined?(::Rails::Server) || ENV['SERVER_PROCESS'])
4
- initializer "rails_live_reload.middleware" do |app|
3
+ def enabled?
4
+ RailsLiveReload.enabled? && (defined?(::Rails::Server) || ENV['SERVER_PROCESS'])
5
+ end
6
+
7
+ initializer "rails_live_reload.middleware" do |app|
8
+ if enabled?
5
9
  if ::Rails::VERSION::MAJOR.to_i >= 5
6
10
  app.middleware.insert_after ActionDispatch::Executor, RailsLiveReload::Middleware::Base
7
11
  else
@@ -12,25 +16,33 @@ module RailsLiveReload
12
16
  end
13
17
  end
14
18
  end
19
+ end
15
20
 
16
- initializer "rails_live_reload.watcher" do
21
+ initializer "rails_live_reload.watcher" do
22
+ if enabled?
17
23
  RailsLiveReload::Watcher.init
18
24
  end
25
+ end
19
26
 
20
- initializer "rails_live_reload.configure_metrics", after: :initialize_logger do
27
+ initializer "rails_live_reload.configure_metrics", after: :initialize_logger do
28
+ if enabled?
21
29
  ActiveSupport::Notifications.subscribe(
22
30
  /\.action_view/,
23
31
  RailsLiveReload::Instrument::MetricsCollector.new
24
32
  )
25
33
  end
34
+ end
26
35
 
27
- initializer "rails_live_reload.reset_current_request", after: :initialize_logger do |app|
36
+ initializer "rails_live_reload.reset_current_request", after: :initialize_logger do |app|
37
+ if enabled?
28
38
  app.executor.to_run { CurrentRequest.cleanup }
29
39
  app.executor.to_complete { CurrentRequest.cleanup }
30
40
  end
41
+ end
31
42
 
32
- initializer "rails_live_reload.routes" do
33
- config.after_initialize do |app|
43
+ initializer "rails_live_reload.routes" do
44
+ config.after_initialize do |app|
45
+ if enabled?
34
46
  app.routes.prepend do
35
47
  mount RailsLiveReload.server => RailsLiveReload.config.url, internal: true
36
48
  end
@@ -38,4 +50,4 @@ module RailsLiveReload
38
50
  end
39
51
  end
40
52
  end
41
- end
53
+ end
@@ -15,11 +15,11 @@ module RailsLiveReload
15
15
  @app.call(env)
16
16
  end
17
17
  else
18
- request = Rack::Request.new(env)
18
+ request = ActionDispatch::Request.new(env)
19
19
  status, headers, body = @app.call(env)
20
20
 
21
- if html?(headers) && (status == 500 || (status.to_s =~ /20./ && request.get?))
22
- return inject_rails_live_reload(status, headers, body)
21
+ if html?(headers) && (status == 500 || status == 422 || (status.to_s =~ /20./ && request.get?))
22
+ return inject_rails_live_reload(request, status, headers, body)
23
23
  end
24
24
 
25
25
  [status, headers, body]
@@ -28,25 +28,26 @@ module RailsLiveReload
28
28
 
29
29
  private
30
30
 
31
- def inject_rails_live_reload(status, headers, body)
31
+ def inject_rails_live_reload(request, status, headers, body)
32
32
  response = Rack::Response.new([], status, headers)
33
-
33
+
34
+ nonce = request&.content_security_policy_nonce
34
35
  if String === body
35
- response.write make_new_response(body)
36
+ response.write make_new_response(body, nonce)
36
37
  else
37
- body.each { |fragment| response.write make_new_response(fragment) }
38
+ body.each { |fragment| response.write make_new_response(fragment, nonce) }
38
39
  end
39
40
  body.close if body.respond_to?(:close)
40
41
  response.finish
41
42
  end
42
43
 
43
- def make_new_response(body)
44
+ def make_new_response(body, nonce)
44
45
  index = body.rindex(/<\/body>/i) || body.rindex(/<\/html>/i)
45
46
  return body if index.nil?
46
47
 
47
48
  body.insert(index, <<~HTML.html_safe)
48
49
  <script defer type="text/javascript" src="#{RailsLiveReload.config.url}/script"></script>
49
- <script id="rails-live-reload-options" type="application/json">
50
+ <script id="rails-live-reload-options" type="application/json" nonce="#{nonce}">
50
51
  #{{
51
52
  files: CurrentRequest.current.data.to_a,
52
53
  time: Time.now.to_i,
@@ -57,7 +58,7 @@ module RailsLiveReload
57
58
  end
58
59
 
59
60
  def html?(headers)
60
- headers["Content-Type"].to_s.include?("text/html")
61
+ headers["content-type"].to_s.include?("text/html")
61
62
  end
62
63
  end
63
64
  end
@@ -1,3 +1,3 @@
1
1
  module RailsLiveReload
2
- VERSION = "0.3.6"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_live_reload
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-03-04 00:00:00.000000000 Z
12
+ date: 2024-12-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  - !ruby/object:Gem::Version
134
134
  version: '0'
135
135
  requirements: []
136
- rubygems_version: 3.5.4
136
+ rubygems_version: 3.5.22
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: Ruby on Rails Live Reload