Skip to Content Skip to Search

class Rails::PluginBuilder

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.

Constants

DUMMY_IGNORE_OPTIONS

%i[dev edge master template]

Public instance methods

app()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 20
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

    empty_directory_with_keep_file "app/models/concerns"
    empty_directory_with_keep_file "app/controllers/concerns"
    remove_dir "app/mailers" if options[:skip_action_mailer]
    remove_dir "app/jobs" if options[:skip_active_job]
  elsif full?
    empty_directory_with_keep_file "app/models"
    empty_directory_with_keep_file "app/controllers"
    empty_directory_with_keep_file "app/models/concerns"
    empty_directory_with_keep_file "app/controllers/concerns"
    empty_directory_with_keep_file "app/mailers" unless options[:skip_action_mailer]
    empty_directory_with_keep_file "app/jobs" unless options[:skip_active_job]

    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()

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

bin(force = false)

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 170
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()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 87
def config
  template "config/routes.rb" if engine?
end

gemfile()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 53
def gemfile
  template "Gemfile"
end

gemfile_entry()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 178
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()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 61
def gemspec
  template "%name%.gemspec"
end

generate_test_dummy(force = false)

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 112
def generate_test_dummy(force = false)
  opts = options.transform_keys(&:to_sym).except(*DUMMY_IGNORE_OPTIONS)
  opts[:force] = force
  opts[:skip_bundle] = true
  opts[:skip_git] = true
  opts[:skip_hotwire] = true
  opts[:dummy_app] = true

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

gitignore()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 65
def gitignore
  template "gitignore", ".gitignore"
end

lib()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 75
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()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 57
def license
  template "MIT-LICENSE" unless inside_application?
end

rakefile()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 16
def rakefile
  template "Rakefile"
end

readme()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 49
def readme
  template "README.md"
end

stylesheets()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 161
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()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 91
def test
  template "test/test_helper.rb"
  template "test/%namespaced_name%_test.rb"

  if engine?
    empty_directory_with_keep_file "test/fixtures/files"
    empty_directory_with_keep_file "test/controllers"
    empty_directory_with_keep_file "test/mailers"
    empty_directory_with_keep_file "test/models"
    empty_directory_with_keep_file "test/integration"

    unless api?
      empty_directory_with_keep_file "test/helpers"
    end

    template "test/integration/navigation_test.rb"
  end
end

test_dummy_clean()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 144
def test_dummy_clean
  inside dummy_path do
    remove_file ".ruby-version"
    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()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 124
    def test_dummy_config
      template "rails/boot.rb", "#{dummy_path}/config/boot.rb", force: true

      if mountable?
        template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
      end
      if engine? && !api?
        insert_into_file "#{dummy_path}/config/application.rb", indent(<<~RUBY, 4), after: /^\s*config\.load_defaults.*\n/

          # For compatibility with applications that use this config
          config.action_controller.include_all_helpers = false
        RUBY
      end
    end

test_dummy_sprocket_assets()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 139
def test_dummy_sprocket_assets
  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

version_control()

Permalink
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 69
def version_control
  if !options[:skip_git] && !options[:pretend]
    run git_init_command, capture: options[:quiet], abort_on_failure: false
  end
end

Definition files