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