class RScriptServer

Public Class Methods

new(raw_opts={}) click to toggle source
Calls superclass method
# File lib/rscript-server.rb, line 14
def initialize(raw_opts={})
  
  opts = {ip: '0.0.0.0', port: 4446, pkg_src: ''}.merge(raw_opts)
  @ip, @port, @url_base = opts[:ip], opts[:port], opts[:pkg_src]    
  super()

  #@app = AppRoutes.new(params)
  routes(@params)
  @rscript = RScript.new()

  @content_type = 'text/html'

end

Public Instance Methods

start() click to toggle source
# File lib/rscript-server.rb, line 28
def start

  server = TCPServer.new(@ip, @port)

  while (session = server.accept)

    raw_request = session.gets
    request = raw_request[/.[^\s]+(?= HTTP\/1\.\d)/].strip      
    puts "%s %s" % [Time.now,request]

    result = run_route(request)

    result ||= "404: page not found"

    session.print "HTTP/1.1 200/OK\r\nContent-type: #{@content_type}; charset=utf-8\r\n\r\n"
    session.print result
    session.close
  end
end

Private Instance Methods

routes(params) click to toggle source
# File lib/rscript-server.rb, line 50
def routes(params)

  get '/do/:package/:job' do |package,job|

    jobs = "//job:" + job
    url = "%s%s.rsf" % [@url_base, package] 
    run(url, jobs, params)
  end

  get '/do/:package/:job/*' do |package, job|

    jobs = "//job:" + job
    raw_args = params[:splat]
    args = raw_args.join.split('/')[1..-1]
    url = "%s%s.rsf" % [@url_base, package] 
    run(url, jobs, params, args)
  end

  get '/source/:package' do |package|

    url = "%s%s.rsf" % [@url_base, package]
    @content_type = 'text/plain'
    open(url, "UserAgent" => 'RscriptServer').read
  end

  get '/source/:package/:job' do |package, job|

    url = "%s%s.rsf" % [@url_base, package]
    buffer = open(url, "UserAgent" => 'RscriptServer').read            
    doc = Document.new(buffer)

    @content_type = 'text/plain'
    XPath.first(doc.root, "//job[@id='#{job}']").to_s
  end

  get '/reset' do |package, job|

    @rscript.reset

    @content_type = 'text/plain'
    "reset done"
  end


end
run(url, jobs, params={}, *qargs) click to toggle source
# File lib/rscript-server.rb, line 100
def run(url, jobs, params={}, *qargs)
  if params[:splat] and params[:splat].length > 0 then
    h = params[:splat].first[1..-1].split('&').inject({}) do |r,x| 
      k, v = x.split('=')
      r.merge(k.to_sym => v)
    end
    params.merge! h
  end

  result, args = run_rcscript(url, jobs, qargs)
  
  begin
    eval result
  #rescue
  #  "rws error: " + ($!).to_s
  rescue Exception => e  

    err_label = e.message + " :: \n" + e.backtrace.join("\n")      
    puts err_label      
    $!
  end
end
run_rcscript(rsf_url, jobs, raw_args=[]) click to toggle source
# File lib/rscript-server.rb, line 96
def run_rcscript(rsf_url, jobs, raw_args=[])
  @rscript.read([rsf_url, jobs.split(/\s/), raw_args].flatten)
end