class Salesforce::Bulk::Batch

Constants

Result

Attributes

csv[RW]
filename[RW]
id[RW]
job[RW]
number_records_failed[RW]
number_records_processed[RW]
state[RW]
state_message[RW]
total_time_processed[RW]

Public Class Methods

new(job) click to toggle source
# File lib/salesforce/bulk/batch.rb, line 15
def initialize(job)
  self.job = job
  self.filename = temporary_csv_file
  self.csv = CSVLib.open(self.filename, 'w+')
  self.csv << csv_header
end

Public Instance Methods

create!() click to toggle source
# File lib/salesforce/bulk/batch.rb, line 37
def create!
  self.csv.close
  response = ::Salesforce.connection.async_post("job/#{job.id}/batch", File.read(self.filename), :format => :xml, :content_type => 'text/csv')
  assign_attributes!(response)
end
ordered_values(record) click to toggle source
# File lib/salesforce/bulk/batch.rb, line 30
def ordered_values(record)
  job.csv_columns.map do |col|
    raw_value = record[col.name.to_sym]
    Column.to_csv_value Column.typecast(col.type, raw_value)
  end
end
record(record) click to toggle source
# File lib/salesforce/bulk/batch.rb, line 22
def record(record)
  if record.is_a?(Hash)
    self.csv << ordered_values(record)
  else
    self.csv << ordered_values(record.attributes)
  end
end
results() click to toggle source
# File lib/salesforce/bulk/batch.rb, line 49
def results
  parse_csv_results ::Salesforce.connection.async_get("job/#{job.id}/batch/#{id}/result")
end
temporary_csv_file() click to toggle source
# File lib/salesforce/bulk/batch.rb, line 59
def temporary_csv_file
  if Object.const_defined?(:Rails) && Rails.respond_to?(:root) && Rails.root.present?
    Rails.root.join('tmp', 'files', "#{ Time.now.to_i}#{rand(10000)}.csv")
  else
    File.join("/tmp/#{ Time.now.to_i}#{rand(10000)}.csv")
  end
end
update_status() click to toggle source
# File lib/salesforce/bulk/batch.rb, line 43
def update_status
  return state if completed?
  response = ::Salesforce.connection.async_get("job/#{job.id}/batch/#{id}", :format => :xml)
  self.state = response[:state]
end

Private Instance Methods

csv_header() click to toggle source
# File lib/salesforce/bulk/batch.rb, line 74
def csv_header
  self.job.csv_columns.map(&:original_name)
end
parse_csv_results(results) click to toggle source
# File lib/salesforce/bulk/batch.rb, line 69
def parse_csv_results(results)
   parsed_results = CSVLib.parse(results)
   parsed_results[1..-1].map { |row| Result.new(*row) }
end