hotwire-livereload 0.1.3 → 1.0.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: 5df2481e44b656c233a0088024d87bc11fcc54ba3fd469bc5c5ef6b5ff69225f
4
- data.tar.gz: 6550a575e2cb6d601e2b516106a155fd7805fdecb4b25a89137c56fadd78a291
3
+ metadata.gz: 2634bec56254429d0d3f222fdc56d3e6acae483e8158da3c8314540c812da537
4
+ data.tar.gz: 0162d148937597fb06a5f6f23ba43dedabe550cde88e892dbc2369ce63e6fd4f
5
5
  SHA512:
6
- metadata.gz: 40269aa33f0c249354eb64f688461bcfde1956b0727e183c80c7c70d277040195e235110eeef12ec81a47f1261317a2a2096f4e605aa04e68c76d9ae140ca290
7
- data.tar.gz: e792c0b4fcc371ef4c9fbb87bb7766516a4b93e54a69574c1e9fc320cbb594c06e09cf731afc2cdbdb12bebbaca7bcb8dc84ecb2c129ad41f71e79d8e8ef0aa0
6
+ metadata.gz: 946841da42fc46ab057128a32881e72a2d35dc69759e6036cf562b58d70db8d793a0d338312623c665afcf5c3edf4e4a54e3b573528b139e6a20af2bb1bb24c2
7
+ data.tar.gz: ec6af99da8e71eadae77b68e579a65ccab81ad3acb9bd54f70466908cdc14f67ece5667e7bc31f7a4f44f52e0d449a22961a3729c2a098189ca30ec84c24c09e
data/README.md CHANGED
@@ -8,9 +8,61 @@ https://user-images.githubusercontent.com/839922/131983979-afd0bcc7-86e8-4c53-97
8
8
 
9
9
  The JavaScript for Hotwire::Livereload is installed via asset pipeline, which is included with this gem.
10
10
 
11
- 1. Add `hotwire-livereload` gem to your Gemfile: `gem 'hotwire-livereload'`
12
- 2. Run `./bin/bundle install`
13
- 3. Run `./bin/rails hotwire_livereload:install`
11
+ Add `hotwire-livereload` to your Gemfile:
12
+ ```
13
+ bundle add hotwire-livereload --group development
14
+ ```
15
+
16
+ Run installer:
17
+ ```
18
+ rails livereload:install
19
+ ```
20
+
21
+ ## Configuration
22
+
23
+ You can watch for changes in additional folders by adding them to `listen_paths`. For example, you can watch for CSS changes:
24
+ ```ruby
25
+ # config/environments/development.rb
26
+
27
+ Rails.application.configure do
28
+ # ...
29
+ config.hotwire_livereload.listen_paths << Rails.root.join("app/custom_folder")
30
+ end
31
+ ```
32
+
33
+ Folders listened by default:
34
+ - `app/views`
35
+ - `app/helpers`
36
+ - `app/javascript`
37
+ - `app/assets/stylesheets`
38
+ - `app/assets/javascripts`
39
+ - `app/assets/images`
40
+ - `app/components`
41
+ - `config/locales`
42
+
43
+ You can setup force reloading (full page reload) for changes in some folders using `force_reload_paths` option. For example, you can trigger force reload on JS changes:
44
+ ```ruby
45
+ # config/environments/development.rb
46
+
47
+ Rails.application.configure do
48
+ # ...
49
+ config.hotwire_livereload.force_reload_paths << Rails.root.join("app/javascript")
50
+ end
51
+ ```
52
+
53
+ ## Disable livereload
54
+
55
+ To temporarily disable livereload use:
56
+ ```bash
57
+ bin/rails livereload:disable
58
+ ```
59
+
60
+ To re-enable:
61
+ ```bash
62
+ bin/rails livereload:enable
63
+ ```
64
+
65
+ No server restart is required. Disabling is managed by `tmp/livereload-disabled.txt` file.
14
66
 
15
67
  ## Development
16
68
 
@@ -601,9 +601,15 @@
601
601
  var import_actioncable = __toModule(require_action_cable());
602
602
  var import_debounce = __toModule(require_debounce());
603
603
  var consumer = (0, import_actioncable.createConsumer)();
