Class: QuickbooksWebConnector::Job
- Inherits:
-
Object
- Object
- QuickbooksWebConnector::Job
- Defined in:
- lib/quickbooks_web_connector/job.rb
Instance Attribute Summary collapse
-
#response_xml ⇒ Object
Returns the value of attribute response_xml.
Class Method Summary collapse
-
.create(request_builder, response_handler, *args) ⇒ Object
Creates a job by placing it on the queue.
-
.destroy(request_builder, response_handler, *args) ⇒ Object
Destroys a job on the queue.
-
.peek ⇒ Object
Return an instance of QuickbooksWebConnector::job if any jobs are available, without removing the job from the queue.
-
.queued ⇒ Object
Find jobs from the queue.
-
.reserve ⇒ Object
Returns an instance of QuickbooksWebConnector::Job if any jobs are available.
Instance Method Summary collapse
-
#args ⇒ Object
Returns an array of args represented in this job’s payload.
-
#fail(exception) ⇒ Object
Given an exception object, hands off the needed parameters to the Failure module.
-
#initialize(payload) ⇒ Job
constructor
A new instance of Job.
- #job_args ⇒ Object
-
#perform ⇒ Object
Attempts to perform the work represented by this job instance.
-
#request_builder_class ⇒ Object
Returns the actual class constant for building the request from the job’s payload.
-
#request_xml ⇒ Object
Returns the request XML from the payload.
-
#response_handler_class ⇒ Object
Returns the actual class constant represented in this job’s payload.
Constructor Details
#initialize(payload) ⇒ Job
Returns a new instance of Job.
6 7 8 |
# File 'lib/quickbooks_web_connector/job.rb', line 6 def initialize(payload) @payload = payload end |
Instance Attribute Details
#response_xml ⇒ Object
Returns the value of attribute response_xml.
4 5 6 |
# File 'lib/quickbooks_web_connector/job.rb', line 4 def response_xml @response_xml end |
Class Method Details
.create(request_builder, response_handler, *args) ⇒ Object
Creates a job by placing it on the queue. Expects a request builder class name, a response handler class name, and an optional array of arguments to pass to the class’ ‘perform` method.
Raises an exception if no class is given.
15 16 17 18 19 20 21 |
# File 'lib/quickbooks_web_connector/job.rb', line 15 def self.create(request_builder, response_handler, *args) QuickbooksWebConnector.push( 'request_builder_class' => request_builder.to_s, 'response_handler_class' => response_handler.to_s, 'args' => args ) end |
.destroy(request_builder, response_handler, *args) ⇒ Object
Destroys a job on the queue. Expects a request builder class name, a response handler class name, and an optional array of arguments to pass to the class’ ‘perform` method.
26 27 28 29 30 31 32 |
# File 'lib/quickbooks_web_connector/job.rb', line 26 def self.destroy(request_builder, response_handler, *args) QuickbooksWebConnector.remove( 'request_builder_class' => request_builder.to_s, 'response_handler_class' => response_handler.to_s, 'args' => args ) end |
.peek ⇒ Object
Return an instance of QuickbooksWebConnector::job if any jobs are available, without removing the job from the queue
43 44 45 46 |
# File 'lib/quickbooks_web_connector/job.rb', line 43 def self.peek return unless payload = QuickbooksWebConnector.peek new(payload) end |
.queued ⇒ Object
Find jobs from the queue.
Returns the list of jobs queued.
This method can be potentially very slow and memory intensive, depending on the size of your queue, as it loads all jobs into a Ruby array.
55 56 57 58 59 |
# File 'lib/quickbooks_web_connector/job.rb', line 55 def self.queued QuickbooksWebConnector.list_range(:queue, 0, -1).map do |item| new(item) end end |
.reserve ⇒ Object
Returns an instance of QuickbooksWebConnector::Job if any jobs are available. If not, returns nil.
36 37 38 39 |
# File 'lib/quickbooks_web_connector/job.rb', line 36 def self.reserve return unless payload = QuickbooksWebConnector.pop new(payload) end |
Instance Method Details
#args ⇒ Object
Returns an array of args represented in this job’s payload.
103 104 105 |
# File 'lib/quickbooks_web_connector/job.rb', line 103 def args @payload['args'] end |
#fail(exception) ⇒ Object
Given an exception object, hands off the needed parameters to the Failure module.
113 114 115 116 117 118 |
# File 'lib/quickbooks_web_connector/job.rb', line 113 def fail(exception) Failure.create( payload: @payload, exception: exception ) end |
#job_args ⇒ Object
107 108 109 |
# File 'lib/quickbooks_web_connector/job.rb', line 107 def job_args args || [] end |
#perform ⇒ Object
Attempts to perform the work represented by this job instance. Calls #perform on the class given in the payload with the Quickbooks response and the arguments given in the payload..
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/quickbooks_web_connector/job.rb', line 64 def perform begin job = response_handler_class # Execute the job. job.perform(response_xml, *job_args) rescue Object => ex fail(ex) end end |
#request_builder_class ⇒ Object
Returns the actual class constant for building the request from the job’s payload.
93 94 95 |
# File 'lib/quickbooks_web_connector/job.rb', line 93 def request_builder_class @request_builder_class ||= @payload['request_builder_class'].constantize end |
#request_xml ⇒ Object
Returns the request XML from the payload.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/quickbooks_web_connector/job.rb', line 76 def request_xml begin xml = request_builder_class.perform(*job_args) # Replace non-ascii characters with decimal entities xml.gsub!(/[^\u{20}-\u{7E}]/) do |char| "&##{char.codepoints.first};" end xml rescue Object => ex fail(ex) :failed end end |
#response_handler_class ⇒ Object
Returns the actual class constant represented in this job’s payload.
98 99 100 |
# File 'lib/quickbooks_web_connector/job.rb', line 98 def response_handler_class @response_handler_class ||= @payload['response_handler_class'].constantize end |