Module: Upkeep::Runtime::RelationObserver

Defined in:
lib/upkeep/runtime.rb

Constant Summary collapse

SUPPRESS_DEPENDENCY_KEY =
:upkeep_runtime_relation_dependency_suppressed

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.dependency_tracking_suppressed?Boolean

Returns:

  • (Boolean)


820
821
822
# File 'lib/upkeep/runtime.rb', line 820

def self.dependency_tracking_suppressed?
  Thread.current[SUPPRESS_DEPENDENCY_KEY]
end

.suppress_dependency_trackingObject



812
813
814
815
816
817
818
# File 'lib/upkeep/runtime.rb', line 812

def self.suppress_dependency_tracking
  previous = Thread.current[SUPPRESS_DEPENDENCY_KEY]
  Thread.current[SUPPRESS_DEPENDENCY_KEY] = true
  yield
ensure
  Thread.current[SUPPRESS_DEPENDENCY_KEY] = previous
end

Instance Method Details

#delete_allObject



857
858
859
860
861
862
863
864
865
866
867
868
869
# File 'lib/upkeep/runtime.rb', line 857

def delete_all
  analysis = ActiveRecordQuery.analyze(self, opaque_table_policy: :allow_table)
  event = ChangeEvents.bulk_delete(
    table: klass.table_name,
    model: klass.name,
    changed_attributes: [klass.primary_key].compact,
    predicate_sql: analysis.sql,
    predicate_coverage: analysis.coverage.to_s,
    predicate_table_columns: analysis.table_columns
  )

  super.tap { ChangeLog.record(event) }
end

#exec_queriesObject



824
825
826
827
# File 'lib/upkeep/runtime.rb', line 824

def exec_queries(...)
  analysis = relation_analysis_for_observation
  super.tap { |records| record_relation_provenance(records, analysis) }
end

#pluck(*column_names) ⇒ Object



837
838
839
840
# File 'lib/upkeep/runtime.rb', line 837

def pluck(*column_names)
  record_query_dependency(column_names)
  super
end

#to_aObject



833
834
835
# File 'lib/upkeep/runtime.rb', line 833

def to_a
  to_ary
end

#to_aryObject



829
830
831
# File 'lib/upkeep/runtime.rb', line 829

def to_ary
  super.tap { |records| record_relation_provenance(records, relation_analysis_for_observation) }
end

#update_all(updates) ⇒ Object



842
843
844
845
846
847
848
849
850
851
852
853
854
855
# File 'lib/upkeep/runtime.rb', line 842

def update_all(updates)
  analysis = ActiveRecordQuery.analyze(self, opaque_table_policy: :allow_table)
  event = ChangeEvents.bulk_update(
    table: klass.table_name,
    model: klass.name,
    changed_attributes: update_columns(updates),
    predicate_sql: analysis.sql,
    predicate_coverage: analysis.coverage.to_s,
    predicate_table_columns: analysis.table_columns,
    new_values: update_values(updates)
  )

  super.tap { ChangeLog.record(event) }
end