class SalesforceChunker::Connection
Constants
- MAX_TRIES
- RESCUED_EXCEPTIONS
- SLEEP_DURATION
Public Class Methods
new(username: "", password: "", security_token: "", domain: "login", salesforce_version: "42.0", **options)
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 6 def initialize(username: "", password: "", security_token: "", domain: "login", salesforce_version: "42.0", **options) @log = options[:logger] || Logger.new(options[:log_output]) @log.progname = "salesforce_chunker" response = HTTParty.post( "https://#{domain}.salesforce.com/services/Soap/u/#{salesforce_version}", headers: { "SOAPAction": "login", "Content-Type": "text/xml; charset=UTF-8" }, body: self.class.login_soap_request_body(username, password, security_token) ).parsed_response result = response["Envelope"]["Body"]["loginResponse"]["result"] instance = self.class.get_instance(result["serverUrl"]) @base_url = "https://#{instance}.salesforce.com/services/async/#{salesforce_version}/" @default_headers = { "Content-Type": "application/json", "X-SFDC-Session": result["sessionId"], } rescue NoMethodError raise ConnectionError, response["Envelope"]["Body"]["Fault"]["faultstring"] end
Private Class Methods
check_response_error(response)
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 78 def self.check_response_error(response) if response.is_a?(Hash) && response.key?("exceptionCode") raise ResponseError, "#{response["exceptionCode"]}: #{response["exceptionMessage"]}" else response end end
get_instance(server_url)
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 74 def self.get_instance(server_url) /https:\/\/(.*).salesforce.com/.match(server_url)[1] end
login_soap_request_body(username, password, security_token)
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 58 def self.login_soap_request_body(username, password, security_token) "<?xml version=\"1.0\" encoding=\"utf-8\" ?> <env:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:partner.soap.sforce.com\"> <env:Body> <n1:login xmlns:n1=\"urn:partner.soap.sforce.com\"> <n1:username>#{username.encode(xml: :text)}</n1:username> <n1:password>#{password.encode(xml: :text)}#{security_token.encode(xml: :text)}</n1:password> </n1:login> </env:Body> </env:Envelope>" end
retry_block(log: Logger.new(nil), tries: MAX_TRIES, sleep_duration: SLEEP_DURATION, rescues: RESCUED_EXCEPTIONS, &block)
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 90 def self.retry_block(log: Logger.new(nil), tries: MAX_TRIES, sleep_duration: SLEEP_DURATION, rescues: RESCUED_EXCEPTIONS, &block) attempt_number = 1 begin return block.call rescue *rescues => e log.warn "Retry block attempt #{attempt_number} rescued exception: #{e}" if attempt_number >= tries log.error "Maximum number of tries (#{tries}) was reached in retry_block. Raising exception." raise e else attempt_number += 1 sleep sleep_duration retry end end end
Public Instance Methods
get(url, headers={})
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 49 def get(url, headers={}) @log.info "GET: #{url}" self.class.retry_block(log: @log) do HTTParty.get(@base_url + url, headers: @default_headers.merge(headers)).body end end
get_json(url, headers={})
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 41 def get_json(url, headers={}) @log.info "GET: #{url}" response = self.class.retry_block(log: @log) do HTTParty.get(@base_url + url, headers: @default_headers.merge(headers)) end self.class.check_response_error(response.parsed_response) end
post(url, body, headers={})
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 33 def post(url, body, headers={}) @log.info "POST: #{url}" response = self.class.retry_block(log: @log) do HTTParty.post(@base_url + url, headers: @default_headers.merge(headers), body: body) end self.class.check_response_error(response.parsed_response) end
post_json(url, body, headers={})
click to toggle source
# File lib/salesforce_chunker/connection.rb, line 29 def post_json(url, body, headers={}) post(url, body.to_json, headers) end