Class: QBWC::Session

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

Direct Known Subclasses

ActiveRecord::Session

Constant Summary collapse

@@session =
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user = nil, company = nil, ticket = nil) ⇒ Session

Returns a new instance of Session.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/qbwc/session.rb', line 12

def initialize(user = nil, company = nil, ticket = nil)
  @user = user
  @company = company
  @current_job = nil
  @error = nil
  @progress = 0
  @iterator_id = nil
  @initial_job_count = pending_jobs.length

  @ticket = ticket || Digest::SHA1.hexdigest("#{Rails.application.config.secret_token}#{Time.now.to_i}")

  @@session = self
  reset(ticket.nil?)
end

Instance Attribute Details

#companyObject (readonly)

Returns the value of attribute company.



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

def company
  @company
end

#errorObject

Returns the value of attribute error.



4
5
6
# File 'lib/qbwc/session.rb', line 4

def error
  @error
end

#progressObject

Returns the value of attribute progress.



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

def progress
  @progress
end

#status_codeObject

Returns the value of attribute status_code.



4
5
6
# File 'lib/qbwc/session.rb', line 4

def status_code
  @status_code
end

#status_severityObject

Returns the value of attribute status_severity.



4
5
6
# File 'lib/qbwc/session.rb', line 4

def status_severity
  @status_severity
end

#ticketObject (readonly)

Returns the value of attribute ticket.



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

def ticket
  @ticket
end

#userObject (readonly)

Returns the value of attribute user.



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

def user
  @user
end

Class Method Details

.get(ticket) ⇒ Object



8
9
10
# File 'lib/qbwc/session.rb', line 8

def self.get(ticket)
	@@session
end

Instance Method Details

#current_requestObject



54
55
56
57
58
59
60
61
62
63
# File 'lib/qbwc/session.rb', line 54

def current_request
  request = self.next_request
  if request && self.iterator_id.present?
    request = request.to_hash
    request.delete('xml_attributes')
    request.values.first['xml_attributes'] = {'iterator' => 'Continue', 'iteratorID' => self.iterator_id}
    request = QBWC::Request.new(request)
  end 
  request
end

#destroyObject



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

def destroy
  self.freeze
  @@session = nil
end

#error_and_stop_requested?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/qbwc/session.rb', line 31

def error_and_stop_requested?
  response_is_error? && QBWC::on_error == 'stopOnError'
end

#finished?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/qbwc/session.rb', line 35

def finished?
  self.progress == 100
end

#next_requestObject Also known as: next



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/qbwc/session.rb', line 39

def next_request
  if current_job.nil? || error_and_stop_requested?
    self.progress = 100
    return nil
  end
  until (request = current_job.next_request) do
    pending_jobs.shift
    reset(true) or break
  end
  jobs_completed = @initial_job_count - pending_jobs.length
  self.progress = ((jobs_completed.to_f  / @initial_job_count.to_f ) * 100).to_i
  request
end

#request_to_sendObject



65
66
67
68
69
70
71
72
# File 'lib/qbwc/session.rb', line 65

def request_to_send
  current_job_name = current_job.name
  request = current_request.try(:request) || ''
  QBWC.logger.info("Sending request from job #{current_job_name}")
  QBWC.logger.info(request) if QBWC.log_requests_and_responses

  request
end

#response=(qbxml_response) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/qbwc/session.rb', line 74

def response=(qbxml_response)
  begin
    QBWC.logger.info 'Parsing response.'
    unless qbxml_response.nil?
      response = QBWC.parser.from_qbxml(qbxml_response)["qbxml"]["qbxml_msgs_rs"].except("xml_attributes")
      response = response[response.keys.first]
      parse_response_header(response)
    end
    self.current_job.process_response(qbxml_response, response, self, iterator_id.blank?) unless self.current_job.nil?
    self.next_request # search next request

  rescue => e
    self.error = e.message
    QBWC.logger.warn "An error occured in QBWC::Session: #{e.message}"
    QBWC.logger.warn e.backtrace.join("\n")
  end
end

#response_is_error?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/qbwc/session.rb', line 27

def response_is_error?
  self.error && self.status_severity == 'Error'
end

#saveObject



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

def save
end