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