diff --git a/CHANGELOG.md b/CHANGELOG.md index bc86dd8d..81f840e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,8 @@ recommendations of [keepachangelog.com](http://keepachangelog.com/). ### Fixed -- None +- [#949](https://github.com/airblade/paper_trail/issues/949) - Inherit from the + new versioned migration class, e.g. `ActiveRecord::Migration[5.1]` ## 7.0.0 (2017-04-01) diff --git a/lib/generators/paper_trail/install_generator.rb b/lib/generators/paper_trail/install_generator.rb index 3ef0fdc0..9f06014c 100644 --- a/lib/generators/paper_trail/install_generator.rb +++ b/lib/generators/paper_trail/install_generator.rb @@ -50,7 +50,18 @@ module PaperTrail if self.class.migration_exists?(migration_dir, template) ::Kernel.warn "Migration already exists: #{template}" else - migration_template "#{template}.rb", "db/migrate/#{template}.rb" + migration_template( + "#{template}.rb.erb", + "db/migrate/#{template}.rb", + migration_version: migration_version + ) + end + end + + def migration_version + major = ActiveRecord::VERSION::MAJOR + if major >= 5 + "[#{major}.#{ActiveRecord::VERSION::MINOR}]" end end end diff --git a/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb b/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb.erb similarity index 100% rename from lib/generators/paper_trail/templates/add_object_changes_to_versions.rb rename to lib/generators/paper_trail/templates/add_object_changes_to_versions.rb.erb diff --git a/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb b/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb.erb similarity index 100% rename from lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb rename to lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb.erb diff --git a/lib/generators/paper_trail/templates/create_version_associations.rb b/lib/generators/paper_trail/templates/create_version_associations.rb.erb similarity index 100% rename from lib/generators/paper_trail/templates/create_version_associations.rb rename to lib/generators/paper_trail/templates/create_version_associations.rb.erb diff --git a/lib/generators/paper_trail/templates/create_versions.rb b/lib/generators/paper_trail/templates/create_versions.rb.erb similarity index 97% rename from lib/generators/paper_trail/templates/create_versions.rb rename to lib/generators/paper_trail/templates/create_versions.rb.erb index 900cb1a7..7b5beed0 100644 --- a/lib/generators/paper_trail/templates/create_versions.rb +++ b/lib/generators/paper_trail/templates/create_versions.rb.erb @@ -1,6 +1,6 @@ # This migration creates the `versions` table, the only schema PT requires. # All other migrations PT provides are optional. -class CreateVersions < ActiveRecord::Migration +class CreateVersions < ActiveRecord::Migration<%= migration_version %> # Class names of MySQL adapters. # - `MysqlAdapter` - Used by gems: `mysql`, `activerecord-jdbcmysql-adapter`. # - `Mysql2Adapter` - Used by `mysql2` gem. diff --git a/spec/generators/install_generator_spec.rb b/spec/generators/install_generator_spec.rb index ab0e1338..0194a274 100644 --- a/spec/generators/install_generator_spec.rb +++ b/spec/generators/install_generator_spec.rb @@ -15,12 +15,21 @@ RSpec.describe PaperTrail::InstallGenerator, type: :generator do end it "generates a migration for creating the 'versions' table" do + expected_parent_class = lambda { + old_school = "ActiveRecord::Migration" + ar_version = ActiveRecord::VERSION + if ar_version::MAJOR >= 5 + format("%s[%d.%d]", old_school, ar_version::MAJOR, ar_version::MINOR) + else + old_school + end + }.call expect(destination_root).to( have_structure { directory("db") { directory("migrate") { migration("create_versions") { - contains "class CreateVersions" + contains("class CreateVersions < " + expected_parent_class) contains "def change" contains "create_table :versions" } diff --git a/spec/generators/paper_trail/templates/create_versions_spec.rb b/spec/generators/paper_trail/templates/create_versions_spec.rb deleted file mode 100644 index 7e9b118f..00000000 --- a/spec/generators/paper_trail/templates/create_versions_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -require "rails_helper" -require "generators/paper_trail/templates/create_versions" - -RSpec.describe CreateVersions do - describe "#change", verify_stubs: false do - let(:migration) { described_class.new } - - before do - allow(migration).to receive(:add_index) - allow(migration).to receive(:create_table) - end - - it "creates the versions table" do - migration.change - expect(migration).to have_received(:create_table) do |arg1| - expect(arg1).to eq(:versions) - end - end - - case ENV["DB"] - when "mysql" - it "uses InnoDB engine" do - migration.change - expect(migration).to have_received(:create_table) do |_, arg2| - expect(arg2[:options]).to match(/ENGINE=InnoDB/) - end - end - - it "uses utf8mb4 character set" do - migration.change - expect(migration).to have_received(:create_table) do |_, arg2| - expect(arg2[:options]).to match(/DEFAULT CHARSET=utf8mb4/) - end - end - - it "uses utf8mb4_col collation" do - migration.change - expect(migration).to have_received(:create_table) do |_, arg2| - expect(arg2[:options]).to match(/COLLATE=utf8mb4_general_ci/) - end - end - else - it "passes an empty options hash to create_table" do - migration.change - expect(migration).to have_received(:create_table) do |_, arg2| - expect(arg2).to eq({}) - end - end - end - end -end