module SalesforceAdapter::Helpers

Constants

TIMEOUT_ERRORS

Potential errors raisable if the salesforce API is down

Public Class Methods

format_fields_for_create_or_update(fields) click to toggle source

Format a fields hash in an array, to be sent with a create or update query Necessary to handle nil fields (must be submitted under the :fieldsToNull key, and there can be more than one)

# File lib/salesforce_adapter/helpers.rb, line 68
def format_fields_for_create_or_update(fields)
  fields_array = []
  fields = fields.dup

  # The type and Id have to be the first fields given
  type = fields.delete(:type)
  id   = fields.delete(:Id)

  fields_array << :type << type if type
  fields_array << :Id   << id   if id

  # Then append the other fields, handling the nil and boolean ones
  fields.each do |key, value|
    if value.nil?
      fields_array << :fieldsToNull << key.to_s
    else
      fields_array << key << format_value_for_create_or_update(value)
    end
  end

  fields_array
end
format_value_for_create_or_update(value) click to toggle source

Format a single value to be send in a create or update query

# File lib/salesforce_adapter/helpers.rb, line 93
def format_value_for_create_or_update(value)
  # Boolean have to be casted to strings
  if !!value == value
    value.to_s
  else
    value
  end
end
handle_timeout(opts= {}) { || ... } click to toggle source

Attemps to run a salesforce operation a given number of times, Handle timeout errors and sleep between retries

# File lib/salesforce_adapter/helpers.rb, line 32
def handle_timeout(opts= {})

  max_tries = opts[:max_tries] || 1
  sleep_between_tries = opts[:sleep_between_tries] || 1

  counter = 0

  begin
    counter += 1
    yield if block_given?

  # Standard ruby exceptions when a remote host is down
  rescue *TIMEOUT_ERRORS => e
    raise SalesforceAdapter::SalesforceTimeout.new(e.message) if counter >= max_tries
    Kernel.sleep sleep_between_tries
    retry

  # The RForce gem may raise runtime errors if salesforce is down (e.g : when logging in)
  rescue RuntimeError => e

    if e.message.match /SERVER_UNAVAILABLE/
      raise SalesforceAdapter::SalesforceTimeout.new(e.message) if counter >= max_tries
      Kernel.sleep sleep_between_tries
      retry

    else
      raise
    end

  end

end
hash_to_s(h) click to toggle source

Format a hash for its display in logs / error messages Here for ruby 1.8's OrderedHash, to remove when migrated to ruby 2.0 +

# File lib/salesforce_adapter/helpers.rb, line 105
def hash_to_s(h)
  if h.class == Hash
    h.inspect
  elsif h.class < Hash
    Hash[h.to_a].inspect
  else
    raise ArgumentError.new('h is not a Hash or a subclass of Hash')
  end
end