Class: ActionText::Generators::InstallGenerator

Inherits:
Rails::Generators::Base show all
Defined in:
actiontext/lib/generators/action_text/install/install_generator.rb

Instance Method Summary collapse

Methods inherited from Rails::Generators::Base

base_root, class_option, default_source_root, desc, exit_on_failure?, hide!, hook_for, inherited, namespace, remove_hook_for, source_root

Methods included from Rails::Generators::Actions

#add_source, #environment, #gem, #gem_group, #generate, #git, #github, #initialize, #initializer, #lib, #rails_command, #rake, #rakefile, #readme, #route, #vendor

Instance Method Details

#append_javascript_dependenciesObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'actiontext/lib/generators/action_text/install/install_generator.rb', line 18

def append_javascript_dependencies
  destination = Pathname(destination_root)

  if (application_javascript_path = destination.join("app/javascript/application.js")).exist?
    insert_into_file application_javascript_path.to_s, %(\nimport "trix"\nimport "@rails/actiontext"\n)
  else
    say <<~INSTRUCTIONS, :green
      You must import the @rails/actiontext and trix JavaScript modules in your application entrypoint.
    INSTRUCTIONS
  end

  if (importmap_path = destination.join("config/importmap.rb")).exist?
    append_to_file importmap_path.to_s, %(pin "trix"\npin "@rails/actiontext", to: "actiontext.js"\n)
  end
end

#create_actiontext_filesObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'actiontext/lib/generators/action_text/install/install_generator.rb', line 34

def create_actiontext_files
  destination = Pathname(destination_root)

  template "actiontext.css", "app/assets/stylesheets/actiontext.css"

  unless destination.join("app/assets/application.css").exist?
    if (stylesheets = Dir.glob "#{destination_root}/app/assets/stylesheets/application.*.{scss,css}").length > 0
      insert_into_file stylesheets.first.to_s, %(@import 'actiontext.css';)
    else
      say <<~INSTRUCTIONS, :green
        To use the Trix editor, you must require 'app/assets/stylesheets/actiontext.css' in your base stylesheet.
      INSTRUCTIONS
    end
  end

  gem_root = "#{__dir__}/../../../.."

  copy_file "#{gem_root}/app/views/active_storage/blobs/_blob.html.erb",
    "app/views/active_storage/blobs/_blob.html.erb"

  copy_file "#{gem_root}/app/views/layouts/action_text/contents/_content.html.erb",
    "app/views/layouts/action_text/contents/_content.html.erb"
end

#create_migrationsObject



65
66
67
# File 'actiontext/lib/generators/action_text/install/install_generator.rb', line 65

def create_migrations
  rails_command "railties:install:migrations FROM=active_storage,action_text", inline: true
end

#enable_image_processing_gemObject



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

def enable_image_processing_gem
  if (gemfile_path = Pathname(destination_root).join("Gemfile")).exist?
    say "Ensure image_processing gem has been enabled so image uploads will work (remember to bundle!)"
    uncomment_lines gemfile_path, /gem "image_processing"/
  end
end

#install_javascript_dependenciesObject



11
12
13
14
15
16
# File 'actiontext/lib/generators/action_text/install/install_generator.rb', line 11

def install_javascript_dependencies
  if Pathname(destination_root).join("package.json").exist?
    say "Installing JavaScript dependencies", :green
    run "yarn add @rails/actiontext trix"
  end
end