class Homerun::Instruction

Attributes

ctx[R]
steps[R]

Public Class Methods

call(_ctx) { |ctx| ... } click to toggle source
# File lib/homerun.rb, line 36
def self.call(_ctx)
  instance.set_ctx(_ctx)

  cur = 0

  while cur < instance.steps.count do
    step = instance.steps[cur]

    pos = ->(_name) {
      instance.steps.index(instance.steps.find { |x| x[:name] == _name })
    }

    if step[:item].call(instance.ctx)
      if step[:success]
        cur = pos.call(step[:success])
        next
      else
        cur += 1
      end
    else
      if step[:failure]
        cur = pos.call(step[:failure])
        next
      else
        instance.set_pass(false)
        cur = instance.steps.count
      end
    end
  end

  if block_given?
    yield(instance.ctx) if instance.ctx[:_pass]
  end

  instance.ctx
end
new() click to toggle source
Calls superclass method
# File lib/homerun.rb, line 13
def initialize
  super

  @steps = []
  @ctx = { _pass: true }
end
step(item, failure: nil, success: nil, name: nil) click to toggle source
# File lib/homerun.rb, line 32
def self.step(item, failure: nil, success: nil, name: nil)
  instance.add_step({ item: item, failure: failure, success: success, name: name })
end

Public Instance Methods

add_step(step) click to toggle source
# File lib/homerun.rb, line 20
def add_step(step)
  @steps << step
end
set_ctx(_ctx) click to toggle source
# File lib/homerun.rb, line 24
def set_ctx(_ctx)
  @ctx = { **ctx, **_ctx }
end
set_pass(val) click to toggle source
# File lib/homerun.rb, line 28
def set_pass(val)
  @ctx[:_pass] = val
end