Class: Remi::Parser::Salesforce

Inherits:
Remi::Parser show all
Defined in:
lib/remi/data_subjects/salesforce.rb

Overview

Salesforce parser

Instance Attribute Summary

Attributes inherited from Remi::Parser

#context, #field_symbolizer, #fields, #logger

Instance Method Summary collapse

Methods inherited from Remi::Parser

#initialize

Constructor Details

This class inherits a constructor from Remi::Parser

Instance Method Details

#parse(sf_extract) ⇒ Remi::DataFrame

Returns The data converted into a dataframe.

Parameters:

Returns:



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/remi/data_subjects/salesforce.rb', line 102

def parse(sf_extract)
  logger.info 'Parsing salesforce query results'

  hash_array = {}
  sf_extract.data['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

    # delete raw result at end of processing to free memory
    batch['response'] = nil
  end

  Remi::DataFrame.create(:daru, hash_array, order: hash_array.keys)
end