class HasArchive::MigrationManager
Public Class Methods
create_archive_for(model)
click to toggle source
# File lib/has_archive/migration_manager.rb, line 5 def self.create_archive_for(model) @table_name = model.table_name fail MigrationExistsException.new(@table_name) if Dir["db/migrate/*_create_archive_for_#{@table_name}.rb"].any? template = <<-MIGRATION class CreateArchiveFor#{@table_name.camelize} < ActiveRecord::Migration def change create_table :#{@table_name.singularize}_archives do |t| #{columns.map {|c| build_column(c) }.join("\n") } t.datetime :archived_at, null: false end #{indexes.map {|i| build_index(i) }.join("\n") } end end\n MIGRATION File.write("db/migrate/#{file_name('create_archive_for')}", template) end
update_archive_for(model)
click to toggle source
# File lib/has_archive/migration_manager.rb, line 26 def self.update_archive_for(model) @table_name = model.table_name end
Private Class Methods
build_column(c)
click to toggle source
# File lib/has_archive/migration_manager.rb, line 40 def self.build_column(c) limit = c.limit ? ", limit: #{c.limit}" : '' " t.#{c.type}#{' ' * (12 - c.type.size)}:#{c.name}#{limit}" end
build_index(i)
click to toggle source
# File lib/has_archive/migration_manager.rb, line 45 def self.build_index(i) # unique = i.unique ? ', unique: true' : '' columns = i.columns.one? ? ":#{i.columns.first}" : i.columns.map(&:to_sym) # " add_index :#{@table_name}, :#{columns}#{unique}" " add_index :#{@table_name.singularize}_archives, #{columns}" end
columns()
click to toggle source
# File lib/has_archive/migration_manager.rb, line 32 def self.columns ActiveRecord::Base.connection.columns(@table_name).select {|c| c.name != 'id' } end
file_name(action)
click to toggle source
# File lib/has_archive/migration_manager.rb, line 52 def self.file_name(action) action = action.underscore.gsub(/\s+/, '_') # TODO: figure out how number argument is actually supposed to be used "#{ActiveRecord::Migration.next_migration_number(1)}_#{action}_#{@table_name}.rb" end
indexes()
click to toggle source
# File lib/has_archive/migration_manager.rb, line 36 def self.indexes ActiveRecord::Base.connection.indexes(@table_name) end