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

Source: show | on GitHub

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: show | on GitHub

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: show | on GitHub

def cifiles empty_directory ".github/workflows" template "github/ci.yml", ".github/workflows/ci.yml" template "github/dependabot.yml", ".github/dependabot.yml" end

Source: show | on GitHub

def config template "config/routes.rb" if engine? end

Source: show | on GitHub

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: show | on GitHub

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: show | on GitHub

def gitignore template "gitignore", ".gitignore" end

Source: show | on GitHub

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: show | on GitHub

def license template "MIT-LICENSE" unless inside_application? end

Source: show | on GitHub

def rubocop template "rubocop.yml", ".rubocop.yml" end

Source: show | on GitHub

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: show | on GitHub

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: show | on GitHub

def test_dummy_assets template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true end

Source: show | on GitHub

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: show | on GitHub

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: show | on GitHub

def version_control if !options[:skip_git] && !options[:pretend] run git_init_command, capture: options[:quiet], abort_on_failure: false end end