hotwire-livereload 0.1.1 → 0.2.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: 757248475a762e66a83a9fa3197d20d7a85d022d231777354452b484b3ce881a
4
- data.tar.gz: ad896fa7edfe33574afe3b20640330b406d7c45473d3b20476e828489826dd4f
3
+ metadata.gz: 05ad19b6e77492fec265a2da6af3ddd9aa8b7b149ae284397644db40b553974b
4
+ data.tar.gz: 7f497acf2a34e1774d80c7a2fa1030b6a2eb9228cc2fe257b73a7cdad0e912fc
5
5
  SHA512:
6
- metadata.gz: cb6075bb64a45a75a6a284df02c058f40ce97d79aa88e02f442bf87e90e5f2441ed45e3b30efff27b5d765cd8987707a279717e0c37574e9738180da896e9d23
7
- data.tar.gz: 0c2ffb6cbb134f97152e029877a4a010a7e366ea1462ffd4bc3eff9dada8c7dd5cfd2f8b916f9b74dafdd4ca0c9e650a45b345ebd73ce451e4f9aa602eedea74
6
+ metadata.gz: 554901b08d7d257da5660c5020cbfb8bab03e987eff1d329337fa9943119c6e3a8bead3bc62c97edec32250f7c0bb5503b7d306373e794bd7908a208f211284a
7
+ data.tar.gz: 8e213677c64df89f7903d672c421b7faa9d8a5d12e136ef24e92e7dbc1a0deedc650d92cd882b06627f20e89ddcd4d46ea72943e22cf035152b9aff2e3284c02
data/README.md CHANGED
@@ -10,7 +10,34 @@ The JavaScript for Hotwire::Livereload is installed via asset pipeline, which is
10
10
 
11
11
  1. Add `hotwire-livereload` gem to your Gemfile: `gem 'hotwire-livereload'`
12
12
  2. Run `./bin/bundle install`
13
- 3. Run `./bin/rails hotwire_livereload:install`
13
+ 3. Run `./bin/rails livereload:install`
14
+
15
+ ## Configuration
16
+
17
+ You can watch for changes in additional folders by adding them to `listen_paths`. For example, you can watch for CSS changes:
18
+
19
+ ```ruby
20
+ # config/environments/development.rb
21
+
22
+ Rails.application.configure do
23
+ # ...
24
+ config.hotwire_livereload.listen_paths << Rails.root.join("app/assets/stylesheets")
25
+ end
26
+ ```
27
+
28
+ ## Disable livereload
29
+
30
+ To temporarily disable livereload use:
31
+ ```bash
32
+ bin/rails livereload:disable
33
+ ```
34
+
35
+ To re-enable:
36
+ ```bash
37
+ bin/rails livereload:enable
38
+ ```
39
+
40
+ No server restart is required. Disabling is managed by `tmp/livereload-disabled.txt` file.
14
41
 
15
42
  ## Development
16
43
 
@@ -600,20 +600,18 @@
600
600
  // app/javascript/hotwire-livereload.js
601
601
  var import_actioncable = __toModule(require_action_cable());
602
602
  var import_debounce = __toModule(require_debounce());
603
- var endpoint = "/hotwire-livereload/cable";
604
- var uid = (Date.now() + (Math.random() * 100 | 0)).toString();
605
- var consumer = (0, import_actioncable.createConsumer)(`${endpoint}?uid=${uid}`);
603
+ var consumer = (0, import_actioncable.createConsumer)();
606
604
  var received = (0, import_debounce.default)(() => {
607
- console.log("Hotwire::Livereload files changed");
605
+ console.log("[Hotwire::Livereload] Files changed");
608
606
  Turbo.visit(window.location.href);
609
607
  }, 300);
