class Rails::Plugin
root during the boot process.
Rails::Plugin is that plugins automatically load the file “init.rb” at the plugin
Besides this conceptual difference, the only difference between Rails::Engine and
be used as plugin and vice-versa.
to be loaded twice. This means that if you want to ship an Engine as gem it cannot
declare a Rails::Engine inside your Plugin, otherwise it would cause the same files
placing inside vendor/plugins. Since this is done automatically, you actually cannot
Rails::Plugin. Rails::Plugin is automatically configured to be an engine by simply
Opposite to Rails::Railtie and Rails::Engine, you are not supposed to inherit from
Rails::Engine.
in the boot process, it does not have the same configuration powers as a bare
Rails::Plugin is nothing more than a Rails::Engine, but since it’s loaded too late
def self.all(list, paths)
def self.all(list, paths) plugins = [] paths.each do |path| Dir["#{path}/*"].each do |plugin_path| plugin = new(plugin_path) next unless list.include?(plugin.name) || list.include?(:all) if global_plugins.include?(plugin.name) warn "WARNING: plugin #{plugin.name} from #{path} was not loaded. Plugin with the same name has been already loaded." next end global_plugins << plugin.name plugins << plugin end end plugins.sort_by do |p| [list.index(p.name) || list.index(:all), p.name.to_s] end end
def self.global_plugins
def self.global_plugins @global_plugins ||= [] end
def self.inherited(base)
def self.inherited(base) raise "You cannot inherit from Rails::Plugin" end
def config
def config @config ||= Engine::Configuration.new end
def initialize(root)
def initialize(root) ActiveSupport::Deprecation.warn "You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released" @name = File.basename(root).to_sym config.root = root end
def railtie_name
def railtie_name name.to_s end