module EndpointFlux::Endpoint

Public Class Methods

included(includer) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 7
def self.included(includer)
  includer.extend self
  includer.class_eval %( @middlewares ||= {} )
end

Public Instance Methods

flow(array = nil) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 27
def flow(array = nil)
  @flow = array.map(&:to_sym) if array
  @flow || EndpointFlux.config.flow
end
method_missing(method_id, *attrs, &block) click to toggle source
Calls superclass method
# File lib/endpoint_flux/endpoint.rb, line 32
def method_missing(method_id, *attrs, &block)
  method_sym = method_id.to_sym
  if flow.include?(method_sym)
    configure_middleware(method_sym, attrs, &block)
  else
    super
  end
end
perform(request) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 12
def perform(request)
  attrs = [request, EndpointFlux::Response.new]
  attrs = EndpointFlux.config.interceptor.run(attrs)

  request.endpoint = to_s

  flow.inject(attrs) do |res, middleware_name|
    fetch_middleware(middleware_name).inject(res) do |middleware_res, middleware|
      middleware.run(middleware_res)
    end
  end
rescue *EndpointFlux.config.rescue_from.exceptions => e
  EndpointFlux.config.rescue_from.run(name, attrs, e)
end
respond_to_missing?(method_name) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 41
def respond_to_missing?(method_name)
  flow.include?(method_name.to_sym)
end

Private Instance Methods

build_middleware(middleware_name, *options, &block) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 62
def build_middleware(middleware_name, *options, &block)
  attrs = []
  unless options.empty?
    klass = EndpointFlux.config.fetch_middleware_class(middleware_name, options.first)

    if klass
      attrs << klass
      attrs << options[1..-1]
    else
      attrs << nil
      attrs << options
    end
  end

  return if attrs.empty? && !block_given?

  EndpointFlux::Config::Middleware.new(*attrs.flatten, &block)
end
configure_middleware(middleware_name, attrs, &block) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 47
def configure_middleware(middleware_name, attrs, &block)
  @middlewares[middleware_name] ||= []

  middleware = build_middleware(middleware_name, *attrs, &block)
  @middlewares[middleware_name] << middleware if middleware

  @middlewares[middleware_name]
end
fetch_middleware(name) click to toggle source
# File lib/endpoint_flux/endpoint.rb, line 56
def fetch_middleware(name)
  @middlewares[name] ||
    EndpointFlux.config.default_middlewares[name] ||
    raise("No middleware registred for [#{name.inspect}]")
end