Class: Remi::DataSource::Salesforce
- Inherits:
-
Object
- Object
- Remi::DataSource::Salesforce
show all
- Includes:
- Remi::DataSource, DataStub
- Defined in:
- lib/remi/cucumber/data_source.rb,
lib/remi/data_source/salesforce.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
#feild_symbolizer
#df=
Methods included from DataStub
#empty_stub_df, #stub_df, #stub_row_array, #stub_values
Constructor Details
#initialize(fields: {}, object:, query:, credentials:, 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_source/salesforce.rb', line 6
def initialize(fields: {}, object:, query:, credentials:, api: :bulk, logger: Remi::Settings.logger)
@fields = fields
@sfo = object
@query = query
@credentials = credentials
@api = api
@logger = logger
end
|
Instance Attribute Details
#fields ⇒ Object
Returns the value of attribute fields.
15
16
17
|
# File 'lib/remi/data_source/salesforce.rb', line 15
def fields
@fields
end
|
#raw_result ⇒ Object
Returns the value of attribute raw_result.
16
17
18
|
# File 'lib/remi/data_source/salesforce.rb', line 16
def raw_result
@raw_result
end
|
Instance Method Details
#check_for_errors(sf_result) ⇒ Object
29
30
31
32
33
|
# File 'lib/remi/data_source/salesforce.rb', line 29
def check_for_errors(sf_result)
sf_result['batches'].each do |batch|
raise "Error with batch #{batch['id']} - #{batch['state']}: #{batch['stateMessage']}" unless batch['state'].first == 'Completed'
end
end
|
#df ⇒ Object
82
83
84
|
# File 'lib/remi/data_source/salesforce.rb', line 82
def df
@dataframe ||= to_dataframe
end
|
22
23
24
25
26
27
|
# File 'lib/remi/data_source/salesforce.rb', line 22
def
@raw_result = sf_bulk.query(@sfo, @query, 10000)
check_for_errors(@raw_result)
@raw_result
end
|
#field_symbolizer ⇒ Object
18
19
20
|
# File 'lib/remi/data_source/salesforce.rb', line 18
def field_symbolizer
Remi::FieldSymbolizers[:salesforce]
end
|
#restforce_client ⇒ Object
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/remi/data_source/salesforce.rb', line 41
def restforce_client
@restforce_client ||= begin
client = Restforce.new(@credentials)
client.query('SELECT Id FROM Contact LIMIT 1')
client
end
end
|
#sf_bulk ⇒ Object
52
53
54
|
# File 'lib/remi/data_source/salesforce.rb', line 52
def sf_bulk
@sf_bulk ||= SalesforceBulkApi::Api.new(restforce_client).tap { |o| o.connection.set_status_throttle(5) }
end
|
#to_dataframe ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/remi/data_source/salesforce.rb', line 56
def to_dataframe
@logger.info "Converting salesforce query results to a dataframe"
hash_array = {}
raw_result['batches'].each do |batch|
next unless batch['response']
batch['response'].each do |record|
record.each do |field, value|
next if ['xsi:type','type'].include? field
(hash_array[field.to_sym] ||= []) << case value.first
when Hash
value.first["xsi:nil"] == "true" ? nil : value.first
else
value.first
end
end
end
batch['response'] = nil
end
Daru::DataFrame.new hash_array, order: hash_array.keys
end
|