Class: PaperTrailDiff::ActivityChildCandidateLoader

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

Overview

Loads direct-child identities active at or after one activity boundary.

Instance Method Summary collapse

Constructor Details

#initialize(parent_class, parent_ids, reflection, range) ⇒ ActivityChildCandidateLoader

: (untyped, Array, untyped, ActivityRange) -> void

Parameters:



8
9
10
11
12
13
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 8

def initialize(parent_class, parent_ids, reflection, range)
  @parent_class = parent_class
  @parent_ids = parent_ids
  @reflection = reflection
  @range = range
end

Instance Method Details

#callArray[untyped]

: () -> Array

Returns:

  • (Array[untyped])


16
17
18
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 16

def call
  historical_ids | current_ids
end

#candidate_scope(version_class) ⇒ VersionAssociationCandidateScope

: (untyped) -> VersionAssociationCandidateScope

Parameters:

  • (Object)

Returns:



44
45
46
47
48
49
50
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 44

def candidate_scope(version_class)
  VersionAssociationCandidateScope.new(
    version_class,
    @range.start_time,
    end_at: @range.end_time
  )
end

#child_item_typeString

: () -> String

Returns:

  • (String)


64
65
66
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 64

def child_item_type
  @reflection.klass.base_class.name
end

#current_idsArray[untyped]

: () -> Array

Returns:

  • (Array[untyped])


53
54
55
56
57
58
59
60
61
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 53

def current_ids
  return [] unless @range.current_end?

  relation = @reflection.klass.base_class.unscoped.where(
    @reflection.foreign_key => @parent_ids
  )
  relation = relation.where(@reflection.type => parent_types) if @reflection.options[:as]
  relation.distinct.pluck(@reflection.klass.primary_key)
end

#historical_idsArray[untyped]

: () -> Array

Returns:

  • (Array[untyped])


28
29
30
31
32
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 28

def historical_ids
  version_class = @parent_class.paper_trail.version_class
  candidate_scope(version_class).call(historical_relation(version_class))
                                .distinct.pluck(version_class.arel_table[:item_id])
end

#historical_relation(version_class) ⇒ Object

: (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


35
36
37
38
39
40
41
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 35

def historical_relation(version_class)
  @parent_class.paper_trail.version_association_class.joins(:version).where(
    foreign_key_name: @reflection.foreign_key.to_s,
    foreign_key_id: @parent_ids,
    foreign_type: parent_types
  ).where(version_class.table_name => { item_type: child_item_type })
end

#parent_typesArray[String?]

: () -> Array

Returns:

  • (Array[String?])


69
70
71
# File 'lib/paper_trail_diff/activity_child_candidate_loader.rb', line 69

def parent_types
  [nil, '', @parent_class.name.to_s, @parent_class.base_class.name.to_s].uniq
end