class Fragmentary::RequestQueue::Sender

Attributes

queue[R]

Public Class Methods

jobs() click to toggle source
# File lib/fragmentary/request_queue.rb, line 53
def jobs
  ::Delayed::Job.where("(handler LIKE ?) OR (handler LIKE ?)", "--- !ruby/object:#{name} %", "--- !ruby/object:#{name}\n%")
end
new(queue) click to toggle source
# File lib/fragmentary/request_queue.rb, line 60
def initialize(queue)
  @queue = queue
end

Public Instance Methods

perform() click to toggle source
# File lib/fragmentary/request_queue.rb, line 78
def perform
  Rails.logger.info "\n***** Processing request queue for user_type '#{queue.user_type}'\n"
  @between ? send_next_request : send_all_requests
end
start(delay: nil, between: nil) click to toggle source

Send all requests, either directly or by schedule

# File lib/fragmentary/request_queue.rb, line 65
def start(delay: nil, between: nil)
  Rails.logger.info "\n***** Processing request queue for user_type '#{queue.user_type}'\n"
  @delay = delay; @between = between
  if @delay or @between
    schedule_requests(@delay)
    # sending requests by schedule makes a copy of the sender and queue objects for
    # asynchronous execution, so we have to manually clear out the original queue.
    queue.clear
  else
    send_all_requests
  end
end
success() click to toggle source
# File lib/fragmentary/request_queue.rb, line 83
def success
  schedule_requests(@between) if queue.size > 0
end

Private Instance Methods

clear_session() click to toggle source
# File lib/fragmentary/request_queue.rb, line 124
def clear_session
  @session = nil
end
new_session() click to toggle source
# File lib/fragmentary/request_queue.rb, line 119
def new_session
  session_user = Fragmentary::SessionUser.fetch(queue.user_type)
  UserSession.new(session_user)
end
next_request() click to toggle source
# File lib/fragmentary/request_queue.rb, line 89
def next_request
  queue.next_request.to_proc
end
schedule_requests(delay=0.seconds) click to toggle source
# File lib/fragmentary/request_queue.rb, line 105
def schedule_requests(delay=0.seconds)
  if queue.size > 0
    clear_session
    Delayed::Job.transaction do
      self.class.jobs.destroy_all
      Delayed::Job.enqueue self, :run_at => delay.from_now
    end
  end
end
send_all_requests() click to toggle source
# File lib/fragmentary/request_queue.rb, line 99
def send_all_requests
  while queue.size > 0
    send_next_request
  end
end
send_next_request() click to toggle source
# File lib/fragmentary/request_queue.rb, line 93
def send_next_request
  if queue.size > 0
    session.instance_exec(&(next_request))
  end
end
session() click to toggle source
# File lib/fragmentary/request_queue.rb, line 115
def session
  @session ||= new_session
end