class AppMgr

Attributes

app[R]

Public Class Methods

new(rsf: nil, reg: nil, rsc: nil, debug: true) click to toggle source
# File lib/app-mgr.rb, line 12
def initialize(rsf: nil, reg: nil, rsc: nil, debug: true)
  
  @rsf, @reg, @rsc, @debug = rsf, reg, rsc, debug
  @rscript = RScript.new(type: 'app', debug: debug)    
  @app = {}

  load_all(rsf)
  
end

Public Instance Methods

available() click to toggle source
# File lib/app-mgr.rb, line 22
def available()
  @app.keys
end
call(app_name) click to toggle source
# File lib/app-mgr.rb, line 26
def call(app_name)
  
  run(app_name) unless running? app_name
  @app[app_name.to_sym][:running].call
  
end
connect(name) { |app| ... } click to toggle source
# File lib/app-mgr.rb, line 53
def connect(name)

  app = @app[name.to_sym]
  
  if app and app[:running] then 
    yield(app[:running])
  else
    return "app %s not running" % name
  end
  
end
execute(name, method, params='') click to toggle source
# File lib/app-mgr.rb, line 33
def execute(name, method, params='')
  @app[name.to_sym][:running].method(method.to_sym).call(params)
end
run(name) click to toggle source
# File lib/app-mgr.rb, line 37
def run(name)

  app = @app[name.to_sym]
  class_name = app[:code][/(?<=class )\w+/]    
  app[:running] = eval(class_name + '.new')

end
running() click to toggle source
# File lib/app-mgr.rb, line 45
def running()
  @app.select {|k,v| v[:running]}.keys
end
running?(name) click to toggle source
# File lib/app-mgr.rb, line 49
def running?(name)
  @app[name.to_sym][:running] ? true : false
end
stop(name) click to toggle source
# File lib/app-mgr.rb, line 65
def stop(name)

  app = @app[name.to_sym]

  if app.delete(:running) then
    return "app %s stopped" % name
  else
    return "couldn't find app %s" % name
  end
  
end
unload(name) click to toggle source
# File lib/app-mgr.rb, line 77
def unload(name)

  class_name = @app[name.to_sym][:running].class.name
  
  if class_name then
    Object.send(:remove_const, class_name)
    @app.delete name.to_sym
    return "app %s unloaded" % name
  else
    return "couldn't find app %s" % name
  end
  
end

Private Instance Methods

load_all(rsf_package) click to toggle source
# File lib/app-mgr.rb, line 93
def load_all(rsf_package)

  @rscript.jobs(rsf_package).each do |app_name|

    puts 'app_name: ' + app_name.inspect if @debug
    app = @app[app_name] = {}

    codeblock = @rscript.read(['//app:' + app_name.to_s, @rsf]).first      
    puts 'codeblock: ' + codeblock.inspect if @debug
    app[:code] = codeblock
    
    reg, rsc = @reg, @rsc      
    eval codeblock
    
  end

end