class Plumb::Pipeline

def step(callable = nil, &block)

def step(callable = nil, &block)
  callable ||= block
  unless is_a_step?(callable)
    raise ArgumentError,
          "#step expects an interface #call(Result) Result, but got #{callable.inspect}"
  end
  callable = prepare_step(callable)
  callable = @around_blocks.reverse.reduce(callable) { |cl, bl| AroundStep.new(cl, bl) } if @around_blocks.any?
  @type >>= callable
  self
end