Class: Textus::Handlers::Write::EnqueueJob

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/handlers/write/enqueue_job.rb

Instance Method Summary collapse

Constructor Details

#initialize(job_store:) ⇒ EnqueueJob

Returns a new instance of EnqueueJob.



5
6
7
# File 'lib/textus/handlers/write/enqueue_job.rb', line 5

def initialize(job_store:)
  @job_store = job_store
end

Instance Method Details

#call(command, call) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/textus/handlers/write/enqueue_job.rb', line 9

def call(command, call)
  action_class = Textus::Jobs.fetch(command.type.to_s)

  if action_class.const_defined?(:REQUIRED_ROLE) && call.role != action_class::REQUIRED_ROLE
    return Value::Result.failure(:forbidden,
                                 "role '#{call.role}' is not authorized to enqueue this job type",
                                 details: { "role" => call.role, "required_role" => action_class::REQUIRED_ROLE })
  end

  job = Textus::Store::Jobs::Queue::Job.new(type: command.type, args: command.args, role: call.role, max_attempts: 3)
  Textus::Store::Jobs::Queue.new(store: @job_store).enqueue(job)
  Value::Result.success("protocol" => Textus::PROTOCOL, "ok" => true, "id" => job.id)
rescue Textus::UsageError
  Value::Result.failure(:usage_error, "unregistered job type '#{command.type}'")
end