604
- var received = (0, import_debounce.default)(() => {
605
- console.log("[Hotwire::Livereload] Files changed");
606
- Turbo.visit(window.location.href);
604
+ var received = (0, import_debounce.default)(({ force_reload }) => {
605
+ const onErrorPage = document.title === "Action Controller: Exception caught";
606
+ if (onErrorPage || force_reload) {
607
+ console.log("[Hotwire::Livereload] Files changed. Force reloading..");
608
+ document.location.reload();
609
+ } else {
610
+ console.log("[Hotwire::Livereload] Files changed. Reloading..");
611
+ Turbo.visit(window.location.href);
612
+ }
607
613
  }, 300);
608
614
  consumer.subscriptions.create("Hotwire::Livereload::ReloadChannel", {
609
615
  received,
@@ -2,9 +2,16 @@ import { createConsumer } from "@rails/actioncable"
2
2
  import debounce from "debounce"
3
3
 
4
4
  const consumer = createConsumer()
5
- const received = debounce(() => {
6
- console.log("[Hotwire::Livereload] Files changed")
7
- Turbo.visit(window.location.href)
5
+ const received = debounce(({force_reload}) => {
6
+ const onErrorPage = document.title === "Action Controller: Exception caught"
7
+
8
+ if (onErrorPage || force_reload) {
9
+ console.log("[Hotwire::Livereload] Files changed. Force reloading..")
10
+ document.location.reload()
11
+ } else {
12
+ console.log("[Hotwire::Livereload] Files changed. Reloading..")
13
+ Turbo.visit(window.location.href)
14
+ }
8
15
  }, 300)
9
16
 
10
17
  consumer.subscriptions.create("Hotwire::Livereload::ReloadChannel", {
@@ -8,6 +8,7 @@ module Hotwire
8
8
  isolate_namespace Hotwire::Livereload
9
9
  config.hotwire_livereload = ActiveSupport::OrderedOptions.new
10
10
  config.hotwire_livereload.listen_paths ||= []
11
+ config.hotwire_livereload.force_reload_paths ||= []
11
12
  config.autoload_once_paths = %W(
12
13
  #{root}/app/channels
13
14
  #{root}/app/helpers
@@ -26,17 +27,40 @@ module Hotwire
26
27
  end
27
28
 
28
29
  initializer "hotwire_livereload.set_configs" do |app|
30
+ default_listen_paths = %w[
31
+ app/views
32
+ app/helpers
33
+ app/javascript
34
+ app/assets/stylesheets
35
+ app/assets/javascripts
36
+ app/assets/images
37
+ app/components
38
+ config/locales
39
+ ].map { |p| Rails.root.join(p) }
40
+
29
41
  options = app.config.hotwire_livereload
30
- options.listen_paths = options.listen_paths.map(&:to_s)
31
- options.listen_paths << Rails.root.join("app/views")
42
+ options.listen_paths += default_listen_paths.select { |p| Dir.exist?(p) }
32
43
  end
33
44
 
34
45
  config.after_initialize do |app|
35
- if Rails.env.development?
36
- @listener = Listen.to(*app.config.hotwire_livereload.listen_paths) do |modified, added, removed|
37
- if modified.any? || removed.any? || added.any?
38
- content = { modified: modified, removed: removed, added: added }
39
- ActionCable.server.broadcast("hotwire-reload", content)
46
+ if Rails.env.development? && defined?(Rails::Server)
47
+ options = app.config.hotwire_livereload
48
+ listen_paths = options.listen_paths.map(&:to_s).uniq
49
+ force_reload_paths = options.force_reload_paths.map(&:to_s).uniq.join("|")
50
+
51
+ @listener = Listen.to(*listen_paths) do |modified, added, removed|
52
+ unless File.exists?(DISABLE_FILE)
53
+ changed = [modified, removed, added].flatten.uniq
54
+ return unless changed.any?
55
+
56
+ force_reload = force_reload_paths.present? && changed.any? do |path|
57
+ path.match(%r{#{force_reload_paths}})
58
+ end
59
+
60
+ ActionCable.server.broadcast("hotwire-reload", {
61
+ changed: changed,
62
+ force_reload: force_reload
63
+ })
40
64
  end
41
65
  end
42
66
  @listener.start
@@ -1,5 +1,5 @@
1
1
  module Hotwire
2
2
  module Livereload
3
- VERSION = "0.1.3"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -2,5 +2,6 @@ require "hotwire/livereload/engine"
2
2
 
3
3
  module Hotwire
4
4
  module Livereload
5
+ DISABLE_FILE = "tmp/livereload-disabled.txt"
5
6
  end
6
7
  end
@@ -3,18 +3,26 @@ CABLE_CONFIG_PATH = Rails.root.join("config/cable.yml")
3
3
 
4
4
  if APP_LAYOUT_PATH.exist?
5
5
  say "Add Hotwire Livereload tag in application layout"
6
- insert_into_file APP_LAYOUT_PATH, before: /\s*<\/head>/ do <<-HTML
7
- \n <%= hotwire_livereload_tags %>
6
+ content = <<-HTML
7
+ \n <% if Rails.env.development? %>
8
+ <%= javascript_include_tag "hotwire-livereload", defer: true %>
9
+ <% end %>
8
10
  HTML
9
- end
11
+ insert_into_file APP_LAYOUT_PATH, content.chop, before: /\s*<\/head>/
10
12
  else
11
13
  say "Default application.html.erb is missing!", :red
12
14
  say %( Add <%= hotwire_livereload_tags %> within the <head> tag in your custom layout.)
13
15
  end
14
16
 
15
17
  if CABLE_CONFIG_PATH.exist?
16
- say "Enable redis in bundle"
17
- uncomment_lines "Gemfile", %(gem 'redis')
18
+ gemfile = File.read(Rails.root.join("Gemfile"))
19
+ if gemfile.include?("redis")
20
+ say "Uncomment redis in Gemfile"
21
+ uncomment_lines "Gemfile", %(gem "redis")
22
+ else
23
+ say "Add redis to Gemfile"
24
+ gem "redis"
25
+ end
18
26
 
19
27
  say "Switch development cable to use redis"
20
28
  gsub_file CABLE_CONFIG_PATH.to_s, /development:\n\s+adapter: async/, "development:\n adapter: redis\n url: redis://localhost:6379/1"
@@ -0,0 +1,21 @@
1
+ namespace :livereload do
2
+ desc "Install Hotwire::Livereload into the app"
3
+ task :install do
4
+ system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/install.rb", __dir__)}"
5
+ end
6
+
7
+ desc "Disable Hotwire::Livereload"
8
+ task :disable do
9
+ FileUtils.mkdir_p("tmp")
10
+ FileUtils.touch Hotwire::Livereload::DISABLE_FILE
11
+ puts "Livereload disabled."
12
+ end
13
+
14
+ desc "Enable Hotwire::Livereload"
15
+ task :enable do
16
+ if File.exist?(Hotwire::Livereload::DISABLE_FILE)
17
+ File.delete Hotwire::Livereload::DISABLE_FILE
18
+ end
19
+ puts "Livereload enabled."
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hotwire-livereload
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Platonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-03 00:00:00.000000000 Z
11
+ date: 2021-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -55,7 +55,7 @@ files:
55
55
  - lib/hotwire/livereload/engine.rb
56
56
  - lib/hotwire/livereload/version.rb
57
57
  - lib/install/install.rb
58
- - lib/tasks/hotwire/livereload/install.rake
58
+ - lib/tasks/livereload_tasks.rake
59
59
  homepage: https://github.com/kirillplatonov/hotwire-livereload
60
60
  licenses:
61
61
  - MIT
@@ -75,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  requirements: []
78
- rubygems_version: 3.2.22
78
+ rubygems_version: 3.2.32
79
79
  signing_key:
80
80
  specification_version: 4
81
- summary: Automatically reload Hotwire Turbo when 'view' files are modified.
81
+ summary: Automatically reload Hotwire Turbo when app files are modified.
82
82
  test_files: []
@@ -1,6 +0,0 @@
1
- namespace :hotwire_livereload do
2
- desc "Setup Hotwire Livereload"
3
- task :install do
4
- system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../../../install/install.rb", __dir__)}"
5
- end
6
- end