hotwire-livereload 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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