Skip to content

Commit

Permalink
Refactor plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
Yehuda Katz + Carl Lerche committed Nov 12, 2009
1 parent fca32eb commit 82b9b15
Show file tree
Hide file tree
Showing 19 changed files with 321 additions and 1,144 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -27,6 +27,7 @@ railties/guides/output
*.rbc
*.swp
*.swo
*.tmproj
bin
vendor/gems/
railties/tmp
12 changes: 12 additions & 0 deletions railties/lib/rails.rb
@@ -1 +1,13 @@
require "pathname"

require 'rails/initializable'
require 'rails/application'
require 'rails/railties_path'
require 'rails/version'
require 'rails/rack'
require 'rails/paths'
require 'rails/core'
require 'rails/configuration'
require 'rails/deprecation'
require 'rails/initializer'
require 'rails/plugin'
50 changes: 13 additions & 37 deletions railties/lib/rails/application.rb
Expand Up @@ -23,10 +23,6 @@ def config=(config)
@config = config
end

def plugin_loader
@plugin_loader ||= config.plugin_loader.new(self)
end

def root
config.root
end
Expand All @@ -37,7 +33,7 @@ def call(env)
end

def initialize
run_initializers
run_initializers(self)
end

def config
Expand All @@ -46,10 +42,6 @@ def config

alias configuration config

def plugin_loader
self.class.plugin_loader
end

def middleware
config.middleware
end
Expand All @@ -58,6 +50,18 @@ def routes
ActionController::Routing::Routes
end

def initializers
initializers = super
plugins.each { |p| initializers += p.initializers }
initializers
end

def plugins
@plugins ||= begin
Plugin::Vendored.all(config.plugins || [:all], config.paths.vendor.plugins)
end
end

def call(env)
@app ||= middleware.build(routes)
@app.call(env)
Expand Down Expand Up @@ -111,13 +115,6 @@ def call(env)
config.load_once_paths.freeze
end

# Adds all load paths from plugins to the global set of load paths, so that
# code from plugins can be required (explicitly or automatically via ActiveSupport::Dependencies).
initializer :add_plugin_load_paths do
require 'active_support/dependencies'
plugin_loader.add_plugin_load_paths
end

# Create tmp directories
initializer :ensure_tmp_directories_exist do
%w(cache pids sessions sockets).each do |dir_to_make|
Expand Down Expand Up @@ -321,34 +318,13 @@ def call(env)
# TODO: Make Rails and metal work without ActionController
if config.frameworks.include?(:action_controller)
Rails::Rack::Metal.requested_metals = config.metals
Rails::Rack::Metal.metal_paths += plugin_loader.engine_metal_paths

config.middleware.insert_before(
:"ActionDispatch::ParamsParser",
Rails::Rack::Metal, :if => Rails::Rack::Metal.metals.any?)
end
end

# Loads all plugins in <tt>config.plugin_paths</tt>. <tt>plugin_paths</tt>
# defaults to <tt>vendor/plugins</tt> but may also be set to a list of
# paths, such as
# config.plugin_paths = ["#{config.root}/lib/plugins", "#{config.root}/vendor/plugins"]
#
# In the default implementation, as each plugin discovered in <tt>plugin_paths</tt> is initialized:
# * its +lib+ directory, if present, is added to the load path (immediately after the applications lib directory)
# * <tt>init.rb</tt> is evaluated, if present
#
# After all plugins are loaded, duplicates are removed from the load path.
# If an array of plugin names is specified in config.plugins, only those plugins will be loaded
# and they plugins will be loaded in that order. Otherwise, plugins are loaded in alphabetical
# order.
#
# if config.plugins ends contains :all then the named plugins will be loaded in the given order and all other
# plugins will be loaded in alphabetical order
initializer :load_plugins do
plugin_loader.load_plugins
end

