class RailsCloudTasks::Adapter

Public Instance Methods

client() click to toggle source
# File lib/rails_cloud_tasks/adapter.rb, line 25
def client
  @client ||= Google::Cloud::Tasks.cloud_tasks
end
enqueue(job, timestamp = nil) click to toggle source
# File lib/rails_cloud_tasks/adapter.rb, line 7
def enqueue(job, timestamp = nil)
  path = client.queue_path(project: project_id, location: location_id, queue: job.queue_name)
  task = build_task(job, timestamp)

  begin
    client.create_task(parent: path, task: task)
  rescue Google::Cloud::FailedPreconditionError => e
    raise e if e.details != 'Queue does not exist.'

    client.create_queue(build_queue(path))
    retry
  end
end
enqueue_at(job, timestamp) click to toggle source
# File lib/rails_cloud_tasks/adapter.rb, line 21
def enqueue_at(job, timestamp)
  enqueue(job, timestamp.to_i)
end

Private Instance Methods

build_queue(path) click to toggle source
# File lib/rails_cloud_tasks/adapter.rb, line 49
def build_queue(path)
  {
    parent: path.split('/queues').first,
    queue:  { name: path }
  }
end
build_task(job, timestamp) click to toggle source
# File lib/rails_cloud_tasks/adapter.rb, line 35
def build_task(job, timestamp)
  {
    http_request:  {
      http_method: :POST,
      url:         url,
      body:        { job: job.serialize }.to_json.force_encoding('ASCII-8BIT'),
      headers:     { 'Content-Type': 'application/json' }
    }.merge(auth),
    schedule_time: timestamp && Google::Protobuf::Timestamp.new.tap do |ts|
      ts.seconds = timestamp
    end
  }.compact
end
url() click to toggle source
# File lib/rails_cloud_tasks/adapter.rb, line 31
def url
  "#{host}#{tasks_path}"
end