class AsyncResponse::Builder
Attributes
expires_at[R]
job_key[R]
worker_class[R]
Public Class Methods
new(worker_class, expires_at, job_key)
click to toggle source
# File lib/async_response/builder.rb, line 5 def initialize(worker_class, expires_at, job_key) @worker_class = worker_class @expires_at = expires_at @job_key = job_key end
Public Instance Methods
build(params)
click to toggle source
# File lib/async_response/builder.rb, line 11 def build(params) job = async_job || create_job(params) response = respond_with(job) # Set job as shown, needs to display at least once # before we discount it due to expiry job.shown! if job.finished? response end
Private Instance Methods
async_job()
click to toggle source
# File lib/async_response/builder.rb, line 22 def async_job @async_job ||= AsyncResponse::Job.valid_job(job_type, hashed_job_key) end
create_job(params)
click to toggle source
# File lib/async_response/builder.rb, line 27 def create_job(params) @new_job ||= AsyncResponse::Job.create!( job_type: job_type, job_key: hashed_job_key, expires_at: expires_at || Time.zone.now, params: params ) schedule_job(@new_job) @new_job end
respond_with(job)
click to toggle source
# File lib/async_response/builder.rb, line 39 def respond_with(job) { # Shown is only internally applicable, indistinguishable # from finished as far as a user is concerned status: job.shown? ? 'finished' : job.status, percentage_completion: job.percentage_completion, data: job.data, error: job.error } end
schedule_job(job)
click to toggle source
# File lib/async_response/builder.rb, line 50 def schedule_job(job) worker_class.perform_async(job.id) end