610
608
  consumer.subscriptions.create("Hotwire::Livereload::ReloadChannel", {
611
609
  received,
612
610
  connected() {
613
- console.log("Hotwire::Livereload websocket connected");
611
+ console.log("[Hotwire::Livereload] Websocket connected");
614
612
  },
615
613
  disconnected() {
616
- console.log("Hotwire::Livereload websocket disconnected");
614
+ console.log("[Hotwire::Livereload] Websocket disconnected");
617
615
  }
618
616
  });
619
617
  })();
@@ -1,5 +1,5 @@
1
1
  class Hotwire::Livereload::ReloadChannel < ActionCable::Channel::Base
2
2
  def subscribed
3
- stream_from "reload"
3
+ stream_from "hotwire-reload"
4
4
  end
5
5
  end
@@ -1,20 +1,20 @@
1
1
  import { createConsumer } from "@rails/actioncable"
2
2
  import debounce from "debounce"
3
3
 
4
- const endpoint = "/hotwire-livereload/cable"
5
- const uid = (Date.now() + ((Math.random() * 100) | 0)).toString()
6
- const consumer = createConsumer(`${endpoint}?uid=${uid}`)
4
+ const consumer = createConsumer()
7
5
  const received = debounce(() => {
8
- console.log("Hotwire::Livereload files changed")
6
+ console.log("[Hotwire::Livereload] Files changed")
9
7
  Turbo.visit(window.location.href)
10
8
  }, 300)
11
9
 
12
10
  consumer.subscriptions.create("Hotwire::Livereload::ReloadChannel", {
13
11
  received,
12
+
14
13
  connected() {
15
- console.log("Hotwire::Livereload websocket connected")
14
+ console.log("[Hotwire::Livereload] Websocket connected")
16
15
  },
16
+
17
17
  disconnected() {
18
- console.log("Hotwire::Livereload websocket disconnected")
18
+ console.log("[Hotwire::Livereload] Websocket disconnected")
19
19
  },
20
20
  })
@@ -28,27 +28,21 @@ module Hotwire
28
28
  initializer "hotwire_livereload.set_configs" do |app|
29
29
  options = app.config.hotwire_livereload
30
30
  options.listen_paths = options.listen_paths.map(&:to_s)
31
- options.listen_paths << Rails.root.join("app", "views")
32
- end
33
-
34
- initializer "hotwire_livereload.cable.config" do |app|
35
- config_path = Hotwire::Livereload::Engine.root.join("config", "livereload_cable.yml")
36
- cable = Hotwire::Livereload::Engine.cable
37
-
38
- cable.cable = app.config_for(config_path).with_indifferent_access
39
- cable.mount_path = "/cable"
40
- cable.connection_class = -> { Hotwire::Livereload::Connection }
41
- cable.logger ||= Rails.logger
31
+ options.listen_paths << Rails.root.join("app/views")
32
+ options.listen_paths << Rails.root.join("app/helpers")
33
+ if Dir.exist?(Rails.root.join("app/javascript"))
34
+ options.listen_paths << Rails.root.join("app/javascript")
35
+ end
42
36
  end
43
37
 
44
38
  config.after_initialize do |app|
45
- if Rails.env.development?
39
+ if Rails.env.development? && defined?(Rails::Server)
46
40
  @listener = Listen.to(*app.config.hotwire_livereload.listen_paths) do |modified, added, removed|
47
- if modified.any? || removed.any? || added.any?
48
- Hotwire::Livereload::Engine.websocket.broadcast(
49
- "reload",
50
- { modified: modified, removed: removed, added: added }
51
- )
41
+ unless File.exists?(DISABLE_FILE)
42
+ if (modified.any? || removed.any? || added.any?)
43
+ content = { modified: modified, removed: removed, added: added }
44
+ ActionCable.server.broadcast("hotwire-reload", content)
45
+ end
52
46
  end
53
47
  end
54
48
  @listener.start
@@ -60,16 +54,6 @@ module Hotwire
60
54
  @listener&.stop
61
55
  end
62
56
  end
63
-
64
- class << self
65
- def websocket
66
- @websocket ||= ActionCable::Server::Base.new(config: Hotwire::Livereload::Engine.cable)
67
- end
68
-
69
- def cable
70
- @cable ||= ActionCable::Server::Configuration.new
71
- end
72
- end
73
57
  end
