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



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

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

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

#configure_cableObject



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

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
31
32
# 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"
  migration_template "create_message_translations.rb", "db/migrate/create_polylingo_chat_message_translations.rb"
  migration_template "create_message_read_receipts.rb", "db/migrate/create_polylingo_chat_message_read_receipts.rb"
end

#create_channelsObject



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

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



108
109
110
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 108

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

#create_javascript_filesObject



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

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



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

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



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

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



112
113
114
# File 'lib/generators/polylingo_chat/install/install_generator.rb', line 112

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

#update_application_jsObject



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

def update_application_js
  return if @api_only
  if File.exist?("app/javascript/application.js")
    append_to_file "app/javascript/application.js" do
      <<~JS

        // PolylingoChat real-time chat
        import "chat"
      JS
    end
  end
end

#update_importmapObject



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

def update_importmap
  return if @api_only
  if File.exist?("config/importmap.rb")
    append_to_file "config/importmap.rb" do
      <<~RUBY

        # PolylingoChat real-time chat
        pin "@rails/actioncable", to: "@rails--actioncable.js"
        pin_all_from "app/javascript/channels", under: "channels"
        pin "chat", to: "chat.js"
      RUBY
    end
  end
end