rails_live_reload 0.3.6 → 0.5.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: 1f3623d0079c16a21e2b52a6c54e554c7acc9fa24abc25b503bd155ef1370b06
4
+ data.tar.gz: e2319b7fc9e036246a7f93c5cfba1d08447975c9d0f848fb7336b19050c1898d
5
5
  SHA512:
6
- metadata.gz: 17c3e1f2ad82ba341f7aaa5b447bb0857e325e07ad1b9076685349a5183811830c398cdac54f35aa29a734cdbe0c1f43f06f608001dffef8ed97a4b48f3bbdf2
7
- data.tar.gz: '0585b2eddb81b8aec7510eed21a080ef97daf21300ed64cac6c8e9b5ffaa5b8df2e6c98564a49cd5eec990882a95e31e4866c5e82816fd22a65f109eecad2f79'
6
+ metadata.gz: 6d17d66422af418d7cdfc506de8c92276df44e3ba5361b25522d5ade8324cf2fddf041f06026ef939f3ef3801f2b943c58a85e8f2d686ebc5bec0c9f23eac53d
7
+ data.tar.gz: 5fdb4bfc1a17a817a2606654501b7389dd044f83624d8f923efc2794e5aa12115661efa4aa35f4851bb2a6f7f3b123a5c983a045be53e66e4684651f9fc6a3c6
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Rails Live Reload
2
2
 
3
3
  [![RailsJazz](https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/my_other.svg?raw=true)](https://www.railsjazz.com)
4
- [![Listed on OpenSource-Heroes.com](https://opensource-heroes.com/badge-v1.svg)](https://opensource-heroes.com/r/railsjazz/rails_live_reload)
4
+
5
+ [!["Buy Me A Coffee"](https://github.com/igorkasyanchuk/get-smart/blob/main/docs/snapshot-bmc-button-small.png?raw=true)](https://buymeacoffee.com/igorkasyanchuk)
5
6
 
6
7
  ![RailsLiveReload](docs/rails_live_reload.gif)
7
8
 
@@ -66,9 +67,6 @@ The default configuration assumes that you either use asset pipeline, or that yo
66
67
 
67
68
  You are welcome to contribute. See list of `TODO's` below.
68
69
 
69
- [<img src="https://opensource-heroes.com/svg/embed/railsjazz/rails_live_reload"
70
- />](https://opensource-heroes.com/svg/embed/railsjazz/rails_live_reload)
71
-
72
70
  ## TODO
73
71
 
74
72
  - reload CSS without reloading the whole page?
@@ -90,3 +88,6 @@ The gem is available as open source under the terms of the [MIT License](https:/
90
88
 
91
89
  [<img src="https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/more_gems.png?raw=true"
92
90
  />](https://www.railsjazz.com/?utm_source=github&utm_medium=bottom&utm_campaign=rails_live_reload)
91
+
92
+
93
+ [!["Buy Me A Coffee"](https://github.com/igorkasyanchuk/get-smart/blob/main/docs/snapshot-bmc-button-small.png?raw=true)](https://buymeacoffee.com/igorkasyanchuk)
@@ -11,5 +11,8 @@ RailsLiveReload.configure do |config|
11
11
  # config.watch %r{app/helpers/.+\.rb}, reload: :always
12
12
  # config.watch %r{config/locales/.+\.yml}, reload: :always
13
13
 
14
+ # Ignored folders & files
15
+ # config.ignore %r{node_modules/}
16
+
14
17
  # config.enabled = Rails.env.development?
15
18
  end if defined?(RailsLiveReload)
@@ -12,13 +12,17 @@ module RailsLiveReload
12
12
  config.patterns
13
13
  end
14
14
 
15
+ def ignore_patterns
16
+ config.ignore_patterns
17
+ end
18
+
15
19
  def enabled?
16
20
  config.enabled
17
21
  end
18
22
  end
19
23
 
20
24
  class Config
21
- attr_reader :patterns
25
+ attr_reader :patterns, :ignore_patterns
22
26
  attr_accessor :url, :watcher, :files, :enabled
23
27
 
24
28
  def initialize
@@ -33,6 +37,8 @@ module RailsLiveReload
33
37
  %r{(app|vendor)/(assets|javascript)/\w+/(.+\.(css|js|html|png|jpg|ts|jsx)).*} => :always
34
38
  }
35
39
  @default_patterns_changed = false
40
+
41
+ @ignore_patterns = []
36
42
  end
37
43
 
38
44
  def root_path
@@ -48,6 +54,10 @@ module RailsLiveReload
48
54
  patterns[pattern] = reload
49
55
  end
50
56
 
57
+ def ignore(pattern)
58
+ @ignore_patterns << pattern
59
+ end
60
+
51
61
  def socket_path
52
62
  root_path.join('tmp/sockets/rails_live_reload.sock').then do |path|
53
63
  break path if path.to_s.size <= 104 # 104 is the max length of a socket path
@@ -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.5.0"
3
3
  end
@@ -1,3 +1,5 @@
1
+ require "fileutils"
2
+
1
3
  module RailsLiveReload
2
4
  class Watcher
3
5
  attr_reader :files, :sockets
@@ -21,13 +23,14 @@ module RailsLiveReload
21
23
  end
22
24
 
23
25
  build_tree
26
+ create_socket_directory
24
27
  start_socket
25
28
  start_listener
26
29
  end
27
30
 
28
31
  def start_listener
29
32
  Thread.new do
30
- listener = Listen.to(root) do |modified, added, removed|
33
+ listener = Listen.to(root, ignore: RailsLiveReload.ignore_patterns) do |modified, added, removed|
31
34
  all = modified + added + removed
32
35
  all.each do |file|
33
36
  files[file] = File.mtime(file).to_i rescue nil
@@ -55,6 +58,10 @@ module RailsLiveReload
55
58
  end
56
59
  end
57
60
 
61
+ def create_socket_directory
62
+ FileUtils.mkdir_p File.dirname(RailsLiveReload.config.socket_path)
63
+ end
64
+
58
65
  def start_socket
59
66
  Thread.new do
60
67
  Socket.unix_server_socket(RailsLiveReload.config.socket_path.to_s) do |sock|
metadata CHANGED
@@ -1,15 +1,14 @@
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.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  - Liubomyr Manastyretskyi
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-03-04 00:00:00.000000000 Z
11
+ date: 2025-05-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: railties
@@ -118,7 +117,6 @@ homepage: https://github.com/railsjazz/rails_live_reload
118
117
  licenses:
119
118
  - MIT
120
119
  metadata: {}
121
- post_install_message:
122
120
  rdoc_options: []
123
121
  require_paths:
124
122
  - lib
@@ -133,8 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
131
  - !ruby/object:Gem::Version
134
132
  version: '0'
135
133
  requirements: []
136
- rubygems_version: 3.5.4
137
- signing_key:
134
+ rubygems_version: 3.6.3
138
135
  specification_version: 4
139
136
  summary: Ruby on Rails Live Reload
140
137
  test_files: []