# # bail out if gems are missing - note that check_gem_dependencies will have
# # already called abort() unless $gems_rake_task is set
# return unless gems_dependencies_loaded
Expand Down
33 changes: 3 additions & 30 deletions railties/lib/rails/configuration.rb
@@ -1,25 +1,20 @@
require 'rails/plugin/loader'
require 'rails/plugin/locator'
require 'active_support/ordered_options'

module Rails
class Configuration
attr_accessor :cache_classes, :load_paths,
:load_once_paths, :after_initialize_blocks,
:frameworks, :framework_root_path, :root, :plugin_paths, :plugins,
:plugin_loader, :plugin_locators, :gems, :loaded_plugins, :reload_plugins,
attr_accessor :cache_classes, :load_paths, :load_once_paths, :after_initialize_blocks,
:frameworks, :framework_root_path, :root, :gems, :plugins,
:i18n, :gems, :whiny_nils, :consider_all_requests_local,
:action_controller, :active_record, :action_view, :active_support,
:action_mailer, :active_resource,
:log_path, :log_level, :logger, :preload_frameworks,
:reload_plugins, :log_path, :log_level, :logger, :preload_frameworks,
:database_configuration_file, :cache_store, :time_zone,
:view_path, :metals, :controller_paths, :routes_configuration_file,
:eager_load_paths, :dependency_loading, :paths, :serve_static_assets

def initialize
@load_once_paths = []
@after_initialize_blocks = []
@loaded_plugins = []
@dependency_loading = true
@serve_static_assets = true

Expand Down Expand Up @@ -199,24 +194,6 @@ def frameworks
@frameworks ||= [ :active_record, :action_controller, :action_view, :action_mailer, :active_resource ]
end

def plugin_paths
@plugin_paths ||= ["#{root}/vendor/plugins"]
end

def plugin_loader
@plugin_loader ||= begin
Plugin::Loader
end
end

def plugin_locators
@plugin_locators ||= begin
locators = []
locators << Plugin::GemLocator if defined? Gem
locators << Plugin::FileSystemLocator
end
end

def i18n
@i18n ||= begin
i18n = ActiveSupport::OrderedOptions.new
Expand All @@ -235,10 +212,6 @@ def environment_path
"#{root}/config/environments/#{RAILS_ENV}.rb"
end

def reload_plugins?
@reload_plugins
end

# Holds generators configuration:
#
# config.generators do |g|
Expand Down
3 changes: 2 additions & 1 deletion railties/lib/rails/initializable.rb
Expand Up @@ -42,7 +42,8 @@ def initialize(initializers = [])
if initializer.before
index = index_for(initializer.before)
elsif initializer.after
index = index_for(initializer.after) + 1
index = index_for(initializer.after)
index += 1 if index
else
index = length
end
Expand Down
14 changes: 2 additions & 12 deletions railties/lib/rails/initializer.rb
@@ -1,14 +1,4 @@
require "pathname"

require 'rails/initializable'
require 'rails/application'
require 'rails/railties_path'
require 'rails/version'
require 'rails/rack'
require 'rails/paths'
require 'rails/core'
require 'rails/configuration'
require 'rails/deprecation'
require "rails" # In case people require this file directly

RAILS_ENV = (ENV['RAILS_ENV'] || 'development').dup unless defined?(RAILS_ENV)

Expand All @@ -24,4 +14,4 @@ def self.run(initializer = nil, config = nil)
end
end
end
end
end
6 changes: 5 additions & 1 deletion railties/lib/rails/paths.rb
Expand Up @@ -64,7 +64,7 @@ def push(*)
end

class Path
include PathParent
include PathParent, Enumerable

attr_reader :path
attr_accessor :glob
Expand All @@ -83,6 +83,10 @@ def initialize(root, *paths)
@root.all_paths << self
end

def each
to_a.each { |p| yield p }
end

def push(path)
@paths.push path
end
Expand Down

0 comments on commit 82b9b15

Please sign in to comment.