Sha256: d7d81728cd1975f663d6644f39407c24c76c337a9d5a796763ab4c13d7f4b451

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

module SfConnect
  #
  # download salesforce objects
  #
  module Downloader
    extend ActiveSupport::Concern

    def fetch
      self.class.fetch(salesforce_object_id)
    end

    def download_from_salesforce
      self.class.download_salesforce_record(salesforce_object_id)
    end

    class_methods do
      def find_or_initialize_from_salesforce(binding_attributes)
        find_or_initialize_by(id: binding_attributes[:id])
      end

      def fetch(id, field = nil)
        salesforce_fields.fetch(id, field)
      end

      def fetch_all(query = "", &)
        return enum_for(:fetch_all, query) unless block_given?

        salesforce_fields.fetch_all(query, &)
      end

      def download_salesforce_record(salesforce_object_id)
        payload = fetch(salesforce_object_id)
        record = find_or_initialize_from_salesforce(payload.for_download)
        record.update(payload.for_download)
        record
      end

      def download_salesforce_records(batch_size = 1000)
        fetch_all.each_slice(batch_size) do |records|
          upsert_all records.map(&:for_download)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sf_connect-0.2.1 lib/sf_connect/downloader.rb
sf_connect-0.2.0 lib/sf_connect/downloader.rb