Module: LambdaDriver::Context

Defined in:
lib/lambda_driver/context.rb

Constant Summary collapse

Identify =
lambda{|f, x| f.call(x) }
Maybe =
lambda{|f, x|
  mzero_method = x.respond_to?(:mzero?) ? :mzero? : :nil?
  x.send(mzero_method) ? x : f.call(x)
}
List =
lambda{|f, x| x.map(&f) }
Reader =
lambda{|f, (r, x)|
  # set reader env to thread local
  Thread.current[:lambda_driver_reader_ctx_ask] = r
  # define ask method to access context of reader
  f.binding.eval("    def ask\n      Thread.current[:lambda_driver_reader_ctx_ask]\n    end\n  CODE\n\n  begin\n    [r, f.call(x)]\n  ensure\n    # tear down reader context\n    Thread.current[:lambda_driver_reader_ctx_ask] = nil\n    f.binding.eval(\"undef ask\")\n  end\n}\n")
Writer =
lambda{|f, (x, w)|
  pool = w || []

  # set writer pool to thread local
  Thread.current[:lambda_driver_writer_ctx_pool] = pool
  # define tell method to write log to context
  f.binding.eval("    def tell(s)\n      pool = Thread.current[:lambda_driver_writer_ctx_pool]\n      pool <<  s\n    end\n  CODE\n\n  begin\n    [f.call(x), pool]\n  ensure\n    # tear down reader context\n    Thread.current[:lambda_driver_writer_ctx_pool] = nil\n    f.binding.eval(\"undef tell\")\n  end\n}\n")

Class Method Summary collapse

Class Method Details

.[](name) ⇒ Object



54
55
56
57
# File 'lib/lambda_driver/context.rb', line 54

def self.[](name)
  name = name.to_s.capitalize
  const_defined?(name) && const_get(name)
end