Class: SalesforceChunker::ManualChunkingBreakpointQuery

Inherits:
Job
  • Object
show all
Defined in:
lib/salesforce_chunker/manual_chunking_breakpoint_query.rb

Constant Summary

Constants inherited from Job

Job::DEFAULT_RETRY_SECONDS, Job::DEFAULT_TIMEOUT_SECONDS, Job::QUERY_OPERATIONS

Instance Attribute Summary

Attributes inherited from Job

#batches_count

Instance Method Summary collapse

Methods inherited from Job

#close, #download_results, #get_completed_batches, #retrieve_raw_results, #retrieve_results

Constructor Details

#initialize(connection:, object:, operation:, query:, **options) ⇒ ManualChunkingBreakpointQuery

Returns a new instance of ManualChunkingBreakpointQuery.



4
5
6
7
8
9
10
11
12
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 4

def initialize(connection:, object:, operation:, query:, **options)
  @batch_size = options[:batch_size] || 100000
  super(connection: connection, object: object, operation: operation, **options)

  create_batch(query)
  @batches_count = 1

  close
end

Instance Method Details

#create_batch(payload) ⇒ Object



37
38
39
40
41
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 37

def create_batch(payload)
  @log.info "Creating Id Batch: \"#{payload.gsub(/\n/, " ").strip}\""
  response = @connection.post("job/#{@job_id}/batch", payload.to_s, {"Content-Type": "text/csv"})
  response["batchInfo"]["id"]
end

#create_job(object, options) ⇒ Object



58
59
60
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 58

def create_job(object, options)
  super(object, options.merge(content_type: "CSV"))
end

#get_batch_results(batch_id) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 14

def get_batch_results(batch_id)
  retrieve_batch_results(batch_id).each_with_index do |result_id, result_index|
    results = retrieve_raw_results(batch_id, result_id)

    @log.info "Generating breakpoints from CSV results"
    process_csv_results(results, result_index > 0) { |result| yield result }
  end
end

#get_batch_statusesObject



53
54
55
56
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 53

def get_batch_statuses
  # XML to JSON wrangling
  [@connection.get_json("job/#{@job_id}/batch")["batchInfoList"]["batchInfo"]]
end

#process_csv_results(input, include_first_element) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 23

def process_csv_results(input, include_first_element)
  lines = input.each_line
  headers = lines.next

  yield(lines.peek.chomp.gsub("\"", "")) if include_first_element

  loop do
    @batch_size.times { lines.next }
    yield(lines.peek.chomp.gsub("\"", ""))
  end
rescue StopIteration
  nil
end

#retrieve_batch_results(batch_id) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/salesforce_chunker/manual_chunking_breakpoint_query.rb', line 43

def retrieve_batch_results(batch_id)
  # XML to JSON wrangling
  response = super(batch_id)
  if response["result_list"]["result"].is_a? Array
    response["result_list"]["result"]
  else
    [response["result_list"]["result"]]
  end
end