acts_as_archival 1.1.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +1 -1
- data/.rubocop.yml +71 -0
- data/.rubocop_todo.yml +98 -0
- data/.travis.yml +23 -0
- data/Appraisals +7 -7
- data/CHANGELOG.md +29 -0
- data/Gemfile.lock +70 -0
- data/README.md +49 -19
- data/Rakefile +6 -3
- data/acts_as_archival.gemspec +23 -17
- data/gemfiles/rails_5.2.gemfile +8 -0
- data/gemfiles/{rails_4.2.gemfile → rails_6.0.gemfile} +2 -2
- data/gemfiles/{rails_5.0.gemfile → rails_6.1.gemfile} +2 -2
- data/lib/acts_as_archival/version.rb +3 -1
- data/lib/acts_as_archival.rb +2 -0
- data/lib/expected_behavior/acts_as_archival.rb +111 -77
- data/lib/expected_behavior/acts_as_archival_active_record_methods.rb +29 -4
- data/lib/expected_behavior/association_operation/archive.rb +1 -1
- data/lib/expected_behavior/association_operation/base.rb +12 -9
- data/lib/expected_behavior/association_operation/unarchive.rb +2 -2
- data/script/setup +0 -3
- data/test/ambiguous_table_test.rb +3 -1
- data/test/application_record_test.rb +5 -3
- data/test/associations_test.rb +19 -17
- data/test/basic_test.rb +16 -14
- data/test/callbacks_test.rb +8 -6
- data/test/column_test.rb +8 -6
- data/test/deep_nesting_test.rb +6 -4
- data/test/fixtures/another_polys_holder.rb +11 -0
- data/test/fixtures/application_record.rb +2 -0
- data/test/fixtures/application_record_row.rb +2 -0
- data/test/fixtures/archival.rb +9 -7
- data/test/fixtures/archival_grandkid.rb +2 -0
- data/test/fixtures/archival_kid.rb +3 -1
- data/test/fixtures/archival_table_name.rb +2 -0
- data/test/fixtures/callback_archival_4.rb +2 -0
- data/test/fixtures/callback_archival_5.rb +4 -1
- data/test/fixtures/exploder.rb +2 -0
- data/test/fixtures/independent_archival.rb +2 -0
- data/test/fixtures/missing_archive_number.rb +2 -0
- data/test/fixtures/missing_archived_at.rb +2 -0
- data/test/fixtures/plain.rb +2 -0
- data/test/fixtures/poly.rb +3 -1
- data/test/fixtures/readonly_when_archived.rb +3 -1
- data/test/polymorphic_test.rb +29 -4
- data/test/readonly_when_archived_test.rb +6 -4
- data/test/relations_test.rb +63 -0
- data/test/responds_test.rb +8 -6
- data/test/schema.rb +64 -77
- data/test/scope_test.rb +28 -23
- data/test/test_helper.rb +47 -40
- data/test/through_association_test.rb +4 -2
- data/test/transaction_test.rb +7 -58
- metadata +33 -50
- data/gemfiles/rails_4.1.gemfile +0 -8
- data/script/db_setup +0 -51
- data/test/database.yml +0 -26
- data/test/fixtures/mass_attribute_protected.rb +0 -7
- data/test/fixtures/mysql_archival.rb +0 -10
- data/test/fixtures/mysql_exploder.rb +0 -9
- data/test/fixtures/pg_archival.rb +0 -10
- data/test/fixtures/pg_exploder.rb +0 -9
- data/test/mass_attribute_test.rb +0 -20
    
        data/test/scope_test.rb
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 1 2 | 
             
            require_relative "test_helper"
         | 
| 2 3 |  | 
| 3 4 | 
             
            class ScopeTest < ActiveSupport::TestCase
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
              test "simple unarchived scope" do
         | 
| 5 7 | 
             
                Archival.create!
         | 
| 6 8 | 
             
                Archival.create!
         | 
| @@ -9,15 +11,15 @@ class ScopeTest < ActiveSupport::TestCase | |
| 9 11 | 
             
              end
         | 
| 10 12 |  | 
| 11 13 | 
             
              test "simple archived scope" do
         | 
| 12 | 
            -
                Archival.create!.archive
         | 
| 13 | 
            -
                Archival.create!.archive
         | 
| 14 | 
            +
                Archival.create!.archive!
         | 
| 15 | 
            +
                Archival.create!.archive!
         | 
| 14 16 |  | 
| 15 17 | 
             
                assert_equal 2, Archival.archived.count
         | 
| 16 18 | 
             
              end
         | 
| 17 19 |  | 
| 18 20 | 
             
              test "mixed scopes" do
         | 
| 19 21 | 
             
                Archival.create!
         | 
| 20 | 
            -
                Archival.create!.archive
         | 
| 22 | 
            +
                Archival.create!.archive!
         | 
| 21 23 |  | 
| 22 24 | 
             
                assert_equal 1, Archival.archived.count
         | 
| 23 25 | 
             
                assert_equal 1, Archival.unarchived.count
         | 
| @@ -25,8 +27,8 @@ class ScopeTest < ActiveSupport::TestCase | |
| 25 27 |  | 
| 26 28 | 
             
              test "simple archived_from_archive_number" do
         | 
| 27 29 | 
             
                archive_number = "TEST-IT"
         | 
| 28 | 
            -
                Archival.create!.archive(archive_number)
         | 
