Class: PaperTrailDiff::ActivityChildCandidateLoader
- Inherits:
-
Object
- Object
- PaperTrailDiff::ActivityChildCandidateLoader
- 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
-
#call ⇒ Array[untyped]
: () -> Array.
-
#candidate_scope(version_class) ⇒ VersionAssociationCandidateScope
: (untyped) -> VersionAssociationCandidateScope.
-
#child_item_type ⇒ String
: () -> String.
-
#current_ids ⇒ Array[untyped]
: () -> Array.
-
#historical_ids ⇒ Array[untyped]
: () -> Array.
-
#historical_relation(version_class) ⇒ Object
: (untyped) -> untyped.
-
#initialize(parent_class, parent_ids, reflection, range) ⇒ ActivityChildCandidateLoader
constructor
: (untyped, Array, untyped, ActivityRange) -> void.
-
#parent_types ⇒ Array[String?]
: () -> Array.
Constructor Details
#initialize(parent_class, parent_ids, reflection, range) ⇒ ActivityChildCandidateLoader
: (untyped, Array, untyped, ActivityRange) -> void
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
#call ⇒ Array[untyped]
: () -> Array
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
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_type ⇒ String
: () -> 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_ids ⇒ Array[untyped]
: () -> Array
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.[:as] relation.distinct.pluck(@reflection.klass.primary_key) end |
#historical_ids ⇒ Array[untyped]
: () -> Array
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
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_types ⇒ Array[String?]
: () -> Array
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 |