module SADI::AsynchronousService

Public Class Methods

classes() click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 16
def self.classes
  @classes
end
extended(base) click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 11
def self.extended(base)
  @classes ||= []
  @classes << base
end
included(base) click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 6
def self.included(base)
  @classes ||= []
  @classes << base
end

Public Instance Methods

generate_job_id() click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 26
def generate_job_id
  # TODO better poll URLs

  # "#{service_name}_#{Time.now.nsec.to_s(32)}"
  Time.now.nsec.to_s(32)
end
jobs() click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 20
def jobs
  # Yay not thread safety!

  @jobs ||= {}
end
poll(job_id) click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 62
def poll(job_id)
  jobs[job_id]
end
process_input(input, format, poll_base) click to toggle source
# File lib/sadi-rb/asynchronous_service.rb, line 33
def process_input(input, format, poll_base)
  job_id = generate_job_id

  raise "Job already exists (#{job_id})" if jobs[job_id]

  jobs[job_id] = nil

  Thread.new do

    gr = RDF::Graph.new
    in_graph = parse_string(input,format)

    input_objects(in_graph).each do |obj|
      gr << process_object(in_graph, obj)
    end

    jobs[job_id] = gr
  end

  gr = RDF::Graph.new
  out_class = output_classes.first
  input_objects(parse_string(input,format)).each do |obj|
    gr << RDF::Statement.new(obj, RDF.type, out_class)
    gr << RDF::Statement.new(obj, RDF::RDFS.isDefinedBy, RDF::URI("#{poll_base}/#{job_id}"))
  end

  gr
end