class FSEvent::ProcessDevice::Spawner
Public Class Methods
new(defs)
click to toggle source
# File lib/fsevent/processdevice.rb, line 24 def initialize(defs) @defs = defs end
Public Instance Methods
assemble_code(device_name, *args)
click to toggle source
# File lib/fsevent/processdevice.rb, line 28 def assemble_code(device_name, *args) code = '' libpath = File.dirname(File.dirname(__FILE__)) code << "$:.unshift #{libpath.dump}\n" code << <<-'End' require 'fsevent' def ep(arg) STDERR.puts arg.inspect end End code << "class FSEvent::ProcessDevice_#{device_name} < FSEvent::ProcessDeviceC\n#{@defs}\nend\n" marshaled_args = Marshal.dump(args) code << "FSEvent::ProcessDeviceC.main(FSEvent::ProcessDevice_#{device_name}.new(#{device_name.dump}, *(Marshal.load(#{marshaled_args.dump}))))\n" end
new(device_name, *args)
click to toggle source
# File lib/fsevent/processdevice.rb, line 44 def new(device_name, *args) code = assemble_code(device_name, *args) io = IO.popen([RbConfig.ruby], "r+") io.sync = true io.write code io.write "__END__\n" FSEvent::ProcessDevice.send(:new, device_name, io) end