module Viewy::ActsAsView

Provides a wrapper for SQL views that allows them and their materialized dependencies to be refreshed easily

Public Instance Methods

refresh!() click to toggle source

Refreshes this view and all materialized views it depends on. NOTE: the look-up for dependencies can take a second to run.

@raise [ActiveRecord::RecordNotFoundError] raised when the view refresh! is called on does not exist @raise [ActiveRecord::StatementInvalidError] raised if a dependent view is somehow not refreshed correctly

@return [nil]

# File lib/viewy/acts_as_view.rb, line 14
def refresh!
  view_dep = Viewy::Models::ViewDependency.find(table_name)
  deps = Viewy::DependencyManagement::ViewSorter.new.sorted_view_subset(view_names: view_dep.view_dependencies)
  deps.each do |view_dependency|
    materialized_view_dependency = Viewy::Models::MaterializedViewDependency.find_by(view_name: view_dependency)
    ActiveRecord::Base.connection.execute("REFRESH MATERIALIZED VIEW #{view_dependency}") if materialized_view_dependency
  end
end