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
- app
- assets_manifest
- bin
- cifiles
- config
- gemfile
- gemfile_entry
- gemspec
- generate_test_dummy
- gitignore
- lib
- license
- rakefile
- readme
- rubocop
- stylesheets
- test
- test_dummy_clean
- test_dummy_config
- test_dummy_sprocket_assets
- version_control
Constants
| DUMMY_IGNORE_OPTIONS | = | %i[dev edge master template] | 
Instance Public methods
app()
📝 Source code
# 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
    endassets_manifest()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 170
    def assets_manifest
      template "rails/engine_manifest.js", "app/assets/config/#{underscored_name}_manifest.js"
    endbin()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 183
    def bin
      exclude_pattern = Regexp.union([(engine? ? /test\.tt/ : /rails\.tt/), (/rubocop/ if skip_rubocop?)].compact)
      directory "bin", { exclude_pattern: exclude_pattern } do |content|
        "#{shebang}\n" + content
      end
      chmod "bin", 0755 & ~File.umask, verbose: false
    endcifiles()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 69
    def cifiles
      empty_directory ".github/workflows"
      template "github/ci.yml", ".github/workflows/ci.yml"
      template "github/dependabot.yml", ".github/dependabot.yml"
    endconfig()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 97
    def config
      template "config/routes.rb" if engine?
    endgemfile()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 53
    def gemfile
      template "Gemfile"
    endgemfile_entry()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 191
    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
    endgemspec()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 61
    def gemspec
      template "%name%.gemspec"
    endgenerate_test_dummy(force = false)
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 122
    def generate_test_dummy(force = false)
      opts = options.transform_keys(&:to_sym).except(*DUMMY_IGNORE_OPTIONS)
      opts[:force] = force
      opts[:skip_brakeman] = true
      opts[:skip_bundle] = true
      opts[:skip_ci] = true
      opts[:skip_git] = true
      opts[:skip_hotwire] = true
      opts[:skip_rubocop] = true
      opts[:dummy_app] = true
      invoke Rails::Generators::AppGenerator,
        [ File.expand_path(dummy_path, destination_root) ], opts
    endgitignore()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 65
    def gitignore
      template "gitignore", ".gitignore"
    endlib()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 85
    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
    endlicense()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 57
    def license
      template "MIT-LICENSE" unless inside_application?
    endrakefile()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 16
    def rakefile
      template "Rakefile"
    endreadme()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 49
    def readme
      template "README.md"
    endrubocop()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 75
    def rubocop
      template "rubocop.yml", ".rubocop.yml"
    endstylesheets()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 174
    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
    endtest()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 101
    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
    endtest_dummy_clean()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 157
    def test_dummy_clean
      inside dummy_path do
        remove_file ".ruby-version"
        remove_dir "db"
        remove_file "Gemfile"
        remove_file "lib/tasks"
        remove_file "public/robots.txt"
        remove_file "README.md"
        remove_file "test"
        remove_file "vendor"
      end
    endtest_dummy_config()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 137
    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
    endtest_dummy_sprocket_assets()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 152
    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
    endversion_control()
📝 Source code
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 79
    def version_control
      if !options[:skip_git] && !options[:pretend]
        run git_init_command, capture: options[:quiet], abort_on_failure: false
      end
    end