class RScript

Public Class Methods

new(log: nil, pkg_src: '', cache: 5, debug: false, type: 'job') click to toggle source
Calls superclass method RScriptBase::new
# File lib/rscript.rb, line 54
def initialize(log: nil, pkg_src: '', cache: 5, debug: false, type: 'job')
  
  puts 'inside RScript' if @debug
  @log = log
  @cache = cache
  @rsf_cache = HashCache.new({cache: cache}) if cache and cache > 0
  @jobname = type
  super(debug: debug)
  
end

Public Instance Methods

jobs(package) click to toggle source
# File lib/rscript.rb, line 65
def jobs(package)
  a = read_rsfdoc([package])  
  a.map(&:first).uniq
end
read(raw_args=[]) click to toggle source
# File lib/rscript.rb, line 70
def read(raw_args=[])
    
  puts 'inside read' if @debug
  args = raw_args.clone
  @log.info 'RScript/read: args: '  + args.inspect if @log
  
  threads = []
  
  if args.to_s[/\/\/#{@jobname}:/] then 
   ajob = '' 
    args.each_index do |i| 
      if args[i].to_s[/\/\/#{@jobname}:/] then          
        ajob = $'; args[i] = nil
      end
    end

    args.compact!
    puts 'before read_rsfdoc' if @debug
    a = read_rsfdoc(args)      
    job = a.assoc(ajob.to_sym)
    out, attr = job.last[:code], job.last[:attributes]

    raise "job not found" unless out.length > 0
    out
    
  else    
    out = read_rsfdoc(args).map {|x| x.last[:code]}.join("\n")
  end    
        
  @log.info 'RScript/read: code: '  + out.inspect if @log

  [out, args, attr]
end
reset() click to toggle source
# File lib/rscript.rb, line 104
def reset()
  @rsf_cache.reset
end
run(raw_args, params={}, rws=self) click to toggle source

note: run() was copied from the development file rscript-wrapper.rb

# File lib/rscript.rb, line 109
def run(raw_args, params={}, rws=self)

  @log.info 'RScript/run: raw_args: ' + raw_args.inspect if @log
  puts 'raw_args: ' + raw_args.inspect if @debug
  
  if params and params[:splat] then
    params.each do  |k,v|
      params.delete k unless k == :splat or k == :package or k == :job or k == :captures
    end
  end

  if params and params[:splat] and params[:splat].length > 0 then
    h = params[:splat].first[1..-1].split('&').inject({}) do |r,x| 
      k, v = x.split('=')
      v ? r.merge(k[/\w+$/].to_sym => v) : r
    end
    params.merge! h
  end            
  
  code2, args, attr = self.read raw_args.clone
  puts 'code2 : ' + code2.inspect if @debug
  @log.info 'RScript/run: code2: ' + code2 if @log
  
  begin
    
    r = eval code2

    params = {}

    return r          

  rescue Exception => e  
    params = {}
    err_label = e.message.to_s + " :: \n" + e.backtrace.join("\n")      
    @log.debug 'rscrcript/error: ' + err_label if @log
    return err_label
  end

end

Private Instance Methods

build_a(rsfile) click to toggle source
# File lib/rscript.rb, line 151
def build_a(rsfile)
  
  buffer = read_sourcecode(rsfile) 
  puts 'buffer: ' + buffer.inspect if @debug
  
  doc =  Rexle.new(buffer)
  puts 'after Rexle' if @debug
  
  doc.root.xpath("//#{@jobname}").inject([]) do |r,x|
    puts 'x: ' + x.inspect if @debug
    codeblock = x.xpath('//script')\
        .map {|s| read_script(s)}.join("\n")
    r << [x.attributes[:id].to_sym, {attributes: x.attributes, 
                                          code: codeblock}]
  end        
  
end
read_rsfdoc(args=[]) click to toggle source
# File lib/rscript.rb, line 169
def read_rsfdoc(args=[])
  
  puts 'args: ' + args.inspect if @debug
  rsfile = args[0]; args.shift
  
  url = File.dirname  rsfile
  @url_dir = url[/(?:\w+:\/\/|.*)[^\/]*(\/.*)/,1]
  @url_base = url[/(\w+:\/\/[^\/]+|.*)/]   
  
  $rsfile = rsfile[/[^\/]+(?=\.rsf)/]
  
  a = @cache ? @rsf_cache.read(rsfile) { build_a(rsfile) } : build_a(rsfile)
  puts 'read_rsfdoc a: ' + a.inspect if @debug


      
  return a

end