module Railway

Public Class Methods

included(base) click to toggle source
# File lib/railway.rb, line 17
def self.included(base)
  base.send :extend, DSL
end

Public Instance Methods

call(input = {}) click to toggle source
# File lib/railway.rb, line 21
def call(input = {})
  steps = self.class.steps

  return Failure('No steps') if steps.empty?

  steps.
    inject(Success(input)) {|result, step|
      result.and_then {|data|
        dispatch_step(step, data)
      }
    }
end

Private Instance Methods

dispatch_step(step, data) click to toggle source
# File lib/railway.rb, line 35
def dispatch_step(step, data)
  begin
    result = (step[:with] || self).send(step[:name], data)
    result.is_a?(Result::Base) ? result : Success(result)
  rescue => error
    Failure(error)
  end
end