Rails::PluginBuilder (original) (raw)
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
A
B
C
G
L
R
S
T
V
Constants
DUMMY_IGNORE_OPTIONS | = | %i[dev edge master template] |
---|---|---|
Instance Public methods
app()Link
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
bin()Link
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()Link
def cifiles empty_directory ".github/workflows" template "github/ci.yml", ".github/workflows/ci.yml" template "github/dependabot.yml", ".github/dependabot.yml" end
config()Link
def config template "config/routes.rb" if engine? end
gemfile_entry()Link
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
generate_test_dummy(force = false)Link
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
gitignore()Link
def gitignore template "gitignore", ".gitignore" end
lib()Link
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()Link
def license template "MIT-LICENSE" unless inside_application? end
rubocop()Link
def rubocop template "rubocop.yml", ".rubocop.yml" end
stylesheets()Link
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()Link
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()Link
def test_dummy_assets template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true end
test_dummy_clean()Link
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()Link
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()Link
def version_control if !options[:skip_git] && !options[:pretend] run git_init_command, capture: options[:quiet], abort_on_failure: false end end