Class: ActionText::Generators::InstallGenerator

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

Instance Method Summary collapse

Instance Method Details

#append_javascript_dependenciesObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/generators/action_text/install/install_generator.rb', line 22

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.esm.js"\n)
  end
end

#create_actiontext_filesObject



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/generators/action_text/install/install_generator.rb', line 38

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

  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



50
51
52
# File 'lib/generators/action_text/install/install_generator.rb', line 50

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

#install_javascript_dependenciesObject



13
14
15
16
17
18
19
20
# File 'lib/generators/action_text/install/install_generator.rb', line 13

def install_javascript_dependencies
  say "Installing JavaScript dependencies", :green
  if using_bun?
    run "bun add @rails/actiontext trix"
  elsif using_node?
    run "yarn add @rails/actiontext trix"
  end
end

#using_bun?Boolean

Returns:

  • (Boolean)


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

def using_bun?
  # Cannot assume yarn.lock has been generated yet so we look for a file known to
  # be generated by the jsbundling-rails gem
  @using_bun ||= using_js_runtime? && Pathname(destination_root).join("bun.config.js").exist?
end

#using_js_runtime?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/generators/action_text/install/install_generator.rb', line 54

def using_js_runtime?
  @using_js_runtime ||= Pathname(destination_root).join("package.json").exist?
end

#using_node?Boolean

Returns:

  • (Boolean)


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

def using_node?
  # Bun is the only runtime that _isn't_ node.
  @using_node ||= using_js_runtime? && !Pathname(destination_root).join("bun.config.js").exist?
end