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