class Kleisli::Runner
Attributes
start[R]
Public Class Methods
new(block_binding)
click to toggle source
# File lib/kleisli/run.rb, line 18 def initialize(block_binding) @hash = {} @stopped = false @start = false @o_self = block_binding.eval('self') end
Public Instance Methods
extract(val, m)
click to toggle source
# File lib/kleisli/run.rb, line 25 def extract(val, m) called = false @start = m unless @start m >-> i { called = true; set_value(val, i) } raise MonadTerminator.new(m) unless called get_value(val) end
get_value(k)
click to toggle source
# File lib/kleisli/run.rb, line 37 def get_value(k) @hash[k] end
method_missing(m, *args)
click to toggle source
# File lib/kleisli/run.rb, line 41 def method_missing(m, *args) case when @o_self.respond_to?(m) @o_self.send(m, *args) when args.first.kind_of?(Hash) && args.first[:from] && args.size == 1 extract(m, args.first[:from]) when args.empty? get_value(m) when m.to_s =~ /\=$/ set_value(m, args.first) else @o_self.send(m, *args) end end
set_value(k, v)
click to toggle source
# File lib/kleisli/run.rb, line 33 def set_value(k, v) @hash[k] = v end