74
58
  end
75
59
  end
@@ -1,5 +1,5 @@
1
1
  module Hotwire
2
2
  module Livereload
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.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
@@ -1,12 +1,23 @@
1
- route("mount Hotwire::Livereload::Engine, at: '/hotwire-livereload'")
1
+ APP_LAYOUT_PATH = Rails.root.join("app/views/layouts/application.html.erb")
2
+ CABLE_CONFIG_PATH = Rails.root.join("config/cable.yml")
2
3
 
3
- if (app_layout_path = Rails.root.join("app/views/layouts/application.html.erb")).exist?
4
- say "Add Hotwire::Livereload tag in application layout"
5
- insert_into_file app_layout_path.to_s, before: /\s*<\/head>/ do <<-HTML
4
+ if APP_LAYOUT_PATH.exist?
5
+ say "Add Hotwire Livereload tag in application layout"
6
+ insert_into_file APP_LAYOUT_PATH, before: /\s*<\/head>/ do <<-HTML
6
7
  \n <%= hotwire_livereload_tags %>
7
8
  HTML
8
9
  end
9
10
  else
10
11
  say "Default application.html.erb is missing!", :red
11
- say %( Add <%= hotwire_livereload_tags %> within the <head> tag in your custom layout.)
12
+ say %( Add <%= hotwire_livereload_tags %> within the <head> tag in your custom layout.)
13
+ end
14
+
15
+ if CABLE_CONFIG_PATH.exist?
16
+ say "Enable redis in bundle"
17
+ uncomment_lines "Gemfile", %(gem 'redis')
18
+
19
+ say "Switch development cable to use redis"
20
+ gsub_file CABLE_CONFIG_PATH.to_s, /development:\n\s+adapter: async/, "development:\n adapter: redis\n url: redis://localhost:6379/1"
21
+ else
22
+ say 'ActionCable config file (config/cable.yml) is missing. Uncomment "gem \'redis\'" in your Gemfile and create config/cable.yml to use Hotwire Livereload.'
12
23
  end
@@ -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.1
4
+ version: 0.2.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-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -48,17 +48,14 @@ files:
48
48
  - MIT-LICENSE
49
49
  - README.md
50
50
  - app/assets/javascripts/hotwire-livereload.js
51
- - app/channels/hotwire/livereload/connection.rb
52
51
  - app/channels/hotwire/livereload/reload_channel.rb
53
52
  - app/helpers/hotwire/livereload/livereload_tags_helper.rb
54
53
  - app/javascript/hotwire-livereload.js
55
- - config/livereload_cable.yml
56
- - config/routes.rb
57
54
  - lib/hotwire/livereload.rb
58
55
  - lib/hotwire/livereload/engine.rb
59
56
  - lib/hotwire/livereload/version.rb
60
57
  - lib/install/install.rb
61
- - lib/tasks/hotwire/livereload/install.rake
58
+ - lib/tasks/livereload_tasks.rake
62
59
  homepage: https://github.com/kirillplatonov/hotwire-livereload
63
60
  licenses:
64
61
  - MIT
@@ -1,9 +0,0 @@
1
- class Hotwire::Livereload::Connection < ActionCable::Connection::Base
2
- identified_by :uid
3
-
4
- def connect
5
- self.uid = request.params[:uid]
6
- logger.add_tags(uid)
7
- logger.info "connected to Hotwire::Livereload"
8
- end
9
- end
@@ -1,2 +0,0 @@
1
- development:
2
- adapter: async
data/config/routes.rb DELETED
@@ -1,5 +0,0 @@
1
- Hotwire::Livereload::Engine.routes.draw do
2
- if Rails.env.development?
3
- mount Hotwire::Livereload::Engine.websocket => Hotwire::Livereload::Engine.cable.mount_path
4
- end
5
- end
@@ -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