def call(input, options = {})
      handler = handler_steps(options).map(&method(:step)).reduce(:>>)
      handler.call(input)
    rescue StepError => err
      raise TransactionFailedError.new(self, err)
    end
def call(input, options = {})
      handler = handler_steps(options).map(&method(:step)).reduce(:>>)
      handler.call(input)
    rescue StepError => err
      raise TransactionFailedError.new(self, err)
    end
Call the transaction

 Once transaction is called it will call the first step and its result
 will be passed to the second step and so on.

 @example
   my_container = {
     add_one: -> i { i + 1 },
     add_two: -> j { j + 2 }
   }

   transaction = Transflow(container: my_container) {
     step(:one, with: :add_one) { step(:two, with: :add_two) }
   }

   transaction.call(1) # 4

 @param [Object] input The input for the first step

 @param [Hash] options The curry-args map, optional

 @return [Object]

 @raises TransactionFailedError

 @api public