Class: Isono::Rack::Job

Inherits:
Decorator show all
Includes:
Logger
Defined in:
lib/isono/rack/job.rb

Defined Under Namespace

Classes: JobRequest, JobResponse

Instance Attribute Summary

Attributes inherited from Decorator

#app

Instance Method Summary collapse

Methods included from Logger

included, initialize

Constructor Details

#initialize(app, job_worker) ⇒ Job

Returns a new instance of Job.



35
36
37
38
# File 'lib/isono/rack/job.rb', line 35

def initialize(app, job_worker)
  super(app)
  @job_worker = job_worker
end

Instance Method Details

#call(req, res) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/isono/rack/job.rb', line 40

def call(req, res)
  job = @job_worker.start do |job|
    job.job_id = req.r[:job_id]
    job.parent_job_id = req.r[:parent_job_id]
    job.run_cb = proc {
      begin
        @app.call(JobRequest.new(req.r, job), JobResponse.new(res.ctx, job))
        res.response(nil) unless res.responded?
      rescue Exception => e
        res.response(e) unless res.responded?
        raise e
      end
    }
  end

  # send the new job context info back as the first progress message.
  # the progress messages that follow will be handled as usual.
  res.progress(job.to_hash)
end