| 29 | 
            -
                Archival.create!.archive(archive_number)
         | 
| 30 | 
            +
                Archival.create!.archive!(archive_number)
         | 
| 31 | 
            +
                Archival.create!.archive!(archive_number)
         | 
| 30 32 |  | 
| 31 33 | 
             
                assert_equal 2, Archival.archived_from_archive_number(archive_number).count
         | 
| 32 34 | 
             
              end
         | 
| @@ -34,39 +36,41 @@ class ScopeTest < ActiveSupport::TestCase | |
| 34 36 | 
             
              test "negative archived_from_archive_number" do
         | 
| 35 37 | 
             
                archive_number = "TEST-IT"
         | 
| 36 38 | 
             
                bogus_number = "BROKE-IT"
         | 
| 37 | 
            -
                Archival.create!.archive(archive_number)
         | 
| 38 | 
            -
                Archival.create!.archive(archive_number)
         | 
| 39 | 
            +
                Archival.create!.archive!(archive_number)
         | 
| 40 | 
            +
                Archival.create!.archive!(archive_number)
         | 
| 39 41 |  | 
| 40 42 | 
             
                assert_equal 0, Archival.archived_from_archive_number(bogus_number).count
         | 
| 41 43 | 
             
              end
         | 
| 42 44 |  | 
| 43 45 | 
             
              test "mixed archived_from_archive_number" do
         | 
| 44 46 | 
             
                archive_number = "TEST-IT"
         | 
| 45 | 
            -
                Archival.create!.archive(archive_number)
         | 
| 46 | 
            -
                Archival.create!.archive
         | 
| 47 | 
            +
                Archival.create!.archive!(archive_number)
         | 
| 48 | 
            +
                Archival.create!.archive!
         | 
| 47 49 |  | 
| 48 50 | 
             
                assert_equal 1, Archival.archived_from_archive_number(archive_number).count
         | 
| 49 51 | 
             
              end
         | 
| 50 52 |  | 
| 51 53 | 
             
              test "table_name is set to 'legacy'" do
         | 
| 52 | 
            -
                 | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 54 | 
            +
                archived_sql =
         | 
| 55 | 
            +
                  if ActiveRecord.version >= Gem::Version.new("5.2.0")
         | 
| 56 | 
            +
                    "SELECT \"legacy\".* FROM \"legacy\" " \
         | 
| 57 | 
            +
                    'WHERE "legacy"."archived_at" IS NOT NULL AND "legacy"."archive_number" IS NOT NULL'
         | 
| 58 | 
            +
                  else
         | 
| 59 | 
            +
                    "SELECT \"legacy\".* FROM \"legacy\" " \
         | 
| 60 | 
            +
                    'WHERE ("legacy"."archived_at" IS NOT NULL) AND ("legacy"."archive_number" IS NOT NULL)'
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                unarchived_sql = "SELECT \"legacy\".* FROM \"legacy\" " \
         | 
| 63 | 
            +
                    'WHERE "legacy"."archived_at" IS NULL AND "legacy"."archive_number" IS NULL'
         | 
| 60 64 | 
             
                assert_equal archived_sql, ArchivalTableName.archived.to_sql
         | 
| 61 65 | 
             
                assert_equal unarchived_sql, ArchivalTableName.unarchived.to_sql
         | 
| 62 66 | 
             
              end
         | 
| 63 67 |  | 
| 64 68 | 
             
              test "combines with other scope properly" do
         | 
