module PluginAWeek #:nodoc: module PluginMigrations module Extensions #:nodoc: # Adds support for the plugin schema info table module SchemaStatements def self.included(base) #:nodoc: base.class_eval do alias_method_chain :initialize_schema_information, :plugins alias_method_chain :dump_schema_information, :plugins end end # Creates the plugin schema info table def initialize_schema_information_with_plugins initialize_schema_information_without_plugins begin execute "CREATE TABLE #{PluginAWeek::PluginMigrations::Migrator.schema_info_table_name} (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})" rescue ActiveRecord::StatementInvalid # Schema has been initialized end end # Dumps the plugin schema info table as well as information about the # current plugin migrations def dump_schema_information_with_plugins schema_information = [] dump = dump_schema_information_without_plugins schema_information << dump if dump begin plugins = ActiveRecord::Base.connection.select_all("SELECT * FROM #{PluginAWeek::PluginMigrations::Migrator.schema_info_table_name}") plugins.each do |plugin| if (version = plugin['version'].to_i) > 0 plugin_name = ActiveRecord::Base.quote_value(plugin['plugin_name']) schema_information << "INSERT INTO #{PluginAWeek::PluginMigrations::Migrator.schema_info_table_name} (plugin_name, version) VALUES (#{plugin_name}, #{version})" end end rescue ActiveRecord::StatementInvalid # No Schema Info end schema_information.join(";\n") end end end end end ActiveRecord::ConnectionAdapters::SchemaStatements.class_eval do include PluginAWeek::PluginMigrations::Extensions::SchemaStatements end