Class: Remi::DataTarget::Salesforce

Inherits:
Object
  • Object
show all
Includes:
Remi::DataTarget
Defined in:
lib/remi/data_target/salesforce.rb

Instance Method Summary collapse

Methods included from Remi::DataSubject

#df, #df=, #fields

Constructor Details

#initialize(object:, operation:, credentials:, external_id: 'Id', api: :bulk, logger: Remi::Settings.logger) ⇒ Salesforce

Returns a new instance of Salesforce.



6
7
8
9
10
11
12
13
# File 'lib/remi/data_target/salesforce.rb', line 6

def initialize(object:, operation:, credentials:, external_id: 'Id', api: :bulk, logger: Remi::Settings.logger)
  @sfo = object
  @operation = operation
  @external_id = external_id
  @credentials = credentials
  @api = api
  @logger = logger
end

Instance Method Details

#df_as_array_of_hashesObject



48
49
50
# File 'lib/remi/data_target/salesforce.rb', line 48

def df_as_array_of_hashes
  df.to_a[0]
end

#field_symbolizerObject



15
16
17
# File 'lib/remi/data_target/salesforce.rb', line 15

def field_symbolizer
  Remi::FieldSymbolizers[:salesforce]
end

#loadObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/remi/data_target/salesforce.rb', line 19

def load
  return true if @loaded || df.size == 0

  @logger.info "Performing Salesforce #{@operation} on object #{@sfo}"

  if @operation == :update
    Remi::SfBulkHelper::SfBulkUpdate.update(restforce_client, @sfo, df_as_array_of_hashes, logger: @logger)
  elsif @operation == :create
    Remi::SfBulkHelper::SfBulkCreate.create(restforce_client, @sfo, df_as_array_of_hashes, logger: @logger)
  elsif @operation == :upsert
    Remi::SfBulkHelper::SfBulkUpsert.upsert(restforce_client, @sfo, df_as_array_of_hashes, external_id: @external_id, logger: @logger)
  else
    raise "Unknown operation: #{@operation}"
  end

  @loaded = true
end

#restforce_clientObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/remi/data_target/salesforce.rb', line 37

def restforce_client
  @restforce_client ||= begin
    client = Restforce.new(@credentials)

    #run a dummy query to initiate a connection. Workaround for Bulk API problem
    # https://github.com/yatish27/salesforce_bulk_api/issues/33
    client.query('SELECT Id FROM Contact LIMIT 1')
    client
  end
end