Module: AfterResponse
- Defined in:
- lib/after_response.rb,
lib/after_response/callbacks.rb,
lib/after_response/adapters/unicorn_middleware.rb
Defined Under Namespace
Modules: Adapters, Callbacks
Constant Summary
collapse
- CONTAINER_ADAPTERS =
[
OpenStruct.new(
:name => :passenger3,
:test => lambda{ defined?(PhusionPassenger) && PhusionPassenger::AbstractRequestHandler.private_instance_methods.include?("accept_and_process_next_request") },
:lib => 'after_response/adapters/passenger3'
),
OpenStruct.new(
:name => :passenger2,
:test => lambda{ defined?(PhusionPassenger) && ['2.2.14', '2.2.15'].include?(PhusionPassenger::VERSION_STRING) },
:lib => 'after_response/adapters/passenger2_2'
),
OpenStruct.new(
:name => :unicorn_middleware,
:test => lambda{
defined?(Unicorn) &&
defined?(Rails) &&
ActionController::Dispatcher.middleware.active.detect{|m| m == AfterResponse::Adapters::UnicornMiddleware }
}
),
OpenStruct.new(
:name => :unicorn_monkeypatch,
:test => lambda{ defined?(Unicorn) },
:lib => 'after_response/adapters/unicorn_monkeypatch'
)
]
Class Method Summary
collapse
Class Method Details
.append_after_response(&block) ⇒ Object
.append_transient_after_response(&block) ⇒ Object
.attach_to_current_container! ⇒ Object
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/after_response.rb', line 34
def self.attach_to_current_container!
return if @after_response_attached
if current_container
require(current_container.lib) if current_container.lib
@after_response_attached = true
logger.info{ "[AfterResponse] => Callback hook installed for #{current_container.name}" }
else
logger.info{ "[AfterResponse] => No supported container found. AfterResponse will not buffer." }
end
end
|
.buffer_and_flush_manually! ⇒ Object
If a container adapter isn’t available, this method can be called to enable the buffering of events, and Starboard::EventQueue.flush! must be called manually
62
63
64
65
66
67
68
|
# File 'lib/after_response.rb', line 62
def self.buffer_and_flush_manually!
@after_response_attached ||= begin
raise "Callback hook already installed for #{current_container.name}" if current_container
logger.info{ "[AfterResponse] => Will flush manually" }
true
end
end
|
.bufferable? ⇒ Boolean
AfterResponse is in a bufferable state mode only if it is running under a supported container where an after_response callback hook was installed and if an after_response callback was installed that calls Starboard::EventQueue.flush!
56
57
58
|
# File 'lib/after_response.rb', line 56
def self.bufferable?
@after_response_attached
end
|
.callbacks ⇒ Object
3
4
5
|
# File 'lib/after_response/callbacks.rb', line 3
def self.callbacks
Callbacks.callbacks
end
|
.current_container ⇒ Object
49
50
51
|
# File 'lib/after_response.rb', line 49
def self.current_container
@current_container ||= CONTAINER_ADAPTERS.detect{|c| c.test.call }
end
|
.logger ⇒ Object
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/after_response.rb', line 70
def self.logger
@logger ||= begin
if defined?(Rails)
Rails.logger
else
require 'logger'
Logger.new($stdout)
end
end
end
|
.reset! ⇒ Object
45
46
47
|
# File 'lib/after_response.rb', line 45
def self.reset!
@after_response_attached = @current_container = @logger = nil
end
|
.transient_callbacks ⇒ Object