class Slack::Notifier::PayloadMiddleware::Stack

Attributes

notifier[R]
stack[R]

Public Class Methods

new(notifier) click to toggle source
# File lib/slack-notifier/payload_middleware/stack.rb, line 10
def initialize notifier
  @notifier = notifier
  @stack    = []
end

Public Instance Methods

call(payload={}) click to toggle source
# File lib/slack-notifier/payload_middleware/stack.rb, line 28
def call payload={}
  result = stack.inject payload do |pld, middleware|
    as_array(pld).flat_map do |p|
      middleware.call(p)
    end
  end

  as_array(result)
end
set(*middlewares) click to toggle source
# File lib/slack-notifier/payload_middleware/stack.rb, line 15
def set *middlewares
  middlewares =
    if middlewares.length == 1 && middlewares.first.is_a?(Hash)
      middlewares.first
    else
      middlewares.flatten
    end

  @stack = middlewares.map do |key, opts|
    PayloadMiddleware.registry.fetch(key).new(*[notifier, opts].compact)
  end
end

Private Instance Methods

as_array(args) click to toggle source
# File lib/slack-notifier/payload_middleware/stack.rb, line 40
def as_array args
  if args.respond_to?(:to_ary)
    args.to_ary
  else
    [args]
  end
end