Class: Rails::PluginBuilder
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | railties/lib/rails/generators/rails/plugin/plugin_generator.rb |
Overview
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.
Constant Summary
-
DUMMY_IGNORE_OPTIONS =
# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 121%i[dev edge master template].freeze
Instance Method Summary
Instance Method Details
#app
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 21
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 [:skip_action_mailer] remove_dir "app/jobs" if [: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 [:skip_action_mailer] empty_directory_with_keep_file "app/jobs" unless [: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
#bin
[ GitHub ]# 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 end
#cifiles
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 70
def cifiles empty_directory ".github/workflows" template "github/ci.yml", ".github/workflows/ci.yml" template "github/dependabot.yml", ".github/dependabot.yml" end
#config
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 98
def config template "config/routes.rb" if engine? end
#gemfile
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 54
def gemfile template "Gemfile" end
#gemfile_entry
[ GitHub ]# 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 end
#gemspec
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 62
def gemspec template "%name%.gemspec" end
#generate_test_dummy(force = false)
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 123
def generate_test_dummy(force = false) opts = .transform_keys(&:to_sym).except(*DUMMY_IGNORE_OPTIONS) opts[:force] = force opts[:skip_thruster] = true opts[:skip_brakeman] = true opts[:skip_bundler_audit] = true opts[:skip_bundle] = true opts[:skip_ci] = true opts[:skip_kamal] = true opts[:skip_solid] = true opts[:skip_git] = true opts[:skip_hotwire] = true opts[:skip_rubocop] = true opts[:dummy_app] = true invoke Rails::Generators::AppGenerator, [ File.(dummy_path, destination_root) ], opts end
#gitignore
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 66
def gitignore template "gitignore", ".gitignore" end
#lib
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 86
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
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 58
def license template "MIT-LICENSE" unless inside_application? end
#rakefile
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 17
def rakefile template "Rakefile" end
#readme
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 50
def readme template "README.md" end
#rubocop
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 76
def rubocop template "rubocop.yml", ".rubocop.yml" end
#stylesheets
[ GitHub ]# 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 end
#test
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 102
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_assets
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 157
def test_dummy_assets template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true end
#test_dummy_clean
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 161
def test_dummy_clean inside dummy_path do remove_file ".ruby-version" remove_dir "db" remove_file "Gemfile" remove_dir "lib" remove_file "public/robots.txt" remove_file "README.md" remove_file "test" remove_file "vendor" end end
#test_dummy_config
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 142
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
#version_control
[ GitHub ]# File 'railties/lib/rails/generators/rails/plugin/plugin_generator.rb', line 80
def version_control if ![:skip_git] && ![:pretend] run git_init_command, capture: [:quiet], abort_on_failure: false end end