Class: RailsMiddlewareDelegator
- Inherits:
-
Object
- Object
- RailsMiddlewareDelegator
- Defined in:
- lib/rails_middleware_delegator.rb,
lib/rails_middleware_delegator/version.rb
Overview
RailsMiddlewareDelegator
Used to wrap a reloadable class used as Rails middleware. In development mode with ‘cache_classes=false`, after each request all autoloaded modules and classes are unloaded. If one of these classes is used as Rails middleware, then it can cause the following error:
A copy of ZZZ has been removed from the module tree but is still active
This is because Rails will hold onto an instance of the class.
Instead of using the middleware class itself, use an instance of the delegator:
Rails.application.config.
middleware.use RailsMiddlewareDelegator.new('MyMiddlware')
Constant Summary collapse
- VERSION =
'0.1.0'.freeze
Instance Attribute Summary collapse
-
#initialization_args ⇒ Object
readonly
Returns the value of attribute initialization_args.
-
#klass ⇒ Object
readonly
Returns the value of attribute klass.
Instance Method Summary collapse
- #call(*args) ⇒ Object
- #class ⇒ Object
-
#initialize(klass) ⇒ RailsMiddlewareDelegator
constructor
A new instance of RailsMiddlewareDelegator.
- #new(*args) ⇒ Object
Constructor Details
#initialize(klass) ⇒ RailsMiddlewareDelegator
Returns a new instance of RailsMiddlewareDelegator.
25 26 27 |
# File 'lib/rails_middleware_delegator.rb', line 25 def initialize(klass) @klass = klass end |
Instance Attribute Details
#initialization_args ⇒ Object (readonly)
Returns the value of attribute initialization_args.
23 24 25 |
# File 'lib/rails_middleware_delegator.rb', line 23 def initialization_args @initialization_args end |
#klass ⇒ Object (readonly)
Returns the value of attribute klass.
23 24 25 |
# File 'lib/rails_middleware_delegator.rb', line 23 def klass @klass end |
Instance Method Details
#call(*args) ⇒ Object
38 39 40 |
# File 'lib/rails_middleware_delegator.rb', line 38 def call(*args) klass.constantize.new(*initialization_args).call(*args) end |
#class ⇒ Object
29 30 31 |
# File 'lib/rails_middleware_delegator.rb', line 29 def class klass end |
#new(*args) ⇒ Object
33 34 35 36 |
# File 'lib/rails_middleware_delegator.rb', line 33 def new(*args) @initialization_args = args Rails.env.development? ? self : klass.constantize.new(*args) end |