module Quick::Service
Public Instance Methods
eval(module_path, code, instance=true)
click to toggle source
# File lib/quick/service.rb, line 63 def eval(module_path, code, instance=true) mod = resolve_path module_path if instance [true, mod.quick_instance.quick_binding.eval(code).inspect] else [true, mod.quick_binding.eval(code).inspect] end rescue => e [false, e.message] end
hibernate()
click to toggle source
# File lib/quick/service.rb, line 58 def hibernate @hibernating = true stop end
mount_point()
click to toggle source
# File lib/quick/service.rb, line 103 def mount_point @mount_point end
new_mod(parent_path, name, super_path=nil)
click to toggle source
# File lib/quick/service.rb, line 74 def new_mod(parent_path, name, super_path=nil) parent = resolve_path parent_path unless super_path parent.const_set name, Module.new else superclass = resolve_path super_path parent.const_set name, Class.new(superclass) end name end
pries()
click to toggle source
# File lib/quick/service.rb, line 85 def pries @pries ||= {} end
pry_at(module_path, instance=true)
click to toggle source
# File lib/quick/service.rb, line 89 def pry_at(module_path, instance=true) mod = resolve_path module_path target = if instance mod.quick_instance.quick_binding else mod.quick_binding end if pries.key? target pries[target] else pries[target] = target.remote_pry_em 'localhost', :auto end end
resolve_path(path)
click to toggle source
# File lib/quick/service.rb, line 107 def resolve_path(path) path = path.sub /\A(\/|\.|\.\.)/, '' parts = path.split '/' parts.inject(Object) {|mod, name| mod.const_get name} end
run(mount_point)
click to toggle source
warning: run/stop/hibernate are pretty awful because I don’t actually know how to use EventMachine properly. If you know how to make these better, PLEASE feel free to submit a pull request!
# File lib/quick/service.rb, line 26 def run(mount_point) loop do raise "already running" if @running @mount_point = File.absolute_path mount_point @root = FS::ModuleDir.new Object Thread.new do FuseFS.start @root, @mount_point end EM.run do BrB::Service.start_service object: self @running = true end if @hibernating sleep 10 @hibernating = false else break end end ensure FuseFS.unmount end
stop()
click to toggle source
# File lib/quick/service.rb, line 49 def stop raise "not running" unless @running @running = false FuseFS.unmount FuseFS.exit BrB::Service.stop_service EM.stop end