| 65 | 
            -
                Archival.create!(: | 
| 66 | 
            -
                Archival.create!(: | 
| 67 | 
            -
                Archival.create!(: | 
| 68 | 
            -
                bob = Archival.create!(: | 
| 69 | 
            -
                bob.archive
         | 
| 69 | 
            +
                Archival.create!(name: "Robert")
         | 
| 70 | 
            +
                Archival.create!(name: "Bobby")
         | 
| 71 | 
            +
                Archival.create!(name: "Sue")
         | 
| 72 | 
            +
                bob = Archival.create!(name: "Bob")
         | 
| 73 | 
            +
                bob.archive!
         | 
| 70 74 | 
             
                assert_equal 3, Archival.bobs.count
         | 
| 71 75 | 
             
                assert_equal 3, Archival.unarchived.count
         | 
| 72 76 | 
             
                assert_equal 2, Archival.bobs.unarchived.count
         | 
| @@ -80,9 +84,10 @@ class ScopeTest < ActiveSupport::TestCase | |
| 80 84 | 
             
                parent.archivals.create!
         | 
| 81 85 | 
             
                parent.archivals.create!
         | 
| 82 86 | 
             
                child = parent.archivals.create!
         | 
| 83 | 
            -
                child.archive
         | 
| 87 | 
            +
                child.archive!
         | 
| 84 88 | 
             
                assert_equal 3, parent.archivals.count
         | 
| 85 89 | 
             
                assert_equal 1, parent.archivals.archived.count
         | 
| 86 90 | 
             
                assert_equal 2, parent.archivals.unarchived.count
         | 
| 87 91 | 
             
              end
         | 
| 92 | 
            +
             | 
| 88 93 | 
             
            end
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../lib")
         | 
| 2 2 | 
             
            require "bundler/setup"
         | 
| 3 3 | 
             
            require "minitest/autorun"
         | 
| 4 | 
            +
            require "minitest/pride"
         | 
| 4 5 |  | 
| 5 6 | 
             
            require "active_record"
         | 
| 6 7 | 
             
            require "assertions"
         | 
| @@ -13,8 +14,7 @@ if ActiveSupport::TestCase.respond_to?(:test_order=) | |
| 13 14 | 
             
            end
         | 
| 14 15 |  | 
| 15 16 | 
             
            def prepare_for_tests
         | 
| 16 | 
            -
              setup_logging | 
| 17 | 
            -
              setup_active_record
         | 
| 17 | 
            +
              setup_logging
         | 
| 18 18 | 
             
              setup_database_cleaner
         | 
| 19 19 | 
             
              create_test_tables
         | 
| 20 20 | 
             
              require_test_classes
         | 
| @@ -26,11 +26,6 @@ def setup_logging | |
| 26 26 | 
             
              ActiveRecord::Base.logger = Logger.new(logfile)
         | 
| 27 27 | 
             
            end
         | 
| 28 28 |  | 
| 29 | 
            -
            def setup_active_record
         | 
| 30 | 
            -
              dbconfig_file = File.dirname(__FILE__) + "/database.yml"
         | 
| 31 | 
            -
              $dbconfig = YAML.load(File.read(dbconfig_file))
         | 
| 32 | 
            -
            end
         | 
| 33 | 
            -
             | 
| 34 29 | 
             
            def setup_database_cleaner
         | 
| 35 30 | 
             
              DatabaseCleaner.strategy = :truncation
         | 
| 36 31 | 
             
              ActiveSupport::TestCase.send(:setup) do
         | 
| @@ -38,48 +33,60 @@ def setup_database_cleaner | |
| 38 33 | 
             
              end
         | 
| 39 34 | 
             
            end
         | 
| 40 35 |  | 
| 36 | 
            +
            def sqlite_config
         | 
| 37 | 
            +
              {
         | 
| 38 | 
            +
                adapter: "sqlite3",
         | 
| 39 | 
            +
                database: "aaa_test.sqlite3",
         | 
| 40 | 
            +
                pool: 5,
         | 
| 41 | 
            +
                timeout: 5000
         | 
| 42 | 
            +
              }
         | 
| 43 | 
            +
            end
         | 
| 44 | 
            +
             | 
| 41 45 | 
             
            def create_test_tables
         | 
| 42 46 | 
             
              schema_file = File.dirname(__FILE__) + "/schema.rb"
         | 
| 43 | 
            -
               | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
                load(schema_file) if File.exist?(schema_file)
         | 
| 47 | 
            -
              end
         | 
| 47 | 
            +
              puts "** Loading schema for SQLite"
         | 
| 48 | 
            +
              ActiveRecord::Base.establish_connection(sqlite_config)
         | 
| 49 | 
            +
              load(schema_file) if File.exist?(schema_file)
         | 
| 48 50 | 
             
            end
         | 
| 49 51 |  | 
| 52 | 
            +
            BASE_FIXTURE_CLASSES = [
         | 
| 53 | 
            +
              :another_polys_holder,
         | 
| 54 | 
            +
              :archival,
         | 
| 55 | 
            +
              :archival_kid,
         | 
| 56 | 
            +
              :archival_grandkid,
         | 
| 57 | 
            +
              :archival_table_name,
         | 
| 58 | 
            +
              :exploder,
         | 
| 59 | 
            +
              :independent_archival,
         | 
| 60 | 
            +
              :missing_archived_at,
         | 
| 61 | 
            +
              :missing_archive_number,
         | 
| 62 | 
            +
              :plain,
         | 
| 63 | 
            +
              :poly,
         | 
| 64 | 
            +
              :readonly_when_archived
         | 
| 65 | 
            +
            ].freeze
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            RAILS_4_FIXTURE_CLASSES = [
         | 
| 68 | 
            +
              :callback_archival_4
         | 
| 69 | 
            +
            ].freeze
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            RAILS_5_FIXTURE_CLASSES = [
         | 
| 72 | 
            +
              :application_record,
         | 
| 73 | 
            +
              :application_record_row,
         | 
| 74 | 
            +
              :callback_archival_5
         | 
| 75 | 
            +
            ].freeze
         | 
| 76 | 
            +
             | 
| 50 77 | 
             
            def require_test_classes
         | 
| 51 78 | 
             
              ActiveSupport::Inflector.inflections do |inflect|
         | 
| 52 79 | 
             
                inflect.irregular "poly", "polys"
         | 
| 53 80 | 
             
              end
         | 
| 54 81 |  | 
| 55 | 
            -
              fixtures =  | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
                fixtures += [:callback_archival_4]
         | 
| 61 | 
            -
              end
         | 
| 82 | 
            +
              fixtures = if ActiveRecord::VERSION::MAJOR >= 4
         | 
| 83 | 
            +
                           RAILS_5_FIXTURE_CLASSES
         | 
| 84 | 
            +
                         else
         | 
| 85 | 
            +
                           RAILS_4_FIXTURE_CLASSES
         | 
| 86 | 
            +
                         end
         | 
| 62 87 |  | 
| 63 | 
            -
              fixtures +=  | 
| 64 | 
            -
             | 
| 65 | 
            -
                :archival_kid,
         | 
| 66 | 
            -
                :archival_grandkid,
         | 
| 67 | 
            -
                :archival_table_name,
         | 
| 68 | 
            -
                :exploder,
         | 
| 69 | 
            -
                :independent_archival,
         | 
| 70 | 
            -
                :missing_archived_at,
         | 
| 71 | 
            -
                :missing_archive_number,
         | 
| 72 | 
            -
                :mysql_archival,
         | 
| 73 | 
            -
                :mysql_exploder,
         | 
| 74 | 
            -
                :plain,
         | 
| 75 | 
            -
                :poly,
         | 
| 76 | 
            -
                :pg_archival,
         | 
| 77 | 
            -
                :pg_exploder,
         | 
| 78 | 
            -
                :readonly_when_archived
         | 
| 79 | 
            -
              ]
         | 
| 80 | 
            -
              $require_mass_protection = ActiveModel.constants.include?(:MassAssignmentSecurity)
         | 
| 81 | 
            -
              fixtures << :mass_attribute_protected if $require_mass_protection
         | 
| 82 | 
            -
              fixtures.each {|test_class_file| require_relative "fixtures/#{test_class_file}"}
         | 
| 88 | 
            +
              fixtures += BASE_FIXTURE_CLASSES
         | 
| 89 | 
            +
              fixtures.each { |test_class_file| require_relative "fixtures/#{test_class_file}" }
         | 
| 83 90 | 
             
            end
         | 
| 84 91 |  | 
| 85 92 | 
             
            prepare_for_tests
         | 
| @@ -1,18 +1,19 @@ | |
| 1 1 | 
             
            require_relative "test_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            class ThroughAssociationTest < ActiveSupport::TestCase
         | 
| 4 | 
            +
             | 
| 4 5 | 
             
              test "archive a through associated object whose 'bridge' is archival" do
         | 
| 5 6 | 
             
                archival = Archival.create!
         | 
| 6 7 | 
             
                bridge   = archival.archival_kids.create!
         | 
| 7 8 | 
             
                through  = bridge.archival_grandkids.create!
         | 
| 8 | 
            -
                archival.archive
         | 
| 9 | 
            +
                archival.archive!
         | 
| 9 10 |  | 
| 10 11 | 
             
                assert archival.reload.archived?
         | 
| 11 12 | 
             
                assert bridge.reload.archived?
         | 
| 12 13 | 
             
                assert through.reload.archived?
         | 
| 13 14 | 
             
              end
         | 
| 14 15 |  | 
| 15 | 
            -
              # TODO Make something like this pass
         | 
| 16 | 
            +
              # TODO: Make something like this pass
         | 
| 16 17 | 
             
              # test "archive a through associated object whose 'bridge' is not archival" do
         | 
| 17 18 | 
             
              #   archival = Archival.create!
         | 
| 18 19 | 
             
              #   bridge   = archival.independent_archival_kids.create!
         | 
| @@ -22,4 +23,5 @@ class ThroughAssociationTest < ActiveSupport::TestCase | |
| 22 23 | 
             
              #   assert archival.reload.archived?
         | 
| 23 24 | 
             
              #   assert through.reload.archived?
         | 
| 24 25 | 
             
              # end
         | 
| 26 | 
            +
             | 
| 25 27 | 
             
            end
         | 
    
        data/test/transaction_test.rb
    CHANGED
    
    | @@ -3,80 +3,29 @@ require "rr" | |
| 3 3 |  | 
| 4 4 | 
             
            class TransactionTest < ActiveSupport::TestCase
         | 
| 5 5 |  | 
| 6 | 
            -
              test " | 
| 6 | 
            +
              test "archiving is transactional" do
         | 
| 7 7 | 
             
                archival = Archival.create!
         | 
| 8 8 | 
             
                exploder = archival.exploders.create!
         | 
| 9 9 | 
             
                any_instance_of(Exploder) do |canary|
         | 
| 10 | 
            -
                  stub(canary).archive { raise "Rollback Imminent" }
         | 
| 10 | 
            +
                  stub(canary).archive! { raise "Rollback Imminent" }
         | 
| 11 11 | 
             
                end
         | 
| 12 | 
            -
                archival.archive
         | 
| 12 | 
            +
                archival.archive!
         | 
| 13 13 |  | 
| 14 14 | 
             
                assert_not archival.archived?, "If this failed, you might be trying to test on a system that doesn't support nested transactions"
         | 
| 15 15 | 
             
                assert_not exploder.reload.archived?
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 | 
            -
              test " | 
| 18 | 
            +
              test "unarchiving is transactional" do
         | 
| 19 19 | 
             
                archival = Archival.create!
         | 
| 20 20 | 
             
                exploder = archival.exploders.create!
         | 
| 21 21 | 
             
                any_instance_of(Exploder) do |canary|
         | 
| 22 | 
            -
                  stub(canary).unarchive { raise "Rollback Imminent" }
         | 
| 22 | 
            +
                  stub(canary).unarchive! { raise "Rollback Imminent" }
         | 
| 23 23 | 
             
                end
         | 
| 24 | 
            -
                archival.archive
         | 
| 25 | 
            -
                archival.unarchive
         | 
| 24 | 
            +
                archival.archive!
         | 
| 25 | 
            +
                archival.unarchive!
         | 
| 26 26 |  | 
| 27 27 | 
             
                assert archival.reload.archived?
         | 
| 28 28 | 
             
                assert exploder.reload.archived?
         | 
| 29 29 | 
             
              end
         | 
| 30 30 |  | 
| 31 | 
            -
              test "mysql archiving is transactional" do
         | 
| 32 | 
            -
                archival = MysqlArchival.create!
         | 
| 33 | 
            -
                exploder = archival.exploders.create!
         | 
| 34 | 
            -
                any_instance_of(MysqlExploder) do |canary|
         | 
| 35 | 
            -
                  stub(canary).unarchive { raise "Rollback Imminent" }
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
                archival.archive
         | 
| 38 | 
            -
                archival.unarchive
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                assert archival.reload.archived?
         | 
| 41 | 
            -
                assert exploder.reload.archived?
         | 
| 42 | 
            -
              end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
              test "mysql unarchiving is transactional" do
         | 
| 45 | 
            -
                archival = MysqlArchival.create!
         | 
| 46 | 
            -
                exploder = archival.exploders.create!
         | 
| 47 | 
            -
                any_instance_of(MysqlExploder) do |canary|
         | 
| 48 | 
            -
                  stub(canary).unarchive { raise "Rollback Imminent" }
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
                archival.archive
         | 
| 51 | 
            -
                archival.unarchive
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                assert archival.reload.archived?
         | 
| 54 | 
            -
                assert exploder.reload.archived?
         | 
| 55 | 
            -
              end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
              test "postgres archiving is transactional" do
         | 
| 58 | 
            -
                archival = MysqlArchival.create!
         | 
| 59 | 
            -
                exploder = archival.exploders.create!
         | 
| 60 | 
            -
                any_instance_of(MysqlExploder) do |canary|
         | 
| 61 | 
            -
                  stub(canary).unarchive { raise "Rollback Imminent" }
         | 
| 62 | 
            -
                end
         | 
| 63 | 
            -
                archival.archive
         | 
| 64 | 
            -
                archival.unarchive
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                assert archival.reload.archived?
         | 
| 67 | 
            -
                assert exploder.reload.archived?
         | 
| 68 | 
            -
              end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
              test "postgres unarchiving is transactional" do
         | 
| 71 | 
            -
                archival = MysqlArchival.create!
         | 
| 72 | 
            -
                exploder = archival.exploders.create!
         | 
| 73 | 
            -
                any_instance_of(MysqlExploder) do |canary|
         | 
| 74 | 
            -
                  stub(canary).unarchive { raise "Rollback Imminent" }
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
                archival.archive
         | 
| 77 | 
            -
                archival.unarchive
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                assert archival.reload.archived?
         | 
| 80 | 
            -
                assert exploder.reload.archived?
         | 
| 81 | 
            -
              end
         | 
| 82 31 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: acts_as_archival
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Joel Meador
         | 
| @@ -13,10 +13,15 @@ authors: | |
| 13 13 | 
             
            - Miles Sterrett
         | 
| 14 14 | 
             
            - James Hill
         | 
| 15 15 | 
             
            - Maarten Claes
         | 
| 16 | 
            -
             | 
| 16 | 
            +
            - Anthony Panozzo
         | 
| 17 | 
            +
            - Aaron Milam
         | 
| 18 | 
            +
            - Anton Rieder
         | 
| 19 | 
            +
            - Josh Menden
         | 
| 20 | 
            +
            - Sergey Gnuskov
         | 
| 21 | 
            +
            autorequire:
         | 
| 17 22 | 
             
            bindir: bin
         | 
| 18 23 | 
             
            cert_chain: []
         | 
| 19 | 
            -
            date:  | 
| 24 | 
            +
            date: 2021-10-19 00:00:00.000000000 Z
         | 
| 20 25 | 
             
            dependencies:
         | 
| 21 26 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 22 27 | 
             
              name: activerecord
         | 
| @@ -24,14 +29,14 @@ dependencies: | |
| 24 29 | 
             
                requirements:
         | 
| 25 30 | 
             
                - - ">="
         | 
| 26 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 27 | 
            -
                    version: '0'
         | 
| 32 | 
            +
                    version: '5.0'
         | 
| 28 33 | 
             
              type: :runtime
         | 
| 29 34 | 
             
              prerelease: false
         | 
| 30 35 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 31 36 | 
             
                requirements:
         | 
| 32 37 | 
             
                - - ">="
         | 
| 33 38 | 
             
                  - !ruby/object:Gem::Version
         | 
| 34 | 
            -
                    version: '0'
         | 
| 39 | 
            +
                    version: '5.0'
         | 
| 35 40 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 36 41 | 
             
              name: appraisal
         | 
| 37 42 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -75,21 +80,7 @@ dependencies: | |
| 75 80 | 
             
                  - !ruby/object:Gem::Version
         | 
| 76 81 | 
             
                    version: '0'
         | 
| 77 82 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 78 | 
            -
              name:  | 
| 79 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 80 | 
            -
                requirements:
         | 
| 81 | 
            -
                - - ">="
         | 
| 82 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 83 | 
            -
                    version: '0'
         | 
| 84 | 
            -
              type: :development
         | 
| 85 | 
            -
              prerelease: false
         | 
| 86 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 87 | 
            -
                requirements:
         | 
| 88 | 
            -
                - - ">="
         | 
| 89 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 90 | 
            -
                    version: '0'
         | 
| 91 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 92 | 
            -
              name: pg
         | 
| 83 | 
            +
              name: rake
         | 
| 93 84 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 94 85 | 
             
                requirements:
         | 
| 95 86 | 
             
                - - ">="
         | 
| @@ -103,7 +94,7 @@ dependencies: | |
| 103 94 | 
             
                  - !ruby/object:Gem::Version
         | 
| 104 95 | 
             
                    version: '0'
         | 
| 105 96 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 106 | 
            -
              name:  | 
| 97 | 
            +
              name: rr
         | 
| 107 98 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 108 99 | 
             
                requirements:
         | 
| 109 100 | 
             
                - - ">="
         | 
| @@ -117,19 +108,19 @@ dependencies: | |
| 117 108 | 
             
                  - !ruby/object:Gem::Version
         | 
| 118 109 | 
             
                    version: '0'
         | 
| 119 110 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 120 | 
            -
              name:  | 
| 111 | 
            +
              name: rubocop
         | 
| 121 112 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 122 113 | 
             
                requirements:
         | 
| 123 | 
            -
                - - " | 
| 114 | 
            +
                - - "~>"
         | 
| 124 115 | 
             
                  - !ruby/object:Gem::Version
         | 
| 125 | 
            -
                    version:  | 
| 116 | 
            +
                    version: 0.82.0
         | 
| 126 117 | 
             
              type: :development
         | 
| 127 118 | 
             
              prerelease: false
         | 
| 128 119 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 129 120 | 
             
                requirements:
         | 
| 130 | 
            -
                - - " | 
| 121 | 
            +
                - - "~>"
         | 
| 131 122 | 
             
                  - !ruby/object:Gem::Version
         | 
| 132 | 
            -
                    version:  | 
| 123 | 
            +
                    version: 0.82.0
         | 
| 133 124 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 134 125 | 
             
              name: sqlite3
         | 
| 135 126 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -156,7 +147,7 @@ description: | | |
| 156 147 | 
             
              easily restore or remove an entire set of records without having to worry about
         | 
| 157 148 | 
             
              partial deletion or restoration.
         | 
| 158 149 |  | 
| 159 | 
            -
              Additionally, other plugins generally screw with how destroy/delete work. | 
| 150 | 
            +
              Additionally, other plugins generally screw with how destroy/delete work. We
         | 
| 160 151 | 
             
              don't because we actually want to be able to destroy records.
         | 
| 161 152 | 
             
            email:
         | 
| 162 153 | 
             
            - joel@expectedbehavior.com
         | 
| @@ -168,16 +159,20 @@ extensions: [] | |
| 168 159 | 
             
            extra_rdoc_files: []
         | 
| 169 160 | 
             
            files:
         | 
| 170 161 | 
             
            - ".gitignore"
         | 
| 162 | 
            +
            - ".rubocop.yml"
         | 
| 163 | 
            +
            - ".rubocop_todo.yml"
         | 
| 164 | 
            +
            - ".travis.yml"
         | 
| 171 165 | 
             
            - Appraisals
         | 
| 172 166 | 
             
            - CHANGELOG.md
         | 
| 173 167 | 
             
            - Gemfile
         | 
| 168 | 
            +
            - Gemfile.lock
         | 
| 174 169 | 
             
            - LICENSE
         | 
| 175 170 | 
             
            - README.md
         | 
| 176 171 | 
             
            - Rakefile
         | 
| 177 172 | 
             
            - acts_as_archival.gemspec
         | 
| 178 | 
            -
            - gemfiles/ | 
| 179 | 
            -
            - gemfiles/ | 
| 180 | 
            -
            - gemfiles/ | 
| 173 | 
            +
            - gemfiles/rails_5.2.gemfile
         | 
| 174 | 
            +
            - gemfiles/rails_6.0.gemfile
         | 
| 175 | 
            +
            - gemfiles/rails_6.1.gemfile
         | 
| 181 176 | 
             
            - init.rb
         | 
| 182 177 | 
             
            - lib/acts_as_archival.rb
         | 
| 183 178 | 
             
            - lib/acts_as_archival/version.rb
         | 
| @@ -186,7 +181,6 @@ files: | |
| 186 181 | 
             
            - lib/expected_behavior/association_operation/archive.rb
         | 
| 187 182 | 
             
            - lib/expected_behavior/association_operation/base.rb
         | 
| 188 183 | 
             
            - lib/expected_behavior/association_operation/unarchive.rb
         | 
| 189 | 
            -
            - script/db_setup
         | 
| 190 184 | 
             
            - script/setup
         | 
| 191 185 | 
             
            - test/ambiguous_table_test.rb
         | 
| 192 186 | 
             
            - test/application_record_test.rb
         | 
| @@ -194,8 +188,8 @@ files: | |
| 194 188 | 
             
            - test/basic_test.rb
         | 
| 195 189 | 
             
            - test/callbacks_test.rb
         | 
| 196 190 | 
             
            - test/column_test.rb
         | 
| 197 | 
            -
            - test/database.yml
         | 
| 198 191 | 
             
            - test/deep_nesting_test.rb
         | 
| 192 | 
            +
            - test/fixtures/another_polys_holder.rb
         | 
| 199 193 | 
             
            - test/fixtures/application_record.rb
         | 
| 200 194 | 
             
            - test/fixtures/application_record_row.rb
         | 
| 201 195 | 
             
            - test/fixtures/archival.rb
         | 
| @@ -206,19 +200,14 @@ files: | |
| 206 200 | 
             
            - test/fixtures/callback_archival_5.rb
         | 
| 207 201 | 
             
            - test/fixtures/exploder.rb
         | 
| 208 202 | 
             
            - test/fixtures/independent_archival.rb
         | 
| 209 | 
            -
            - test/fixtures/mass_attribute_protected.rb
         | 
| 210 203 | 
             
            - test/fixtures/missing_archive_number.rb
         | 
| 211 204 | 
             
            - test/fixtures/missing_archived_at.rb
         | 
| 212 | 
            -
            - test/fixtures/mysql_archival.rb
         | 
| 213 | 
            -
            - test/fixtures/mysql_exploder.rb
         | 
| 214 | 
            -
            - test/fixtures/pg_archival.rb
         | 
| 215 | 
            -
            - test/fixtures/pg_exploder.rb
         | 
| 216 205 | 
             
            - test/fixtures/plain.rb
         | 
| 217 206 | 
             
            - test/fixtures/poly.rb
         | 
| 218 207 | 
             
            - test/fixtures/readonly_when_archived.rb
         | 
| 219 | 
            -
            - test/mass_attribute_test.rb
         | 
| 220 208 | 
             
            - test/polymorphic_test.rb
         | 
| 221 209 | 
             
            - test/readonly_when_archived_test.rb
         | 
| 210 | 
            +
            - test/relations_test.rb
         | 
| 222 211 | 
             
            - test/responds_test.rb
         | 
| 223 212 | 
             
            - test/schema.rb
         | 
| 224 213 | 
             
            - test/scope_test.rb
         | 
| @@ -228,7 +217,7 @@ files: | |
| 228 217 | 
             
            homepage: http://github.com/expectedbehavior/acts_as_archival
         | 
| 229 218 | 
             
            licenses: []
         | 
| 230 219 | 
             
            metadata: {}
         | 
| 231 | 
            -
            post_install_message: | 
| 220 | 
            +
            post_install_message:
         | 
| 232 221 | 
             
            rdoc_options: []
         | 
| 233 222 | 
             
            require_paths:
         | 
| 234 223 | 
             
            - lib
         | 
| @@ -236,16 +225,15 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 236 225 | 
             
              requirements:
         | 
| 237 226 | 
             
              - - ">="
         | 
| 238 227 | 
             
                - !ruby/object:Gem::Version
         | 
| 239 | 
            -
                  version: ' | 
| 228 | 
            +
                  version: '2.4'
         | 
| 240 229 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 241 230 | 
             
              requirements:
         | 
| 242 231 | 
             
              - - ">="
         | 
| 243 232 | 
             
                - !ruby/object:Gem::Version
         | 
| 244 233 | 
             
                  version: '0'
         | 
| 245 234 | 
             
            requirements: []
         | 
| 246 | 
            -
             | 
| 247 | 
            -
             | 
| 248 | 
            -
            signing_key: 
         | 
| 235 | 
            +
            rubygems_version: 3.1.2
         | 
| 236 | 
            +
            signing_key:
         | 
| 249 237 | 
             
            specification_version: 4
         | 
| 250 238 | 
             
            summary: Atomic archiving/unarchiving for ActiveRecord-based apps
         | 
| 251 239 | 
             
            test_files:
         | 
| @@ -255,8 +243,8 @@ test_files: | |
| 255 243 | 
             
            - test/basic_test.rb
         | 
| 256 244 | 
             
            - test/callbacks_test.rb
         | 
| 257 245 | 
             
            - test/column_test.rb
         | 
| 258 | 
            -
            - test/database.yml
         | 
| 259 246 | 
             
            - test/deep_nesting_test.rb
         | 
| 247 | 
            +
            - test/fixtures/another_polys_holder.rb
         | 
| 260 248 | 
             
            - test/fixtures/application_record.rb
         | 
| 261 249 | 
             
            - test/fixtures/application_record_row.rb
         | 
| 262 250 | 
             
            - test/fixtures/archival.rb
         | 
| @@ -267,19 +255,14 @@ test_files: | |
| 267 255 | 
             
            - test/fixtures/callback_archival_5.rb
         | 
| 268 256 | 
             
            - test/fixtures/exploder.rb
         | 
| 269 257 | 
             
            - test/fixtures/independent_archival.rb
         | 
| 270 | 
            -
            - test/fixtures/mass_attribute_protected.rb
         | 
| 271 258 | 
             
            - test/fixtures/missing_archive_number.rb
         | 
| 272 259 | 
             
            - test/fixtures/missing_archived_at.rb
         | 
| 273 | 
            -
            - test/fixtures/mysql_archival.rb
         | 
| 274 | 
            -
            - test/fixtures/mysql_exploder.rb
         | 
| 275 | 
            -
            - test/fixtures/pg_archival.rb
         | 
| 276 | 
            -
            - test/fixtures/pg_exploder.rb
         | 
| 277 260 | 
             
            - test/fixtures/plain.rb
         | 
| 278 261 | 
             
            - test/fixtures/poly.rb
         | 
| 279 262 | 
             
            - test/fixtures/readonly_when_archived.rb
         | 
| 280 | 
            -
            - test/mass_attribute_test.rb
         | 
| 281 263 | 
             
            - test/polymorphic_test.rb
         | 
| 282 264 | 
             
            - test/readonly_when_archived_test.rb
         | 
| 265 | 
            +
            - test/relations_test.rb
         | 
| 283 266 | 
             
            - test/responds_test.rb
         | 
| 284 267 | 
             
            - test/schema.rb
         | 
| 285 268 | 
             
            - test/scope_test.rb
         | 
    
        data/gemfiles/rails_4.1.gemfile
    DELETED
    
    
    
        data/script/db_setup
    DELETED
    
    | @@ -1,51 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 | 
            -
            require "bundler/setup"
         | 
| 3 | 
            -
            require "yaml"
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            STDOUT.sync = true
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            DB_CONFIG = YAML.load(File.read(File.join(File.dirname(__FILE__), "..", "test", "database.yml")))
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            def execute_mysql(statement, password = nil)
         | 
| 10 | 
            -
              password_option = if password.to_s.size > 0
         | 
| 11 | 
            -
                "-p'#{password}'"
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
              command = %Q{echo '#{statement}' | mysql -u root #{password_option}}
         | 
| 14 | 
            -
              puts command
         | 
| 15 | 
            -
              system(command)
         | 
| 16 | 
            -
            end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            def execute_postgres(statement)
         | 
| 19 | 
            -
              command = %Q{echo "#{statement}" | psql postgres}
         | 
| 20 | 
            -
              puts command
         | 
| 21 | 
            -
              system(command)
         | 
| 22 | 
            -
            end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            def setup_mysql
         | 
| 25 | 
            -
              mysql_root_password = nil
         | 
| 26 | 
            -
              if !execute_mysql("SHOW DATABASES;", mysql_root_password)
         | 
| 27 | 
            -
                loop do
         | 
| 28 | 
            -
                  print "MySQL root password to setup '#{DB_CONFIG["mysql"]["database"]}': "
         | 
| 29 | 
            -
                  mysql_root_password = gets.chomp
         | 
| 30 | 
            -
                  if execute_mysql("SHOW DATABASES;", mysql_root_password)
         | 
| 31 | 
            -
                    break
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
              config = DB_CONFIG["mysql"]
         | 
| 37 | 
            -
              execute_mysql("DROP DATABASE IF EXISTS #{config["database"]};", mysql_root_password)
         | 
| 38 | 
            -
              execute_mysql("CREATE DATABASE #{config["database"]};", mysql_root_password)
         | 
| 39 | 
            -
              execute_mysql(%Q{GRANT ALL ON `#{config["database"]}`.* TO `#{config["username"]}` IDENTIFIED BY "#{config["password"]}";}, mysql_root_password)
         | 
| 40 | 
            -
            end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
            def setup_postgres
         | 
| 43 | 
            -
              config = DB_CONFIG["pg"]
         | 
| 44 | 
            -
              execute_postgres(%Q{DROP DATABASE IF EXISTS #{config["database"]};})
         | 
| 45 | 
            -
              execute_postgres(%Q{DROP ROLE IF EXISTS #{config["username"]};})
         | 
| 46 | 
            -
              execute_postgres(%Q{CREATE ROLE #{config["username"]} WITH PASSWORD '#{config["password"]}' LOGIN;})
         | 
| 47 | 
            -
              execute_postgres(%Q{CREATE DATABASE #{config["database"]} WITH OWNER #{config["username"]};})
         | 
| 48 | 
            -
            end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            setup_mysql
         | 
| 51 | 
            -
            setup_postgres
         | 
    
        data/test/database.yml
    DELETED
    
    | @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            sqlite:
         | 
| 2 | 
            -
              adapter: sqlite3
         | 
| 3 | 
            -
              database: aaa_test.sqlite3
         | 
| 4 | 
            -
              pool: 5
         | 
| 5 | 
            -
              timeout: 5000
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            mysql:
         | 
| 8 | 
            -
              adapter: mysql2
         | 
| 9 | 
            -
              pool: 5
         | 
| 10 | 
            -
              timeout: 5000
         | 
| 11 | 
            -
              encoding: utf8
         | 
| 12 | 
            -
              reconnect: false
         | 
| 13 | 
            -
              database: aaa_test
         | 
| 14 | 
            -
              username: archival_tester
         | 
| 15 | 
            -
              password: perspicacious
         | 
| 16 | 
            -
              socket: /tmp/mysql.sock
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            pg:
         | 
| 19 | 
            -
              adapter: postgresql
         | 
| 20 | 
            -
              pool: 5
         | 
| 21 | 
            -
              timeout: 5000
         | 
| 22 | 
            -
              encoding: utf8
         | 
| 23 | 
            -
              database: aaa_test
         | 
| 24 | 
            -
              username: archival_tester
         | 
| 25 | 
            -
              password: perspicacious
         | 
| 26 | 
            -
              min_messages: WARNING
         | 
| @@ -1,10 +0,0 @@ | |
| 1 | 
            -
            # name           - string
         | 
| 2 | 
            -
            # archival_id    - integer
         | 
| 3 | 
            -
            # archive_number - string
         | 
| 4 | 
            -
            # archived_at    - datetime
         | 
| 5 | 
            -
            class MysqlArchival < ActiveRecord::Base
         | 
| 6 | 
            -
              establish_connection $dbconfig["mysql"]
         | 
| 7 | 
            -
              self.table_name = "archivals"
         | 
| 8 | 
            -
              acts_as_archival
         | 
| 9 | 
            -
              has_many :exploders, :dependent => :destroy, :foreign_key => :archival_id, :class_name => "MysqlExploder"
         | 
| 10 | 
            -
            end
         |