Class: PaperTrailDiff::ActivityRelationship
- Inherits:
-
Object
- Object
- PaperTrailDiff::ActivityRelationship
- 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
-
#event_attribute(record, name, state:) ⇒ Object
: (untyped, untyped, state: Symbol) -> untyped.
-
#member_of_owner?(record, reflection, owner, state: :after) ⇒ Boolean
: (untyped, untyped, RecordSnapshot, ?state: Symbol) -> bool.
-
#owner_id(record, reflection, state:) ⇒ Object
: (untyped, untyped, state: Symbol) -> untyped.
-
#owner_types(reflection, owner) ⇒ Array[String]
: (untyped, RecordSnapshot) -> Array.
-
#relationship_owner_values(record, reflection, state:) ⇒ Array[String]
: (untyped, untyped, state: Symbol) -> Array.
Instance Method Details
#event_attribute(record, name, state:) ⇒ Object
: (untyped, untyped, state: Symbol) -> untyped
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
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.[: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
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
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
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 |