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)


1001
1002
1003
# File 'lib/upkeep/runtime.rb', line 1001

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

.suppress_dependency_trackingObject



993
994
995
996
997
998
999
# File 'lib/upkeep/runtime.rb', line 993

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

#calculate(operation, column_name) ⇒ Object



1030
1031
1032
1033
# File 'lib/upkeep/runtime.rb', line 1030

def calculate(operation, column_name)
  record_calculation_dependency(operation, column_name)
  super
end

#delete_allObject



1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
# File 'lib/upkeep/runtime.rb', line 1051

def delete_all
  analysis = ActiveRecordQuery.analyze_for_write(self)
  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,
    id: single_primary_key_predicate_value(analysis)
  )

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

#exec_queriesObject



1005
1006
1007
1008
1009
1010
1011
# File 'lib/upkeep/runtime.rb', line 1005

def exec_queries(...)
  analysis = relation_analysis_for_observation
  super.tap do |records|
    record_relation_provenance(records, analysis)
    record_relation_dependency(analysis)
  end
end

#pluck(*column_names) ⇒ Object



1025
1026
1027
1028
# File 'lib/upkeep/runtime.rb', line 1025

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

#to_aObject



1021
1022
1023
# File 'lib/upkeep/runtime.rb', line 1021

def to_a
  to_ary
end

#to_aryObject



1013
1014
1015
1016
1017
1018
1019
# File 'lib/upkeep/runtime.rb', line 1013

def to_ary
  analysis = relation_analysis_for_observation
  super.tap do |records|
    record_relation_provenance(records, analysis)
    record_relation_dependency(analysis)
  end
end

#update_all(updates) ⇒ Object



1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
# File 'lib/upkeep/runtime.rb', line 1035

def update_all(updates)
  analysis = ActiveRecordQuery.analyze_for_write(self)
  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),
    id: single_primary_key_predicate_value(analysis)
  )

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