Module: ActiveRecord::Materialized::Tasks

Extended by:
T::Sig
Defined in:
lib/activerecord/materialized/tasks.rb

Overview

Defines the ‘materialized:*` rake tasks (refresh_all, refresh_stale, rebuild, verify, warm_up).

Constant Summary collapse

DEFINITIONS =
T.let(
  {
    refresh_all: "Refresh all registered materialized views",
    refresh_stale: "Refresh stale materialized views",
    rebuild: "Rebuild (fully materialize) all registered materialized views",
    verify: "Verify materialized view cache tables match their source relations",
    warm_up: "Materialize each view's configured warm_up partitions"
  }.freeze,
  T::Hash[Symbol, String]
)

Class Method Summary collapse

Class Method Details

.define!Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/activerecord/materialized/tasks.rb', line 22

def self.define!
  application = T.let(T.unsafe(::Rake.application), T.untyped)
  application.instance_eval do
    T.bind(self, T.untyped)

    namespace :materialized do
      DEFINITIONS.each do |task_name, description|
        desc description
        task(task_name => :environment) { Tasks.run!(task_name) }
      end
    end
  end
end

.run!(task_name) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/activerecord/materialized/tasks.rb', line 37

def self.run!(task_name)
  case task_name
  when :refresh_all then run_refresh_all!
  when :refresh_stale then run_refresh_stale!
  when :rebuild then run_rebuild_all!
  when :verify then run_verify!
  when :warm_up then run_warm_up_all!
  end
end

.run_rebuild_all!Object



61
62
63
64
# File 'lib/activerecord/materialized/tasks.rb', line 61

def self.run_rebuild_all!
  Registry.rebuild_all!
  T.unsafe(Rails).logger.debug { "Rebuilt #{Registry.all.size} materialized view(s)." }
end

.run_refresh_all!Object



48
49
50
51
# File 'lib/activerecord/materialized/tasks.rb', line 48

def self.run_refresh_all!
  Registry.refresh_all!
  T.unsafe(Rails).logger.debug { "Refreshed #{Registry.all.size} materialized view(s)." }
end

.run_refresh_stale!Object



54
55
56
57
58
# File 'lib/activerecord/materialized/tasks.rb', line 54

def self.run_refresh_stale!
  stale = Registry.all.select(&:stale?)
  stale.each(&:refresh!)
  T.unsafe(Rails).logger.debug { "Refreshed #{stale.size} stale materialized view(s)." }
end

.run_verify!Object



67
68
69
70
# File 'lib/activerecord/materialized/tasks.rb', line 67

def self.run_verify!
  ActiveRecord::Materialized.verify_schema!
  T.unsafe(Rails).logger.debug { "Verified #{Registry.all.size} materialized view schema(s)." }
end

.run_warm_up_all!Object



73
74
75
76
# File 'lib/activerecord/materialized/tasks.rb', line 73

def self.run_warm_up_all!
  Registry.warm_up_all!
  T.unsafe(Rails).logger.debug { "Warmed up #{Registry.all.size} materialized view(s)." }
end