Module: ActiveRecord::Materialized::ViewConfigurationClassMethods::ClassMethods

Extended by:
T::Sig
Includes:
ActiveRecord::Materialized::ViewIncrementalClassMethods::ClassMethods, ActiveRecord::Materialized::ViewRefreshPolicyClassMethods::ClassMethods
Defined in:
lib/activerecord/materialized/view_configuration_class_methods.rb

Overview

The configuration DSL methods available on a ActiveRecord::Materialized::View subclass.

Instance Method Summary collapse

Methods included from ActiveRecord::Materialized::ViewRefreshPolicyClassMethods::ClassMethods

#cold_read, #max_staleness, #refresh_debounce, #refresh_on_change, #resolved_cold_read_strategy, #resolved_max_staleness, #resolved_refresh_debounce, #resolved_refresh_strategy, #resolved_warm_up_queries, #warm_up, #warm_up!

Methods included from ActiveRecord::Materialized::ViewIncrementalClassMethods::ClassMethods

#aggregate_analysis, #delta_maintaining?, #incremental_from, #incremental_key_columns, #incremental_keys, #incremental_source_override?, #incrementally_maintainable?, #maintenance_key_columns, #record_summary_delta!, #record_write_change!, #record_write_delta!, #refresh_mode, #resolved_incremental_source, #resolved_refresh_mode, #view_definition

Instance Method Details

#depends_on(*tables) ⇒ Object



55
56
57
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 55

def depends_on(*tables)
  DependencyRegistry.register(view_class, tables)
end

#inherited(subclass) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 28

def inherited(subclass)
  super
  T.unsafe(subclass).instance_variable_set(:@dependency_tables, [])
  T.unsafe(subclass).instance_variable_set(:@refresh_strategy, nil)
  T.unsafe(subclass).instance_variable_set(:@refresh_debounce, nil)
  T.unsafe(subclass).instance_variable_set(:@refresh_mode, nil)
  T.unsafe(subclass).instance_variable_set(:@incremental_source_definition, nil)
  T.unsafe(subclass).instance_variable_set(:@incremental_key_columns, nil)
  T.unsafe(subclass).instance_variable_set(:@cold_read_strategy, nil)
  T.unsafe(subclass).instance_variable_set(:@warm_up_definition, nil)
end

#materialized_from(&block) ⇒ Object



49
50
51
52
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 49

def materialized_from(&block)
  @source_definition = T.let(block, T.nilable(SourceDefinition))
  Registry.register(view_class) unless view_class.abstract_class?
end

#metadataObject



68
69
70
71
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 68

def 
  @metadata = T.let(@metadata, T.nilable(ActiveRecord::Materialized::Metadata))
  @metadata ||= ActiveRecord::Materialized::Metadata.new(view_class)
end

#resolved_sourceObject



60
61
62
63
64
65
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 60

def resolved_source
  resolve_source_definition(
    @source_definition,
    "materialized_from is required for #{view_class.name || view_class.view_key}"
  )
end

#view_classObject



23
24
25
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 23

def view_class
  T.cast(self, T.class_of(View))
end

#view_keyObject



41
42
43
44
45
46
# File 'lib/activerecord/materialized/view_configuration_class_methods.rb', line 41

def view_key
  return T.must(view_class.name).underscore if view_class.name.present?

  table = T.let(T.unsafe(view_class).instance_variable_get(:@table_name), T.nilable(String))
  table.presence || "anonymous_view_#{view_class.object_id}"
end