class SalesforceAdapter::Operations::WebserviceCall

Public Class Methods

new(rforce_binding, method_name, arguments, schema_url, service_path) click to toggle source
# File lib/salesforce_adapter/operations/webservice_call.rb, line 8
def initialize(rforce_binding, method_name, arguments, schema_url, service_path)
  @method_name  = method_name.to_s
  @arguments    = arguments || {}
  @schema_url   = schema_url
  @service_path = service_path

  super(rforce_binding)
end

Private Instance Methods

cast(value) click to toggle source

Convert a value before sending it to salesforce

# File lib/salesforce_adapter/operations/webservice_call.rb, line 58
def cast(value)
  if [TrueClass, FalseClass].include? value.class
    value
  else
    value.to_s
  end
end
context() click to toggle source
# File lib/salesforce_adapter/operations/webservice_call.rb, line 20
def context
  "calling webservice method #{@method_name} with arguments #{@arguments.inspect}.\n Schema url: #{@schema_url}, service path: #{@service_path}"
end
format_response() click to toggle source
# File lib/salesforce_adapter/operations/webservice_call.rb, line 28
def format_response
  @response[:"#{@method_name}Response"][:result]
end
formatted_arguments() click to toggle source

Formatted arguments for WS call : need to be like [:key1, value1, :key2, value2]

# File lib/salesforce_adapter/operations/webservice_call.rb, line 49
def formatted_arguments
  [].tap do |formatted_arguments|
    @arguments.each do |name, value|
      formatted_arguments << name << cast(value)
    end
  end
end
perform() click to toggle source
# File lib/salesforce_adapter/operations/webservice_call.rb, line 24
def perform
  rforce_binding.call_remote(@method_name, formatted_arguments){ [@schema_url, @service_path] }
end
validate_response!() click to toggle source

Rescue missing methods by inspecting the content of the response

# File lib/salesforce_adapter/operations/webservice_call.rb, line 33
def validate_response!
  begin
    super
  rescue SalesforceApiFault => e

    # Change the exception to a NoMethodError if undefined on salesforce
    if e.message =~ /No operation available for request/
      raise NoMethodError.new(e.message)
    else
      raise e
    end
  end
end