class BabaScript::Baba
Public Class Methods
new(opts)
click to toggle source
# File lib/babascript/baba.rb, line 8 def initialize(opts) @base = opts[:base] || "http://linda.masuilab.org" @space = opts[:space] || "takumibaba" end
Public Instance Methods
linda()
click to toggle source
# File lib/babascript/baba.rb, line 13 def linda @linda ||= EM::RocketIO::Linda::Client.new @base end
method_missing(name, *args, &block)
click to toggle source
# File lib/babascript/baba.rb, line 39 def method_missing(name, *args, &block) cid = __create_callback_id tuple = [:babascript, :eval, name, args, {:callback => cid}] ts = linda.tuplespace[@space] ts.write tuple if block_given? ts.take [:babascript, :return, cid] do |result, info| next if result.size < 4 block.call result[3] end else result = ts.take [:babascript, :return, cid] return result[3] end end
run(code=nil, &block)
click to toggle source
# File lib/babascript/baba.rb, line 17 def run(code=nil, &block) raise ArgumentError "block or code require" unless block_given? or code.kind_of? String already_eventmachine_running = EM::reactor_running? this = self EM::run do linda.io.once :connect do EM::defer do if block_given? this.instance_eval &block else this.instance_eval code end unless already_eventmachine_running EM::add_timer 1 do EM::stop end end end end end end
Private Instance Methods
__create_callback_id()
click to toggle source
# File lib/babascript/baba.rb, line 56 def __create_callback_id Digest::MD5.hexdigest "#{Time.now.to_i}_#{Time.now.usec}_#{rand 100000}" end