Class: Draisine::ConflictDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/draisine/conflict_detector.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, remote_model, attributes_list = model.class.salesforce_audited_attributes) ⇒ ConflictDetector

Returns a new instance of ConflictDetector.



4
5
6
7
8
# File 'lib/draisine/conflict_detector.rb', line 4

def initialize(model, remote_model, attributes_list = model.class.salesforce_audited_attributes)
  @model = model
  @remote_model = remote_model
  @attributes_list = attributes_list
end

Instance Attribute Details

#attributes_listObject (readonly)

Returns the value of attribute attributes_list.



3
4
5
# File 'lib/draisine/conflict_detector.rb', line 3

def attributes_list
  @attributes_list
end

#modelObject (readonly)

Returns the value of attribute model.



3
4
5
# File 'lib/draisine/conflict_detector.rb', line 3

def model
  @model
end

#remote_modelObject (readonly)

Returns the value of attribute remote_model.



3
4
5
# File 'lib/draisine/conflict_detector.rb', line 3

def remote_model
  @remote_model
end

Instance Method Details

#conflict?Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/draisine/conflict_detector.rb', line 10

def conflict?
  conflict_type != :no_conflict
end

#conflict_typeObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/draisine/conflict_detector.rb', line 14

def conflict_type
  if model && remote_model
    if diff.diff_keys.empty?
      :no_conflict
    else
      :mismatching_records
    end
  elsif model
    :remote_record_missing
  elsif remote_model
    :local_record_missing
  else
    :no_conflict
  end
end

#diffObject



30
31
32
33
34
35
36
# File 'lib/draisine/conflict_detector.rb', line 30

def diff
  return unless model && remote_model

  @diff ||= HashDiff.sf_diff(
      model.salesforce_attributes.slice(*attributes_list).compact,
      remote_model.attributes.slice(*attributes_list).compact)
end