Class: Fragmentary::RequestQueue::Sender

Inherits:
Object
  • Object
show all
Defined in:
lib/fragmentary/request_queue.rb

Defined Under Namespace

Classes: Target

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(queue) ⇒ Sender

Returns a new instance of Sender.



92
93
94
95
# File 'lib/fragmentary/request_queue.rb', line 92

def initialize(queue)
  @queue = queue
  @target = Target.new(queue.host_root_url)
end

Instance Attribute Details

#betweenObject (readonly)

Returns the value of attribute between.



90
91
92
# File 'lib/fragmentary/request_queue.rb', line 90

def between
  @between
end

#delayObject (readonly)

Returns the value of attribute delay.



90
91
92
# File 'lib/fragmentary/request_queue.rb', line 90

def delay
  @delay
end

#priorityObject (readonly)

Returns the value of attribute priority.



90
91
92
# File 'lib/fragmentary/request_queue.rb', line 90

def priority
  @priority
end

#queueObject (readonly)

Returns the value of attribute queue.



90
91
92
# File 'lib/fragmentary/request_queue.rb', line 90

def queue
  @queue
end

#queue_suffixObject (readonly)

Returns the value of attribute queue_suffix.



90
91
92
# File 'lib/fragmentary/request_queue.rb', line 90

def queue_suffix
  @queue_suffix
end

#targetObject (readonly)

Returns the value of attribute target.



90
91
92
# File 'lib/fragmentary/request_queue.rb', line 90

def target
  @target
end

Class Method Details

.jobsObject



71
72
73
# File 'lib/fragmentary/request_queue.rb', line 71

def jobs
  ::Delayed::Job.where("(handler LIKE ?) OR (handler LIKE ?)", "--- !ruby/object:#{name} %", "--- !ruby/object:#{name}\n%")
end

Instance Method Details

#performObject



119
120
121
122
# File 'lib/fragmentary/request_queue.rb', line 119

def perform
  Rails.logger.info "\n***** Processing request queue for user_type '#{queue.user_type}'\n"
  @between ? send_next_request : send_all_requests
end

#send_next_requestObject



124
125
126
127
128
129
# File 'lib/fragmentary/request_queue.rb', line 124

def send_next_request
  if queue.size > 0
    request = queue.next_request
    session.send_request(:method => request.method, :path => request.path, :parameters => request.parameters, :options => request.options)
  end
end

#sessionObject



101
102
103
# File 'lib/fragmentary/request_queue.rb', line 101

def session
  @session ||= InternalUserSession.new(@target.url, session_user)
end

#session_userObject



97
98
99
# File 'lib/fragmentary/request_queue.rb', line 97

def session_user
  @session_user ||= Fragmentary::SessionUser.fetch(queue.user_type)
end

#start(delay: nil, between: nil, queue_suffix: '', priority: 0) ⇒ Object

Send all requests, either directly or by schedule



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/fragmentary/request_queue.rb', line 106

def start(delay: nil, between: nil, queue_suffix: '', priority: 0)
  Rails.logger.info "\n***** Processing request queue for user_type '#{queue.user_type}'\n"
  @delay = delay; @between = between; @queue_suffix = queue_suffix; @priority = priority
  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