class Orchestrator::Core::RequestsProxy
Attributes
trace[R]
Public Class Methods
new(thread, modules, user = nil)
click to toggle source
# File lib/orchestrator/core/requests_proxy.rb, line 9 def initialize(thread, modules, user = nil) if modules.nil? @modules = [] else @modules = modules.is_a?(Array) ? modules : [modules] end @thread = thread @user = user @trace = [] end
Public Instance Methods
[](index)
click to toggle source
# File lib/orchestrator/core/requests_proxy.rb, line 48 def [](index) mod = @modules[index] return nil unless mod return RequestProxy.new(@thread, mod, @user) end
Also aliased as: at
each() { |request_proxy| ... }
click to toggle source
Provide Enumerable support
# File lib/orchestrator/core/requests_proxy.rb, line 25 def each return enum_for(:each) unless block_given? @modules.each do |mod| yield RequestProxy.new(@thread, mod, @user) end end
first()
click to toggle source
# File lib/orchestrator/core/requests_proxy.rb, line 42 def first mod = @modules.first return nil unless mod return RequestProxy.new(@thread, mod, @user) end
last()
click to toggle source
# File lib/orchestrator/core/requests_proxy.rb, line 36 def last mod = @modules.last return nil unless mod return RequestProxy.new(@thread, mod, @user) end
method_missing(name, *args, &block)
click to toggle source
# File lib/orchestrator/core/requests_proxy.rb, line 64 def method_missing(name, *args, &block) if ::Orchestrator::Core::PROTECTED[name] err = Error::ProtectedMethod.new "attempt to access a protected method '#{name}' in multiple modules" ::Libuv::Q.reject(@thread, err) # TODO:: log warning err.message else @trace = caller promises = @modules.map do |mod| defer = mod.thread.defer mod.thread.schedule do # Keep track of previous in case of recursion previous = nil begin if @user previous = mod.current_user mod.current_user = @user end defer.resolve( mod.instance.public_send(name, *args, &block) ) rescue => e mod.logger.print_error(e, '', @trace) defer.reject(e) ensure mod.current_user = previous if @user end end defer.promise end @thread.finally(*promises) end end
nil?()
click to toggle source
Returns true if there is no object to proxy Allows RequestProxy
and RequestsProxy
to be used interchangably
@return [true|false]
# File lib/orchestrator/core/requests_proxy.rb, line 59 def nil? @modules.empty? end