aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/configuration.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails/configuration.rb')
-rw-r--r--railties/lib/rails/configuration.rb65
1 files changed, 57 insertions, 8 deletions
diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index 0efa21d82c..0fb463c44d 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -6,17 +6,63 @@ require 'rails/rack'
module Rails
module Configuration
- class MiddlewareStackProxy #:nodoc:
+ module HttpOnly #:nodoc:
def initialize
- @operations = []
- @api_only = false
+ @http_only = false
end
- attr_reader :api_only
- alias :api_only? :api_only
+ def http_only!
+ @http_only = true
+ end
- def api_only!
- @api_only = true
+ def http_only?
+ @http_only
+ end
+ end
+
+ # MiddlewareStackProxy is a proxy for the Rails middleware stack that allows
+ # you to configure middlewares in your application. It works basically as a
+ # command recorder, saving each command to be applied after initialization
+ # over the default middleware stack, so you can add, swap, or remove any
+ # middleware in Rails.
+ #
+ # You can add your own middlewares by using the +config.middleware.use+ method:
+ #
+ # config.middleware.use Magical::Unicorns
+ #
+ # This will put the +Magical::Unicorns+ middleware on the end of the stack.
+ # You can use +insert_before+ if you wish to add a middleware before another:
+ #
+ # config.middleware.insert_before ActionDispatch::Head, Magical::Unicorns
+ #
+ # There's also +insert_after+ which will insert a middleware after another:
+ #
+ # config.middleware.insert_after ActionDispatch::Head, Magical::Unicorns
+ #
+ # Middlewares can also be completely swapped out and replaced with others:
+ #
+ # config.middleware.swap ActionDispatch::BestStandardsSupport, Magical::Unicorns
+ #
+ # And finally they can also be removed from the stack completely:
+ #
+ # config.middleware.delete ActionDispatch::BestStandardsSupport
+ #
+ # In addition to these methods to handle the stack, if your application is
+ # going to be used as an API endpoint only, the middleware stack can be
+ # configured like this:
+ #
+ # config.middleware.http_only!
+ #
+ # By doing this, Rails will create a smaller middleware stack, by not adding
+ # some middlewares that are usually useful for browser access only, such as
+ # Cookies, Session and Flash, BestStandardsSupport, and MethodOverride. You
+ # can always add any of them later manually if you want.
+ class MiddlewareStackProxy
+ include HttpOnly
+
+ def initialize
+ super
+ @operations = []
end
def insert_before(*args, &block)
@@ -41,7 +87,7 @@ module Rails
@operations << [:delete, args, block]
end
- def merge_into(other)
+ def merge_into(other) #:nodoc:
@operations.each do |operation, args, block|
other.send(operation, *args, &block)
end
@@ -53,7 +99,10 @@ module Rails
attr_accessor :aliases, :options, :templates, :fallbacks, :colorize_logging
attr_reader :hidden_namespaces
+ include HttpOnly
+
def initialize
+ super
@aliases = Hash.new { |h,k| h[k] = {} }
@options = Hash.new { |h,k| h[k] = {} }
@fallbacks = {}