ifad/chronomodel

View on GitHub
lib/chrono_model/adapter/migrations_modules/stable.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module ChronoModel
  class Adapter
    module MigrationsModules
      module Stable
        # If adding an index to a temporal table, add it to the one in the
        # temporal schema and to the history one. If the `:unique` option is
        # present, it is removed from the index created in the history table.
        #
        def add_index(table_name, column_name, **options)
          return super unless is_chrono?(table_name)

          transaction do
            on_temporal_schema { super }

            # Uniqueness constraints do not make sense in the history table
            options = options.dup.tap { |o| o.delete(:unique) } if options[:unique].present?

            on_history_schema { super(table_name, column_name, **options) }
          end
        end

        # If removing an index from a temporal table, remove it both from the
        # temporal and the history schemas.
        #
        def remove_index(table_name, column_name = nil, **options)
          return super unless is_chrono?(table_name)

          transaction do
            on_temporal_schema { super }

            on_history_schema { super }
          end
        end
      end
    end
  end
end

ChronoModel::Adapter::Migrations.include ChronoModel::Adapter::MigrationsModules::Stable