123456789_123456789_123456789_123456789_123456789_

Class: Rails::Configuration::MiddlewareStackProxy

Relationships & Source Files
Inherits: Object
Defined in: railties/lib/rails/configuration.rb

Overview

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 {Rack::Head}, {Magical::Unicorns}

There's also #insert_after which will insert a middleware after another:

config.middleware.insert_after {Rack::Head}, {Magical::Unicorns}

Middlewares can also be completely swapped out and replaced with others:

config.middleware.swap {ActionDispatch::Flash}, {Magical::Unicorns}

Middlewares can be moved from one place to another:

config.middleware.move_before {ActionDispatch::Flash}, {Magical::Unicorns}

This will move the Magical::Unicorns middleware before the ::ActionDispatch::Flash. You can also move it after:

config.middleware.move_after {ActionDispatch::Flash}, {Magical::Unicorns}

And finally they can also be removed from the stack completely:

config.middleware.delete {ActionDispatch::Flash}

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(operations = [], delete_operations = []) ⇒ MiddlewareStackProxy

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 62

def initialize(operations = [], delete_operations = [])
  @operations = operations
  @delete_operations = delete_operations
end

Instance Attribute Details

#delete_operations (readonly, protected)

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 116

attr_reader :operations, :delete_operations

#operations (readonly, protected)

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 116

attr_reader :operations, :delete_operations

Instance Method Details

#+(other)

This method is for internal use only.
[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 111

def +(other) # :nodoc:
  MiddlewareStackProxy.new(@operations + other.operations, @delete_operations + other.delete_operations)
end

#delete

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 85

def delete(...)
  @delete_operations << -> middleware { middleware.delete(...) }
end

#insert

Alias for #insert_before.

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 71

alias :insert :insert_before

#insert_after

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 73

def insert_after(...)
  @operations << -> middleware { middleware.insert_after(...) }
end

#insert_before Also known as: #insert

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 67

def insert_before(...)
  @operations << -> middleware { middleware.insert_before(...) }
end

#merge_into(other)

This method is for internal use only.
[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 103

def merge_into(other) # :nodoc:
  (@operations + @delete_operations).each do |operation|
    operation.call(other)
  end

  other
end

#move

Alias for #move_before.

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 93

alias :move :move_before

#move_after

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 95

def move_after(...)
  @delete_operations << -> middleware { middleware.move_after(...) }
end

#move_before Also known as: #move

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 89

def move_before(...)
  @delete_operations << -> middleware { middleware.move_before(...) }
end

#swap

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 77

def swap(...)
  @operations << -> middleware { middleware.swap(...) }
end

#unshift

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 99

def unshift(...)
  @operations << -> middleware { middleware.unshift(...) }
end

#use

[ GitHub ]

  
# File 'railties/lib/rails/configuration.rb', line 81

def use(...)
  @operations << -> middleware { middleware.use(...) }
end