class ActiveRecord::Migration::CheckPending

This class is used to verify that all migrations have been run before loading a web page if config.active_record.migration_error is set to :page_load

Public Class Methods

new(app, file_watcher: ActiveSupport::FileUpdateChecker) click to toggle source
# File lib/active_record/migration.rb, line 579
def initialize(app, file_watcher: ActiveSupport::FileUpdateChecker)
  @app = app
  @needs_check = true
  @mutex = Mutex.new
  @file_watcher = file_watcher
end

Public Instance Methods

call(env) click to toggle source
# File lib/active_record/migration.rb, line 586
def call(env)
  @mutex.synchronize do
    @watcher ||= build_watcher do
      @needs_check = true
      ActiveRecord::Migration.check_pending!(connection)
      @needs_check = false
    end

    if @needs_check
      @watcher.execute
    else
      @watcher.execute_if_updated
    end
  end

  @app.call(env)
end

Private Instance Methods

build_watcher(&block) click to toggle source
# File lib/active_record/migration.rb, line 605
def build_watcher(&block)
  paths = Array(connection.migration_context.migrations_paths)
  @file_watcher.new([], paths.index_with(["rb"]), &block)
end
connection() click to toggle source
# File lib/active_record/migration.rb, line 610
def connection
  ActiveRecord::Base.connection
end