Class: PaperTrailDiff::ActivityRelationship

Inherits:
Object
  • Object
show all
Defined in:
lib/paper_trail_diff/activity_relationship.rb,
sig/generated/paper_trail_diff/activity_relationship.rbs

Overview

Reads event-side foreign keys and matches them to an immutable snapshot owner.

Instance Method Summary collapse

Instance Method Details

#event_attribute(record, name, state:) ⇒ Object

: (untyped, untyped, state: Symbol) -> untyped

Parameters:

  • (Object)
  • (Object)
  • state: (Symbol)

Returns:

  • (Object)


38
39
40
41
42
43
44
# File 'lib/paper_trail_diff/activity_relationship.rb', line 38

def event_attribute(record, name, state:)
  if record.is_a?(ActivitySnapshotDelta)
    return state == :before ? record.before_value(name) : record.after_value(name)
  end

  record.public_send(name)
end

#member_of_owner?(record, reflection, owner, state: :after) ⇒ Boolean

: (untyped, untyped, RecordSnapshot, ?state: Symbol) -> bool

Parameters:

  • (Object)
  • (Object)
  • (RecordSnapshot)
  • state: (Symbol) (defaults to: :after)

Returns:

  • (Boolean)


8
9
10
11
12
13
14
15
16
17
18
# File 'lib/paper_trail_diff/activity_relationship.rb', line 8

def member_of_owner?(record, reflection, owner, state: :after)
  actual = relationship_owner_values(record, reflection, state: state)
  expected_ids = Array(owner.id)
  # @type var expected_ids: Array[untyped]
  expected = expected_ids.map { |id| id.to_s } # rubocop:disable Style/SymbolProc
  return false unless actual == expected
  return true unless reflection.options[:as]

  type = event_attribute(record, reflection.type, state: state).to_s
  owner_types(reflection, owner).include?(type)
end

#owner_id(record, reflection, state:) ⇒ Object

: (untyped, untyped, state: Symbol) -> untyped

Parameters:

  • (Object)
  • (Object)
  • state: (Symbol)

Returns:

  • (Object)


21
22
23
24
25
26
# File 'lib/paper_trail_diff/activity_relationship.rb', line 21

def owner_id(record, reflection, state:)
  values = Array(reflection.foreign_key).map do |foreign_key|
    event_attribute(record, foreign_key, state: state)
  end
  values.one? ? values.first : values
end

#owner_types(reflection, owner) ⇒ Array[String]

: (untyped, RecordSnapshot) -> Array

Parameters:

Returns:

  • (Array[String])


47
48
49
50
51
52
53
# File 'lib/paper_trail_diff/activity_relationship.rb', line 47

def owner_types(reflection, owner)
  [
    owner.type.to_s,
    reflection.active_record.name.to_s,
    reflection.active_record.base_class.name.to_s
  ]
end

#relationship_owner_values(record, reflection, state:) ⇒ Array[String]

: (untyped, untyped, state: Symbol) -> Array

Parameters:

  • (Object)
  • (Object)
  • state: (Symbol)

Returns:

  • (Array[String])


31
32
33
34
35
# File 'lib/paper_trail_diff/activity_relationship.rb', line 31

def relationship_owner_values(record, reflection, state:)
  Array(reflection.foreign_key).map do |key|
    event_attribute(record, key, state: state).to_s
  end
end