Sha256: 793c97b7fdadefbe6dd65cd5848dc9d284cdd3d4cb09a8b03b5cada16528bc7e

Contents?: true

Size: 1.7 KB

Versions: 9

Compression:

Stored size: 1.7 KB

Contents

module Historiographer
  module HistoryMigrationMysql
    #
    # class CreateAdGroupHistories < ActiveRecord::Migration
    #  def change
    #    create_table :ad_group_histories do |t|
    #      t.histories
    #    end
    #  end
    # end
    #
    # t.histories(except: ["name"]) # don't include name column
    # t.histories(only: ["name"])   # only include name column
    # t.histories(no_business_columns: true) # only add history timestamps and history_user_id; manually add your own columns
    #
    # Will automatically add user_id, history_started_at,
    # and history_ended_at columns
    #
    def histories(except: [], only: [], no_business_columns: false)
      original_table_name = self.name.gsub(/_histories$/) {}.pluralize
      foreign_key         = original_table_name.singularize.foreign_key

      class_definer = Class.new(ActiveRecord::Base) do
      end

      class_name = original_table_name.classify
      klass      = Object.const_set(class_name, class_definer)
      original_columns = klass.columns.reject { |c| c.name == "id" || except.include?(c.name) || (only.any? && only.exclude?(c.name)) || no_business_columns }

      integer foreign_key.to_sym, null: false

      original_columns.each do |column|
        opts = {}
        opts.merge!(column.as_json.clone)

        send(column.type, column.name, opts.symbolize_keys!)
      end

      datetime :history_started_at, null: false
      datetime :history_ended_at
      integer :history_user_id

      index :history_started_at
      index :history_ended_at
      index :history_user_id
      index foreign_key

      ActiveRecord::Base.connection.indexes(original_table_name).each do |index|
        index index.columns
      end

    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
historiographer-1.4.3 lib/historiographer/history_migration_mysql.rb
historiographer-1.4.1 lib/historiographer/history_migration_mysql.rb
historiographer-1.4.0 lib/historiographer/history_migration_mysql.rb
historiographer-1.3.1 lib/historiographer/history_migration_mysql.rb
historiographer-1.3.0 lib/historiographer/history_migration_mysql.rb
historiographer-1.2.0 lib/historiographer/history_migration_mysql.rb
historiographer-1.1.0 lib/historiographer/history_migration_mysql.rb
historiographer-1.0.2 lib/historiographer/history_migration_mysql.rb
historiographer-1.0.0 lib/historiographer/history_migration_mysql.rb