Class: QBWC::Job

Inherits:
Object
  • Object
show all
Defined in:
lib/qbwc/job.rb

Direct Known Subclasses

ActiveRecord::Job

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, enabled, company, worker_class, requests = [], data = nil) ⇒ Job

Returns a new instance of Job.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/qbwc/job.rb', line 5

def initialize(name, enabled, company, worker_class, requests = [], data = nil)
  @name = name
  @enabled = enabled
  @company = company || QBWC.company_file_path
  @worker_class = worker_class
  @data = data

  default_key = [nil, company]
  requests = [requests].compact unless Hash === requests || Array === requests
  requests = { default_key => requests } unless Hash === requests || requests.empty?
  @requests = requests

  @request_index = { default_key => 0 }
end

Instance Attribute Details

#companyObject (readonly)

Returns the value of attribute company.



3
4
5
# File 'lib/qbwc/job.rb', line 3

def company
  @company
end

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/qbwc/job.rb', line 3

def name
  @name
end

#worker_classObject (readonly)

Returns the value of attribute worker_class.



3
4
5
# File 'lib/qbwc/job.rb', line 3

def worker_class
  @worker_class
end

Instance Method Details

#advance_next_request(session) ⇒ Object



33
34
35
36
37
# File 'lib/qbwc/job.rb', line 33

def advance_next_request(session)
  new_index = request_index(session) + 1
  QBWC.logger.info "Job '#{name}' advancing to request #'#{new_index}'."
  @request_index[session.key] = new_index
end

#dataObject



80
81
82
# File 'lib/qbwc/job.rb', line 80

def data
  @data
end

#data=(d) ⇒ Object



84
85
86
# File 'lib/qbwc/job.rb', line 84

def data=(d)
  @data = d
end

#disableObject



43
44
45
# File 'lib/qbwc/job.rb', line 43

def disable
  self.enabled = false
end

#enableObject



39
40
41
# File 'lib/qbwc/job.rb', line 39

def enable
  self.enabled = true
end

#enabled?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/qbwc/job.rb', line 57

def enabled?
  @enabled
end

#next_request(session = QBWC::Session.get) ⇒ Object Also known as: next



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/qbwc/job.rb', line 100

def next_request(session = QBWC::Session.get)
  reqs = requests session

  # Generate and save the requests to run when starting the job.
  if (reqs.nil? || reqs.empty?) && ! self.requests_provided_when_job_added
    greqs = worker.requests(self, session, @data)
    greqs = [greqs] unless greqs.nil? || greqs.is_a?(Array)
    set_requests session, greqs
    reqs = requests session
  end

  QBWC.logger.info("Requests available are '#{reqs}'.") if QBWC.log_requests_and_responses
  ri = request_index session
  QBWC.logger.info("Request index is '#{ri}'.")
  return nil if ri.nil? || reqs.nil? || ri >= reqs.length
  nr = reqs[ri]
  QBWC.logger.info("Next request is '#{nr}'.") if QBWC.log_requests_and_responses
  return QBWC::Request.new(nr) if nr
end

#pending?(session) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
# File 'lib/qbwc/job.rb', line 47

def pending?(session)
  if !enabled?
    QBWC.logger.info "Job '#{name}' not enabled."
    return false
  end
  sr = worker.should_run?(self, session, @data)
  QBWC.logger.info "Job '#{name}' should_run?: #{sr}."
  return sr
end

#process_response(qbxml_response, response, session, advance) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/qbwc/job.rb', line 24

def process_response(qbxml_response, response, session, advance)
  QBWC.logger.info "Processing response."
  request_list = requests(session)
  completed_request = request_list[request_index(session)] if request_list
  advance_next_request(session) if advance
  QBWC.logger.info "Job '#{name}' received response: '#{qbxml_response}'." if QBWC.log_requests_and_responses
  worker.handle_response(response, session, self, completed_request, data)
end

#request_index(session) ⇒ Object



88
89
90
# File 'lib/qbwc/job.rb', line 88

def request_index(session)
  @request_index[session.key] || 0
end

#requests(session) ⇒ Object



61
62
63
64
65
66
67
68
69
# File 'lib/qbwc/job.rb', line 61

def requests(session)
  secondary_key = session.key.dup
  secondary_key[0] = nil # username = nil
  result = nil
  [session.key, secondary_key].each do |k|
    result ||= (@requests || {})[k]
  end
  result
end

#requests=(requests) ⇒ Object



76
77
78
# File 'lib/qbwc/job.rb', line 76

def requests=(requests)
  @requests = requests
end

#requests_provided_when_job_addedObject



92
93
94
# File 'lib/qbwc/job.rb', line 92

def requests_provided_when_job_added
  @requests_provided_when_job_added
end

#requests_provided_when_job_added=(value) ⇒ Object



96
97
98
# File 'lib/qbwc/job.rb', line 96

def requests_provided_when_job_added=(value)
  @requests_provided_when_job_added = value
end

#resetObject



121
122
123
124
# File 'lib/qbwc/job.rb', line 121

def reset
  @request_index = {}
  @requests = {} unless self.requests_provided_when_job_added
end

#set_requests(session, requests) ⇒ Object



71
72
73
74
# File 'lib/qbwc/job.rb', line 71

def set_requests(session, requests)
  @requests ||= {}
  @requests[session.key] = requests
end

#workerObject



20
21
22
# File 'lib/qbwc/job.rb', line 20

def worker
  worker_class.constantize.new
end