Class: PolylingoChat::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration
Defined in:
lib/generators/polylingo_chat/install/install_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ InstallGenerator

Returns a new instance of InstallGenerator.



16
17
18
19
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 16

def initialize(*args)
  super
  @api_only = detect_api_only_mode
end

Class Method Details

.next_migration_number(dirname) ⇒ Object



21
22
23
24
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 21

def self.next_migration_number(dirname)
  next_migration_number = current_migration_number(dirname) + 1
  ActiveRecord::Migration.next_migration_number(next_migration_number)
end

Instance Method Details

#add_routesObject



70
71
72
73
74
75
76
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 70

def add_routes
  unless @api_only
    route 'mount ActionCable.server => "/cable"'
  end

  route 'mount PolylingoChat::Engine => "/polylingo_chat"'
end

#configure_cableObject



48
49
50
51
52
53
54
55
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 48

def configure_cable
  return if @api_only
  if File.exist?("config/cable.yml")
    gsub_file "config/cable.yml", /^development:\s*\n\s+adapter:\s+\w+.*$/m do |match|
      "development:\n  adapter: solid_cable\n  polling_interval: 0.1.seconds\n  message_retention: 1.day"
    end
  end
end

#copy_migrationsObject



26
27
28
29
30
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 26

def copy_migrations
  migration_template "create_conversations.rb", "db/migrate/create_polylingo_chat_conversations.rb"
  migration_template "create_participants.rb", "db/migrate/create_polylingo_chat_participants.rb"
  migration_template "create_messages.rb", "db/migrate/create_polylingo_chat_messages.rb"
end

#create_channelsObject



32
33
34
35
36
37
38
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 32

def create_channels
  return if @api_only
  empty_directory "app/channels/application_cable"
  template "channels/application_cable/channel.rb", "app/channels/application_cable/channel.rb"
  template "channels/application_cable/connection.rb", "app/channels/application_cable/connection.rb"
  template "channels/polylingo_chat_channel.rb", "app/channels/polylingo_chat_channel.rb"
end

#create_initializerObject



106
107
108
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 106

def create_initializer
  template "initializer.rb", "config/initializers/polylingo_chat.rb"
end

#create_javascript_filesObject



40
41
42
43
44
45
46
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 40

def create_javascript_files
  return if @api_only
  empty_directory "app/javascript/channels"
  template "javascript/chat.js", "app/javascript/chat.js"
  template "javascript/channels/consumer.js", "app/javascript/channels/consumer.js"
  template "javascript/channels/index.js", "app/javascript/channels/index.js"
end

#download_actioncableObject



63
64
65
66
67
68
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 63

def download_actioncable
  return if @api_only
  empty_directory "vendor/javascript"
  say "Downloading ActionCable ESM module...", :green
  run "curl -o vendor/javascript/@rails--actioncable.js https://ga.jspm.io/npm:@rails/[email protected]/app/assets/javascripts/actioncable.esm.js"
end

#setup_solid_cableObject



57
58
59
60
61
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 57

def setup_solid_cable
  return if @api_only
  say "Setting up Solid Cable...", :green
  rails_command "solid_cable:install", abort_on_failure: false
end

#show_readmeObject



110
111
112
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 110

def show_readme
  readme "README" if behavior == :invoke
end

#update_application_jsObject



93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 93

def update_application_js
  return if @api_only
  if File.exist?("app/javascript/application.js")
    append_to_file "app/javascript/application.js" do
      "\n        // PolylingoChat real-time chat\n        import \"chat\"\n      JS\n    end\n  end\nend\n"

#update_importmapObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 78

def update_importmap
  return if @api_only
  if File.exist?("config/importmap.rb")
    append_to_file "config/importmap.rb" do
      "\n        # PolylingoChat real-time chat\n        pin \"@rails/actioncable\", to: \"@rails--actioncable.js\"\n        pin_all_from \"app/javascript/channels\", under: \"channels\"\n        pin \"chat\", to: \"chat.js\"\n      RUBY\n    end\n  end\nend\n"