Sha256: ce462731ac7d5071874c2f7292b0145acb1fdf270d4cbf783ff9398cba39c6eb

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
  def initialize_schema_migrations_table_with_plugins
    initialize_schema_migrations_table_without_plugins

    begin
      psm_table = ActiveRecord::Migrator.schema_migrations_table_name
      unless ActiveRecord::Base.connection.table_exists?(psm_table)
        execute "CREATE TABLE #{psm_table} (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:string)})"
      end
      plugins_and_versions = select_all("SELECT plugin_name, version from #{psm_table}")
      plugins_and_versions.each do |plugin_data|
        plugin_name, version = plugin_data["plugin_name"], plugin_data["version"]
        plugin = Desert::Manager.find_plugin(plugin_name)
        migration_versions = Dir["#{plugin.migration_path}/*.rb"].map do |path|
          File.basename(path, ".rb")
        end.select do |migration|
          # Make sure versions don't start with zero, or Integer will interpret them as octal
          version_from_table_stripped = version.sub(/^0*/, '')
          migration_version_stripped = migration.split("_").first.sub(/^0*/, '')
          Integer(migration_version_stripped) <= Integer(version_from_table_stripped)
        end
        migration_versions.each do |migration_version|
          insert_sql = ActiveRecord::Base.send(:sanitize_sql, [
            "INSERT INTO #{Desert::PluginMigrations::Migrator.schema_migrations_table_name}(plugin_name, version) VALUES(?, ?)",
            plugin_name,
            Integer(migration_version.split("_").first.sub(/^0*/, ''))
          ])
          execute insert_sql
        end
      end
    rescue ActiveRecord::StatementInvalid
      # Schema has been initialized
    end
  end
  alias_method_chain :initialize_schema_migrations_table, :plugins
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cauta-desert-0.5.2 lib/desert/plugin_migrations/2.1/extensions/schema_statements.rb