class Elementary::Executor

Attributes

service[R]
transport[R]

Public Class Methods

new(service, transport, future_opts={}) click to toggle source
# File lib/elementary/executor.rb, line 6
def initialize(service, transport, future_opts={})
  @service = service
  @transport = transport
  @future_opts = future_opts
end

Public Instance Methods

method_missing(method_name, *params) click to toggle source
# File lib/elementary/executor.rb, line 12
def method_missing(method_name, *params)
  rpc_method = service.rpcs[method_name.to_sym]
  # XXX: explode if rpc_method is nil

  future = Elementary::Future.new(@future_opts) do
    # This is effectively a Rack middleware stack. yay.
    #
    # Easiest to think of it like this:
    #   Statsd.new(HTTP.new(nil))
    stack = Elementary.middleware.inject(transport) do |accumulator, middleware|
      klass = middleware.first
      options = middleware.last
      klass.new(accumulator, options)
    end

    stack.call(service, rpc_method, *params)
  end

  return future.execute
end