Module: SalesforceArSync::Extenders::SalesforceSyncable

Defined in:
lib/salesforce_ar_sync/extenders/salesforce_syncable.rb

Instance Method Summary collapse

Instance Method Details

#salesforce_syncable(options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/salesforce_ar_sync/extenders/salesforce_syncable.rb', line 4

def salesforce_syncable(options = {})
  require 'salesforce_ar_sync/salesforce_sync'
  include SalesforceArSync::SalesforceSync

  self.salesforce_sync_enabled = options.has_key?(:salesforce_sync_enabled) ? options[:salesforce_sync_enabled] : true
  self.salesforce_sync_attribute_mapping = options.has_key?(:sync_attributes) ? options[:sync_attributes].stringify_keys : {}
  self.salesforce_async_attributes = options.has_key?(:async_attributes) ? options[:async_attributes] : {}
  self.salesforce_default_attributes_for_create = options.has_key?(:default_attributes_for_create) ? options[:default_attributes_for_create] : {}
  self.salesforce_id_attribute_name = options.has_key?(:salesforce_id_attribute_name) ? options[:salesforce_id_attribute_name] : :Id
  self.salesforce_web_id_attribute_name = options.has_key?(:web_id_attribute_name) ? options[:web_id_attribute_name] : :WebId__c
  self.activerecord_web_id_attribute_name = options.has_key?(:activerecord_web_id_attribute_name) ? options[:activerecord_web_id_attribute_name] : :id
  self.salesforce_sync_web_id = options.has_key?(:salesforce_sync_web_id) ? options[:salesforce_sync_web_id] : false
  self.salesforce_web_class_name = options.has_key?(:web_class_name) ? options[:web_class_name] : self.name

  self.sync_inbound_delete = options.has_key?(:sync_inbound_delete) ? options[:sync_inbound_delete] : true
  self.sync_outbound_delete = options.has_key?(:sync_outbound_delete) ? options[:sync_outbound_delete] : false
  self.unscoped_updates = options.has_key?(:unscoped_updates) ? options[:unscoped_updates] : false

  self.salesforce_object_name_method = options.has_key?(:salesforce_object_name) ? options[:salesforce_object_name] : nil
  self.salesforce_skip_sync_method = options.has_key?(:except) ? options[:except] : nil

  instance_eval do
    before_save :salesforce_sync
    after_create :sync_web_id
    after_commit :salesforce_delete_object, on: :destroy

    def salesforce_sync_web_id?
      self.salesforce_sync_web_id
    end
  end

  class_eval do
    # Calls a method if provided to return the name of the Salesforce object the model is syncing to.
    # If no method is provided, defaults to the class name
    def salesforce_object_name
      return send(self.class.salesforce_object_name_method) if self.class.salesforce_object_name_method.present?
      return self.class.name
    end

    # Calls a method, if provided, to determine if a record should be synced to Salesforce.
    # The salesforce_skip_sync instance variable is also used.
    # The SALESFORCE_AR_SYNC_ENABLED flag overrides all the others if set to false
    def salesforce_skip_sync?
      return true if SalesforceArSync.config["SYNC_ENABLED"] == false
      return (salesforce_skip_sync || !self.class.salesforce_sync_enabled || send(self.class.salesforce_skip_sync_method)) if self.class.salesforce_skip_sync_method.present?
      return (salesforce_skip_sync || !self.class.salesforce_sync_enabled)
    end
  end
end