Module: Draisine::ActiveRecordPlugin

Extended by:
ActiveSupport::Concern
Includes:
Concerns::ArraySetter, Concerns::AttributesMapping, Concerns::Import
Defined in:
lib/draisine/active_record.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Concerns::Import

#salesforce_update_without_sync

Methods included from Concerns::AttributesMapping

#salesforce_assign_attributes, #salesforce_attributes, #salesforce_mapped_attributes, #salesforce_reverse_mapped_attributes

Instance Attribute Details

#salesforce_skip_syncObject

Returns the value of attribute salesforce_skip_sync.



92
93
94
# File 'lib/draisine/active_record.rb', line 92

def salesforce_skip_sync
  @salesforce_skip_sync
end

Instance Method Details

#salesforce_callback(type, options = {}) ⇒ Object



165
166
167
168
169
170
# File 'lib/draisine/active_record.rb', line 165

def salesforce_callback(type, options = {})
  self.class.salesforce_callback(type, salesforce_id, {
    local_record_type: self.class.name,
    local_record_id: id
  }.merge(options))
end

#salesforce_inbound_update(attributes, add_blanks = true) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/draisine/active_record.rb', line 100

def salesforce_inbound_update(attributes, add_blanks = true)
  return unless should_process_inbound_update?(attributes)
  self.salesforce_skip_sync = true
  if add_blanks
    attributes = self.class.salesforce_synced_attributes
      .map {|attr| [attr, attributes[attr]] }
      .to_h
  end
  salesforce_assign_attributes(attributes)
  salesforce_callback(persisted? ? :inbound_update : :inbound_create, attributes: attributes)
  save!
end

#salesforce_on_createObject



113
114
115
116
117
# File 'lib/draisine/active_record.rb', line 113

def salesforce_on_create
  if !salesforce_skip_sync && self.class.salesforce_outbound_create?
    self.class.salesforce_enqueue_or_run(OutboundCreateJob, self)
  end
end

#salesforce_on_deleteObject



146
147
148
149
150
# File 'lib/draisine/active_record.rb', line 146

def salesforce_on_delete
  if !salesforce_skip_sync && self.class.salesforce_outbound_delete?
    self.class.salesforce_enqueue_or_run(OutboundDeleteJob, self)
  end
end

#salesforce_on_updateObject



127
128
129
130
131
132
133
134
135
# File 'lib/draisine/active_record.rb', line 127

def salesforce_on_update
  if !salesforce_skip_sync && self.class.salesforce_outbound_update?
    self.class.salesforce_enqueue_or_run(
      OutboundUpdateJob,
      self,
      salesforce_attributes.slice(*changed)
    )
  end
end

#salesforce_outbound_createObject



119
120
121
122
123
124
125
# File 'lib/draisine/active_record.rb', line 119

def salesforce_outbound_create
  attrs = salesforce_attributes.compact
  response = salesforce_syncer.create(attrs)
  self.salesforce_id = response.fetch('id')
  salesforce_skipping_sync { save! } if persisted?
  salesforce_callback(:outbound_create, attributes: attrs)
end

#salesforce_outbound_deleteObject



152
153
154
155
# File 'lib/draisine/active_record.rb', line 152

def salesforce_outbound_delete
  salesforce_syncer.delete(salesforce_id)
  salesforce_callback(:outbound_delete)
end

#salesforce_outbound_update(updated_attributes) ⇒ Object



137
138
139
140
141
142
143
144
# File 'lib/draisine/active_record.rb', line 137

def salesforce_outbound_update(updated_attributes)
  self.class.transaction do
    salesforce_syncer.update(salesforce_id, updated_attributes)
    timestamp = salesforce_syncer.get_system_modstamp(salesforce_id)
    update_column(:salesforce_updated_at, timestamp)
    salesforce_callback(:outbound_update, attributes: updated_attributes)
  end
end

#salesforce_skipping_sync(&block) ⇒ Object



157
158
159
160
161
162
163
# File 'lib/draisine/active_record.rb', line 157

def salesforce_skipping_sync(&block)
  old_sync = self.salesforce_skip_sync
  self.salesforce_skip_sync = true
  instance_eval(&block)
ensure
  self.salesforce_skip_sync = old_sync
end