class Rails::Generators::ChannelGenerator

Public Instance Methods

create_channel_files() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 16
def create_channel_files
  create_shared_channel_files
  create_channel_file

  if using_javascript?
    if first_setup_required?
      create_shared_channel_javascript_files
      import_channels_in_javascript_entrypoint

      if using_importmap?
        pin_javascript_dependencies
      elsif using_node?
        install_javascript_dependencies
      end
    end

    create_channel_javascript_file
    import_channel_in_javascript_entrypoint
  end
end

Private Instance Methods

create_channel_file() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 47
def create_channel_file
  template "channel.rb",
    File.join("app/channels", class_path, "#{file_name}_channel.rb")
end
create_channel_javascript_file() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 57
def create_channel_javascript_file
  channel_js_path = File.join("app/javascript/channels", class_path, "#{file_name}_channel")
  js_template "javascript/channel", channel_js_path
  gsub_file "#{channel_js_path}.js", /\.\/consumer/, "channels/consumer" unless using_node?
end
create_shared_channel_files() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 38
def create_shared_channel_files
  return if behavior != :invoke

  copy_file "#{__dir__}/templates/application_cable/channel.rb",
    "app/channels/application_cable/channel.rb"
  copy_file "#{__dir__}/templates/application_cable/connection.rb",
    "app/channels/application_cable/connection.rb"
end
create_shared_channel_javascript_files() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 52
def create_shared_channel_javascript_files
  template "javascript/index.js", "app/javascript/channels/index.js"
  template "javascript/consumer.js", "app/javascript/channels/consumer.js"
end
file_name() click to toggle source
Calls superclass method
# File lib/rails/generators/channel/channel_generator.rb, line 86
def file_name
  @_file_name ||= super.sub(/_channel\z/i, "")
end
first_setup_required?() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 90
def first_setup_required?
  !root.join("app/javascript/channels/index.js").exist?
end
import_channel_in_javascript_entrypoint() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 68
def import_channel_in_javascript_entrypoint
  append_to_file "app/javascript/channels/index.js",
    using_node? ? %(import "./#{file_name}_channel"\n) : %(import "channels/#{file_name}_channel"\n)
end
import_channels_in_javascript_entrypoint() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 63
def import_channels_in_javascript_entrypoint
  append_to_file "app/javascript/application.js",
    using_node? ? %(import "./channels"\n) : %(import "channels"\n)
end
install_javascript_dependencies() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 73
def install_javascript_dependencies
  say "Installing JavaScript dependencies", :green
  run "yarn add @rails/actioncable"
end
pin_javascript_dependencies() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 78
        def pin_javascript_dependencies
          append_to_file "config/importmap.rb", <<-RUBY
pin "@rails/actioncable", to: "actioncable.esm.js"
pin_all_from "app/javascript/channels", under: "channels"
          RUBY
        end
root() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 106
def root
  @root ||= Pathname(destination_root)
end
using_importmap?() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 102
def using_importmap?
  @using_importmap ||= root.join("config/importmap.rb").exist?
end
using_javascript?() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 94
def using_javascript?
  @using_javascript ||= options[:assets] && root.join("app/javascript").exist?
end
using_node?() click to toggle source
# File lib/rails/generators/channel/channel_generator.rb, line 98
def using_node?
  @using_node ||= root.join("package.json").exist?
end