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