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
- config
- gemfile
- gemfile_entry
- gemspec
- generate_test_dummy
- gitignore
- javascripts
- lib
- license
- rakefile
- readme
- stylesheets
- test
- test_dummy_assets
- test_dummy_clean
- test_dummy_config
Constants
PASSTHROUGH_OPTIONS | = | [ :skip_active_record, :skip_active_storage, :skip_action_mailer, :skip_javascript, :skip_action_cable, :skip_sprockets, :database, :javascript, :skip_yarn, :api, :quiet, :pretend, :skip ] |
Instance Public methods
app()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 19
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
elsif full?
empty_directory_with_keep_file "app/models"
empty_directory_with_keep_file "app/controllers"
empty_directory_with_keep_file "app/mailers"
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
assets_manifest()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 133
def assets_manifest
template "rails/engine_manifest.js", "app/assets/config/#{underscored_name}_manifest.js"
end
bin(force = false)
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 157
def bin(force = false)
bin_file = engine? ? "bin/rails.tt" : "bin/test.tt"
template bin_file, force: force do |content|
"#{shebang}\n" + content
end
chmod "bin", 0755, verbose: false
end
config()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 72
def config
template "config/routes.rb" if engine?
end
gemfile()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 44
def gemfile
template "Gemfile"
end
gemfile_entry()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 165
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()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 52
def gemspec
template "%name%.gemspec"
end
generate_test_dummy(force = false)
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 94
def generate_test_dummy(force = false)
opts = (options.dup || {}).keep_if { |k, _| PASSTHROUGH_OPTIONS.map(&:to_s).include?(k) }
opts[:force] = force
opts[:skip_bundle] = true
opts[:skip_listen] = true
opts[:skip_git] = true
opts[:skip_turbolinks] = true
opts[:dummy_app] = true
invoke Rails::Generators::AppGenerator,
[ File.expand_path(dummy_path, destination_root) ], opts
end
gitignore()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 56
def gitignore
template "gitignore", ".gitignore"
end
javascripts()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 146
def javascripts
return if options.skip_javascript?
if mountable?
template "rails/javascripts.js",
"app/assets/javascripts/#{namespaced_name}/application.js"
elsif full?
empty_directory_with_keep_file "app/assets/javascripts/#{namespaced_name}"
end
end
lib()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 60
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()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 48
def license
template "MIT-LICENSE"
end
rakefile()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 15
def rakefile
template "Rakefile"
end
readme()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 40
def readme
template "README.md"
end
stylesheets()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 137
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()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 76
def test
template "test/test_helper.rb"
template "test/%namespaced_name%_test.rb"
append_file "Rakefile", <<-EOF
#{rakefile_test_tasks}
task default: :test
EOF
if engine?
template "test/integration/navigation_test.rb"
end
end
test_dummy_assets()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 115
def test_dummy_assets
template "rails/javascripts.js", "#{dummy_path}/app/assets/javascripts/application.js", force: true
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
end
test_dummy_clean()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 121
def test_dummy_clean
inside dummy_path do
remove_file "db/seeds.rb"
remove_file "Gemfile"
remove_file "lib/tasks"
remove_file "public/robots.txt"
remove_file "README.md"
remove_file "test"
remove_file "vendor"
end
end
test_dummy_config()
Source:
# File railties/lib/rails/generators/rails/plugin/plugin_generator.rb, line 107
def test_dummy_config
template "rails/boot.rb", "#{dummy_path}/config/boot.rb", force: true
template "rails/application.rb", "#{dummy_path}/config/application.rb", force: true
if mountable?
template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
end
end