class Rails::Generators::ChannelGenerator
Public Instance Methods
Source
# File lib/rails/generators/channel/channel_generator.rb, line 18 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_js_runtime? install_javascript_dependencies end end create_channel_javascript_file import_channel_in_javascript_entrypoint end end
Private Instance Methods
Source
# File lib/rails/generators/channel/channel_generator.rb, line 49 def create_channel_file template "channel.rb", File.join("app/channels", class_path, "#{file_name}_channel.rb") end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 59 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_js_runtime? end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 91 def file_name @_file_name ||= super.sub(/_channel\z/i, "") end
Calls superclass method
Source
# File lib/rails/generators/channel/channel_generator.rb, line 95 def first_setup_required? !root.join("app/javascript/channels/index.js").exist? end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 70 def import_channel_in_javascript_entrypoint append_to_file "app/javascript/channels/index.js", using_js_runtime? ? %(import "./#{file_name}_channel"\n) : %(import "channels/#{file_name}_channel"\n) end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 65 def import_channels_in_javascript_entrypoint append_to_file "app/javascript/application.js", using_js_runtime? ? %(import "./channels"\n) : %(import "channels"\n) end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 75 def install_javascript_dependencies say "Installing JavaScript dependencies", :green if using_bun? run "bun add @rails/actioncable" elsif using_node? run "yarn add @rails/actioncable" end end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 84 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
Source
# File lib/rails/generators/channel/channel_generator.rb, line 122 def root @root ||= Pathname(destination_root) end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 107 def using_bun? # Cannot assume bun.lockb has been generated yet so we look for a file known to # be generated by the jsbundling-rails gem @using_bun ||= using_js_runtime? && root.join("bun.config.js").exist? end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 118 def using_importmap? @using_importmap ||= root.join("config/importmap.rb").exist? end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 99 def using_javascript? @using_javascript ||= options[:assets] && root.join("app/javascript").exist? end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 103 def using_js_runtime? @using_js_runtime ||= root.join("package.json").exist? end
Source
# File lib/rails/generators/channel/channel_generator.rb, line 113 def using_node? # Bun is the only runtime that _isn't_ node. @using_node ||= using_js_runtime? && !root.join("bun.config.js").exist? end