Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
- index 086f67a..cb32153 100644
- --- a/railties/lib/rails/configuration.rb
- +++ b/railties/lib/rails/configuration.rb
- @@ -1,6 +1,24 @@
- require 'active_support/ordered_options'
- module Rails
- + # Create a Plugin::Options from ActiveSuppot::OrderedOptions,
- + # which support the following syntax:
- + #
- + # controller.action_controller.include FooBar
- + #
- + class Plugin::Options < ActiveSupport::OrderedOptions #:nodoc:
- + attr_reader :includes
- +
- + def initialize(*args)
- + @includes = []
- + super
- + end
- +
- + def include(*args)
- + @includes.concat(args)
- + end
- + end
- +
- # Temporarily separate the plugin configuration class from the main
- # configuration class while this bit is being cleaned up.
- class Plugin::Configuration
- @@ -16,7 +34,7 @@ module Rails
- @options = base.options.dup
- @middleware = base.middleware.dup
- else
- - @options = Hash.new { |h,k| h[k] = ActiveSupport::OrderedOptions.new }
- + @options = Hash.new { |h,k| h[k] = Rails::Plugin::Options.new }
- @middleware = ActionDispatch::MiddlewareStack.new
- end
- end
- diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
- index 0699aff..aa325c6 100644
- --- a/railties/lib/rails/plugin.rb
- +++ b/railties/lib/rails/plugin.rb
- @@ -25,6 +25,24 @@ module Rails
- Configuration.default
- end
- + # Creates an initializer which includes all given modules to the given class.
- + #
- + # module Rails
- + # class ActionController < Rails::Plugin
- + # plugin_name :action_controller
- + # include_modules_in "ActionController::Base"
- + # end
- + # end
- + #
- + def self.include_modules_in(klass, from=plugin_name)
- + self.initializer :"#{from}.include_modules" do |app|
- + klass = klass.constantize if klass.is_a?(String)
- + app.config.send(from).includes.each do |mod|
- + klass.send(:include, mod.is_a?(String) ? mod.constantize : mod)
- + end
- + end
- + end
- +
- class Vendored < Plugin
- def self.all(list, paths)
- plugins = []
- diff --git a/railties/test/plugins/configuration_test.rb b/railties/test/plugins/configuration_test.rb
- index 5786316..0843d05 100644
- --- a/railties/test/plugins/configuration_test.rb
- +++ b/railties/test/plugins/configuration_test.rb
- @@ -8,6 +8,10 @@ module PluginsTest
- require "rails"
- end
- + module Bar; end
- + module Baz; end
- + module All; end
- +
- test "config is available to plugins" do
- class Foo < Rails::Plugin ; end
- assert_nil Foo.config.action_controller.foo
- @@ -24,6 +28,18 @@ module PluginsTest
- assert_equal "hello", AppTemplate::Application.config.foo.greetings
- end
- + test "plugin configurations allow modules to be given" do
- + class Foo < Rails::Plugin ; config.foo.include(Bar, Baz) ; end
- + assert_equal [Bar, Baz], Foo.config.foo.includes
- + end
- +
- + test "plugin includes given modules in given class" do
- + class Foo < Rails::Plugin ; config.foo.include(Bar, "PluginsTest::ConfigurationTest::Baz") ; include_modules_in All ; end
- + Foo.new.run_initializers(Foo)
- + assert All.ancestors.include?(Bar)
- + assert All.ancestors.include?(Baz)
- + end
- +
- test "plugin config merges are deep" do
- class Foo < Rails::Plugin ; config.foo.greetings = 'hello' ; end
- class MyApp < Rails::Application
Add Comment
Please, Sign In to add comment