The plugin builder allows you to override elements of the plugin generator without being forced to reverse the operations of the default generator.

This allows you to override entire operations, like the creation of the Gemfile, README, or JavaScript files, without needing to know exactly what those operations do so you can create another template action.

Methods

Constants

PASSTHROUGH_OPTIONS = [ :skip_active_record, :skip_active_storage, :skip_action_mailer, :skip_javascript, :skip_action_cable, :skip_sprockets, :database, :javascript, :skip_yarn, :api, :quiet, :pretend, :skip ]
 

Instance Public methods

app()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 19
def app
  if mountable?
    if api?
      directory "app", exclude_pattern: %r{app/(views|helpers)}
    else
      directory "app"
      empty_directory_with_keep_file "app/assets/images/#{namespaced_name}"
    end
  elsif full?
    empty_directory_with_keep_file "app/models"
    empty_directory_with_keep_file "app/controllers"
    empty_directory_with_keep_file "app/mailers"

    unless api?
      empty_directory_with_keep_file "app/assets/images/#{namespaced_name}"
      empty_directory_with_keep_file "app/helpers"
      empty_directory_with_keep_file "app/views"
    end
  end
end

assets_manifest()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 133
def assets_manifest
  template "rails/engine_manifest.js", "app/assets/config/#{underscored_name}_manifest.js"
end

bin(force = false)

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 157
def bin(force = false)
  bin_file = engine? ? "bin/rails.tt" : "bin/test.tt"
  template bin_file, force: force do |content|
    "#{shebang}\n" + content
  end
  chmod "bin", 0755, verbose: false
end

config()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 72
def config
  template "config/routes.rb" if engine?
end

gemfile()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 44
def gemfile
  template "Gemfile"
end

gemfile_entry()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 165
def gemfile_entry
  return unless inside_application?

  gemfile_in_app_path = File.join(rails_app_path, "Gemfile")
  if File.exist? gemfile_in_app_path
    entry = "\ngem '#{name}', path: '#{relative_path}'"
    append_file gemfile_in_app_path, entry
  end
end

gemspec()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 52
def gemspec
  template "%name%.gemspec"
end

generate_test_dummy(force = false)

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 94
def generate_test_dummy(force = false)
  opts = (options.dup || {}).keep_if { |k, _| PASSTHROUGH_OPTIONS.map(&:to_s).include?(k) }
  opts[:force] = force
  opts[:skip_bundle] = true
  opts[:skip_listen] = true
  opts[:skip_git] = true
  opts[:skip_turbolinks] = true
  opts[:dummy_app] = true

  invoke Rails::Generators::AppGenerator,
    [ File.expand_path(dummy_path, destination_root) ], opts
end

gitignore()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 56
def gitignore
  template "gitignore", ".gitignore"
end

javascripts()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 146
def javascripts
  return if options.skip_javascript?

  if mountable?
    template "rails/javascripts.js",
             "app/assets/javascripts/#{namespaced_name}/application.js"
  elsif full?
    empty_directory_with_keep_file "app/assets/javascripts/#{namespaced_name}"
  end
end

lib()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 60
def lib
  template "lib/%namespaced_name%.rb"
  template "lib/tasks/%namespaced_name%_tasks.rake"
  template "lib/%namespaced_name%/version.rb"

  if engine?
    template "lib/%namespaced_name%/engine.rb"
  else
    template "lib/%namespaced_name%/railtie.rb"
  end
end

license()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 48
def license
  template "MIT-LICENSE"
end

rakefile()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 15
def rakefile
  template "Rakefile"
end

readme()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 40
def readme
  template "README.md"
end

stylesheets()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 137
def stylesheets
  if mountable?
    copy_file "rails/stylesheets.css",
              "app/assets/stylesheets/#{namespaced_name}/application.css"
  elsif full?
    empty_directory_with_keep_file "app/assets/stylesheets/#{namespaced_name}"
  end
end

test()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 76
    def test
      template "test/test_helper.rb"
      template "test/%namespaced_name%_test.rb"
      append_file "Rakefile", <<-EOF

#{rakefile_test_tasks}
task default: :test
      EOF
      if engine?
        template "test/integration/navigation_test.rb"
      end
    end

test_dummy_assets()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 115
def test_dummy_assets
  template "rails/javascripts.js",    "#{dummy_path}/app/assets/javascripts/application.js", force: true
  template "rails/stylesheets.css",   "#{dummy_path}/app/assets/stylesheets/application.css", force: true
  template "rails/dummy_manifest.js", "#{dummy_path}/app/assets/config/manifest.js", force: true
end

test_dummy_clean()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 121
def test_dummy_clean
  inside dummy_path do
    remove_file "db/seeds.rb"
    remove_file "Gemfile"
    remove_file "lib/tasks"
    remove_file "public/robots.txt"
    remove_file "README.md"
    remove_file "test"
    remove_file "vendor"
  end
end

test_dummy_config()

# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 107
def test_dummy_config
  template "rails/boot.rb", "#{dummy_path}/config/boot.rb", force: true
  template "rails/application.rb", "#{dummy_path}/config/application.rb", force: true
  if mountable?
    template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
  end
end