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