custom_plugin_with_railtie
🛠️ Build a Plugin Gem with Full Railtie and Generator Support
Rather than a simple plugin, structure your code as a gem with a Railtie to hook into Rails boot. Provide a generator to scaffold configurations or migrations into the host application with minimal friction.
# lib/my_plugin.rb
require "rails"
module MyPlugin
class Railtie < ::Rails::Railtie
# Load plugin configuration defaults
config.my_plugin = ActiveSupport::OrderedOptions.new
config.my_plugin.enabled = true
# Add plugin rake tasks
rake_tasks do
load "#{root}/lib/tasks/my_plugin_tasks.rake"
end
# Hook into generators
generators do
require "my_plugin/generators/install_generator"
end
end
end
# lib/my_plugin/generators/install_generator.rb
module MyPlugin
module Generators
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path("templates", __dir__)
desc "Copies MyPlugin initializer file to your application."
def copy_initializer
template "my_plugin.rb", "config/initializers/my_plugin.rb"
end
end
end
end
This structure makes your plugin first-class, with initialization, tasks, and scaffolding.