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
Public instance methods
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
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 181
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
Source code GitHub
# 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"
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 97
def config
template "config/routes.rb" if engine?
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 53
def gemfile
template "Gemfile"
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 189
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
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 61
def gemspec
template "%name%.gemspec"
end
Source code GitHub
# 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_thruster] = true
opts[:skip_brakeman] = 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.expand_path(dummy_path, destination_root) ], opts
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 65
def gitignore
template "gitignore", ".gitignore"
end
Source code GitHub
# 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
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 57
def license
template "MIT-LICENSE" unless inside_application?
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 16
def rakefile
template "Rakefile"
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 49
def readme
template "README.md"
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 75
def rubocop
template "rubocop.yml", ".rubocop.yml"
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 172
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
Source code GitHub
# 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
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 155
def test_dummy_assets
template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true
end
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 159
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
Source code GitHub
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 140
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
Source code GitHub
# 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