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