paper_trail 6.0.2 → 7.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 +4 -4
- data/.github/CONTRIBUTING.md +20 -0
- data/.rubocop.yml +30 -2
- data/.rubocop_todo.yml +20 -0
- data/.travis.yml +3 -5
- data/Appraisals +5 -6
- data/CHANGELOG.md +33 -0
- data/README.md +43 -81
- data/Rakefile +1 -1
- data/doc/bug_report_template.rb +4 -2
- data/gemfiles/ar_4.0.gemfile +7 -0
- data/gemfiles/ar_4.2.gemfile +0 -1
- data/lib/generators/paper_trail/templates/create_version_associations.rb +1 -1
- data/lib/generators/paper_trail/templates/create_versions.rb +1 -1
- data/lib/paper_trail.rb +7 -9
- data/lib/paper_trail/config.rb +0 -15
- data/lib/paper_trail/frameworks/rspec.rb +8 -2
- data/lib/paper_trail/model_config.rb +6 -2
- data/lib/paper_trail/record_trail.rb +3 -1
- data/lib/paper_trail/reifier.rb +43 -354
- data/lib/paper_trail/reifiers/belongs_to.rb +48 -0
- data/lib/paper_trail/reifiers/has_and_belongs_to_many.rb +50 -0
- data/lib/paper_trail/reifiers/has_many.rb +110 -0
- data/lib/paper_trail/reifiers/has_many_through.rb +90 -0
- data/lib/paper_trail/reifiers/has_one.rb +76 -0
- data/lib/paper_trail/serializers/yaml.rb +2 -25
- data/lib/paper_trail/version_concern.rb +5 -5
- data/lib/paper_trail/version_number.rb +7 -3
- data/paper_trail.gemspec +7 -34
- data/spec/controllers/articles_controller_spec.rb +1 -1
- data/spec/generators/install_generator_spec.rb +40 -34
- data/spec/models/animal_spec.rb +50 -25
- data/spec/models/boolit_spec.rb +8 -7
- data/spec/models/callback_modifier_spec.rb +13 -13
- data/spec/models/document_spec.rb +21 -0
- data/spec/models/gadget_spec.rb +35 -39
- data/spec/models/joined_version_spec.rb +4 -4
- data/spec/models/json_version_spec.rb +14 -15
- data/spec/models/not_on_update_spec.rb +1 -1
- data/spec/models/post_with_status_spec.rb +2 -2
- data/spec/models/skipper_spec.rb +4 -4
- data/spec/models/thing_spec.rb +1 -1
- data/spec/models/truck_spec.rb +1 -1
- data/spec/models/vehicle_spec.rb +1 -1
- data/spec/models/version_spec.rb +152 -168
- data/spec/models/widget_spec.rb +170 -196
- data/spec/modules/paper_trail_spec.rb +3 -3
- data/spec/modules/version_concern_spec.rb +5 -8
- data/spec/modules/version_number_spec.rb +11 -36
- data/spec/paper_trail/cleaner_spec.rb +152 -0
- data/spec/paper_trail/config_spec.rb +1 -1
- data/spec/paper_trail/serializers/custom_yaml_serializer_spec.rb +45 -0
- data/spec/paper_trail/serializers/json_spec.rb +57 -0
- data/spec/paper_trail/version_limit_spec.rb +55 -0
- data/spec/paper_trail_spec.rb +45 -32
- data/spec/requests/articles_spec.rb +4 -4
- data/test/dummy/app/models/custom_primary_key_record.rb +4 -2
- data/test/dummy/app/models/document.rb +1 -1
- data/test/dummy/app/models/not_on_update.rb +1 -1
- data/test/dummy/app/models/on/create.rb +6 -0
- data/test/dummy/app/models/on/destroy.rb +6 -0
- data/test/dummy/app/models/on/empty_array.rb +6 -0
- data/test/dummy/app/models/on/update.rb +6 -0
- data/test/dummy/app/models/person.rb +1 -0
- data/test/dummy/app/models/song.rb +19 -28
- data/test/dummy/config/application.rb +10 -43
- data/test/dummy/config/routes.rb +1 -1
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +25 -51
- data/test/dummy/db/schema.rb +29 -19
- data/test/test_helper.rb +0 -16
- data/test/unit/associations_test.rb +81 -81
- data/test/unit/model_test.rb +48 -131
- data/test/unit/serializer_test.rb +34 -45
- data/test/unit/serializers/mixin_json_test.rb +3 -1
- data/test/unit/serializers/yaml_test.rb +1 -5
- metadata +44 -19
- data/lib/paper_trail/frameworks/sinatra.rb +0 -40
- data/test/functional/modular_sinatra_test.rb +0 -46
- data/test/functional/sinatra_test.rb +0 -51
- data/test/unit/cleaner_test.rb +0 -151
- data/test/unit/inheritance_column_test.rb +0 -41
- data/test/unit/serializers/json_test.rb +0 -95
- data/test/unit/serializers/mixin_yaml_test.rb +0 -53
| @@ -6,14 +6,14 @@ describe "Articles management", type: :request, order: :defined do | |
| 6 6 | 
             
              context "versioning disabled" do
         | 
| 7 7 | 
             
                specify { expect(PaperTrail).not_to be_enabled }
         | 
| 8 8 |  | 
| 9 | 
            -
                it " | 
| 9 | 
            +
                it "does not create a version" do
         | 
| 10 10 | 
             
                  expect(PaperTrail).to be_enabled_for_controller
         | 
| 11 11 | 
             
                  expect {
         | 
| 12 12 | 
             
                    post articles_path, params_wrapper(valid_params)
         | 
| 13 | 
            -
                  }. | 
| 13 | 
            +
                  }.not_to change(PaperTrail::Version, :count)
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 | 
            -
                it " | 
| 16 | 
            +
                it "does not leak the state of the `PaperTrail.enabled_for_controller?` into the next test" do
         | 
| 17 17 | 
             
                  expect(PaperTrail).to be_enabled_for_controller
         | 
| 18 18 | 
             
                end
         | 
| 19 19 | 
             
              end
         | 
| @@ -22,7 +22,7 @@ describe "Articles management", type: :request, order: :defined do | |
| 22 22 | 
             
                let(:article) { Article.last }
         | 
| 23 23 |  | 
| 24 24 | 
             
                context "`current_user` method returns a `String`" do
         | 
| 25 | 
            -
                  it " | 
| 25 | 
            +
                  it "sets that value as the `whodunnit`" do
         | 
| 26 26 | 
             
                    expect {
         | 
| 27 27 | 
             
                      post articles_path, params_wrapper(valid_params)
         | 
| 28 28 | 
             
                    }.to change(PaperTrail::Version, :count).by(1)
         | 
| @@ -1,11 +1,13 @@ | |
| 1 1 | 
             
            require "securerandom"
         | 
| 2 | 
            +
             | 
| 2 3 | 
             
            class CustomPrimaryKeyRecord < ActiveRecord::Base
         | 
| 3 4 | 
             
              self.primary_key = :uuid
         | 
| 4 5 |  | 
| 5 6 | 
             
              has_paper_trail class_name: "CustomPrimaryKeyRecordVersion"
         | 
| 6 | 
            -
             | 
| 7 | 
            +
             | 
| 8 | 
            +
              # This default_scope is to test the case of the Version#item association
         | 
| 7 9 | 
             
              # not returning the item due to unmatched default_scope on the model.
         | 
| 8 | 
            -
              default_scope  | 
| 10 | 
            +
              default_scope { where(name: "custom_primary_key_record") }
         | 
| 9 11 |  | 
| 10 12 | 
             
              before_create do
         | 
| 11 13 | 
             
                self.uuid ||= SecureRandom.uuid
         | 
| @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            class Person < ActiveRecord::Base
         | 
| 2 2 | 
             
              has_many :authorships, foreign_key: :author_id, dependent: :destroy
         | 
| 3 3 | 
             
              has_many :books, through: :authorships
         | 
| 4 | 
            +
              belongs_to :mentor, class_name: "Person", foreign_key: :mentor_id
         | 
| 4 5 | 
             
              has_paper_trail
         | 
| 5 6 |  | 
| 6 7 | 
             
              # Convert strings to TimeZone objects when assigned
         | 
| @@ -1,4 +1,21 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            module OverrideSongAttributesTheRails4Way
         | 
| 2 | 
            +
              def attributes
         | 
| 3 | 
            +
                if name
         | 
| 4 | 
            +
                  super.merge(name: name)
         | 
| 5 | 
            +
                else
         | 
| 6 | 
            +
                  super
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def changed_attributes
         | 
| 11 | 
            +
                if name
         | 
| 12 | 
            +
                  super.merge(name: name)
         | 
| 13 | 
            +
                else
         | 
| 14 | 
            +
                  super
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 2 19 | 
             
            class Song < ActiveRecord::Base
         | 
| 3 20 | 
             
              has_paper_trail
         | 
| 4 21 |  | 
| @@ -15,32 +32,6 @@ class Song < ActiveRecord::Base | |
| 15 32 | 
             
                attribute :name, :string
         | 
| 16 33 | 
             
              else
         | 
| 17 34 | 
             
                attr_accessor :name
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                # override attributes hashes like some libraries do
         | 
| 20 | 
            -
                def attributes_with_name
         | 
| 21 | 
            -
                  if name
         | 
| 22 | 
            -
                    attributes_without_name.merge(name: name)
         | 
| 23 | 
            -
                  else
         | 
| 24 | 
            -
                    attributes_without_name
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                # `alias_method_chain` is deprecated in rails 5, but we cannot use the
         | 
| 29 | 
            -
                # suggested replacement, `Module#prepend`, because we still support ruby 1.9.
         | 
| 30 | 
            -
                alias attributes_without_name attributes
         | 
| 31 | 
            -
                alias attributes attributes_with_name
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                def changed_attributes_with_name
         | 
| 34 | 
            -
                  if name
         | 
| 35 | 
            -
                    changed_attributes_without_name.merge(name: name)
         | 
| 36 | 
            -
                  else
         | 
| 37 | 
            -
                    changed_attributes_without_name
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                # `alias_method_chain` is deprecated in rails 5, but we cannot use the
         | 
| 42 | 
            -
                # suggested replacement, `Module#prepend`, because we still support ruby 1.9.
         | 
| 43 | 
            -
                alias changed_attributes_without_name changed_attributes
         | 
| 44 | 
            -
                alias changed_attributes changed_attributes_with_name
         | 
| 35 | 
            +
                prepend OverrideSongAttributesTheRails4Way
         | 
| 45 36 | 
             
              end
         | 
| 46 37 | 
             
            end
         | 
| @@ -4,54 +4,24 @@ require File.expand_path("../boot", __FILE__) | |
| 4 4 | 
             
            require "active_record/railtie"
         | 
| 5 5 | 
             
            require "action_controller/railtie"
         | 
| 6 6 |  | 
| 7 | 
            -
            Bundler.require(:default, Rails.env) | 
| 7 | 
            +
            Bundler.require(:default, Rails.env)
         | 
| 8 8 | 
             
            require "paper_trail"
         | 
| 9 9 |  | 
| 10 10 | 
             
            module Dummy
         | 
| 11 11 | 
             
              class Application < Rails::Application
         | 
| 12 | 
            -
                # Settings in config/environments/* take precedence over those specified here.
         | 
| 13 | 
            -
                # Application configuration should go into files in config/initializers
         | 
| 14 | 
            -
                # -- all .rb files in that directory are automatically loaded.
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                # Custom directories with classes and modules you want to be autoloadable.
         | 
| 17 | 
            -
                # config.autoload_paths += %W(#{config.root}/extras)
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                # Only load the plugins named here, in the order given (default is alphabetical).
         | 
| 20 | 
            -
                # :all can be used as a placeholder for all plugins not explicitly named.
         | 
| 21 | 
            -
                # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                # Activate observers that should always be running.
         | 
| 24 | 
            -
                # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
         | 
| 27 | 
            -
                # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
         | 
| 28 | 
            -
                # config.time_zone = 'Central Time (US & Canada)'
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
         | 
| 31 | 
            -
                # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
         | 
| 32 | 
            -
                # config.i18n.default_locale = :de
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                # Configure the default encoding used in templates for Ruby 1.9.
         | 
| 35 12 | 
             
                config.encoding = "utf-8"
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                # Configure sensitive parameters which will be filtered from the log file.
         | 
| 38 13 | 
             
                config.filter_parameters += [:password]
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                # Enable escaping HTML in JSON.
         | 
| 41 14 | 
             
                config.active_support.escape_html_entities_in_json = true
         | 
| 15 | 
            +
                config.active_support.test_order = :sorted
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                # Disable assets in rails 4.2. In rails 5, config does not respond to
         | 
| 18 | 
            +
                # assets, probably because it was moved out of railties to some other gem,
         | 
| 19 | 
            +
                # and we only have dev. dependencies on railties, not all of rails. When
         | 
| 20 | 
            +
                # we drop support for rails 4.2, we can remove this whole conditional.
         | 
| 21 | 
            +
                if config.respond_to?(:assets)
         | 
| 22 | 
            +
                  config.assets.enabled = false
         | 
| 23 | 
            +
                end
         | 
| 42 24 |  | 
| 43 | 
            -
                # Use SQL instead of Active Record's schema dumper when creating the database.
         | 
| 44 | 
            -
                # This is necessary if your schema can't be completely dumped by the schema dumper,
         | 
| 45 | 
            -
                # like if you have constraints or database-specific column types
         | 
| 46 | 
            -
                # config.active_record.schema_format = :sql
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                # `config.assets` is a `NoMethodError` in rails 5.
         | 
| 49 | 
            -
                config.assets.enabled = false if config.respond_to?(:assets)
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                # Version of your assets, change this if you want to expire all your assets
         | 
| 52 | 
            -
                # config.assets.version = '1.0'
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                # Rails 4 key for generating secret key
         | 
| 55 25 | 
             
                config.secret_key_base = "A fox regularly kicked the screaming pile of biscuits."
         | 
| 56 26 |  | 
| 57 27 | 
             
                # `raise_in_transactional_callbacks` was added in rails 4, then deprecated
         | 
| @@ -65,8 +35,5 @@ module Dummy | |
| 65 35 | 
             
                    config.active_record.time_zone_aware_types = [:datetime]
         | 
| 66 36 | 
             
                  end
         | 
| 67 37 | 
             
                end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                # Set test order for Test::Unit if possible
         | 
| 70 | 
            -
                config.active_support.test_order = :sorted if config.active_support.respond_to?(:test_order=)
         | 
| 71 38 | 
             
              end
         | 
| 72 39 | 
             
            end
         | 
    
        data/test/dummy/config/routes.rb
    CHANGED
    
    
| @@ -9,6 +9,22 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 9 9 | 
             
              TEXT_BYTES = 1_073_741_823
         | 
| 10 10 |  | 
| 11 11 | 
             
              def up
         | 
| 12 | 
            +
                create_table :on_create, force: true do |t|
         | 
| 13 | 
            +
                  t.string :name, null: false
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                create_table :on_destroy, force: true do |t|
         | 
| 17 | 
            +
                  t.string :name, null: false
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                create_table :on_empty_array, force: true do |t|
         | 
| 21 | 
            +
                  t.string :name, null: false
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                create_table :on_update, force: true do |t|
         | 
| 25 | 
            +
                  t.string :name, null: false
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 12 28 | 
             
                # Classes: Vehicle, Car, Truck
         | 
| 13 29 | 
             
                create_table :vehicles, force: true do |t|
         | 
| 14 30 | 
             
                  t.string :name, null: false
         | 
| @@ -57,7 +73,7 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 57 73 | 
             
                  t.string :ip
         | 
| 58 74 | 
             
                  t.string :user_agent
         | 
| 59 75 | 
             
                end
         | 
| 60 | 
            -
                add_index :versions,  | 
| 76 | 
            +
                add_index :versions, %i(item_type item_id)
         | 
| 61 77 |  | 
| 62 78 | 
             
                create_table :version_associations do |t|
         | 
| 63 79 | 
             
                  t.integer  :version_id
         | 
| @@ -66,7 +82,7 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 66 82 | 
             
                end
         | 
| 67 83 | 
             
                add_index :version_associations, [:version_id]
         | 
| 68 84 | 
             
                add_index :version_associations,
         | 
| 69 | 
            -
                   | 
| 85 | 
            +
                  %i(foreign_key_name foreign_key_id),
         | 
| 70 86 | 
             
                  name: "index_version_associations_on_foreign_key"
         | 
| 71 87 |  | 
| 72 88 | 
             
                create_table :post_versions, force: true do |t|
         | 
| @@ -81,7 +97,7 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 81 97 | 
             
                  t.string :ip
         | 
| 82 98 | 
             
                  t.string :user_agent
         | 
| 83 99 | 
             
                end
         | 
| 84 | 
            -
                add_index :post_versions,  | 
| 100 | 
            +
                add_index :post_versions, %i(item_type item_id)
         | 
| 85 101 |  | 
| 86 102 | 
             
                if ENV["DB"] == "postgres" && ::ActiveRecord::VERSION::MAJOR >= 4
         | 
| 87 103 | 
             
                  create_table :json_versions, force: true do |t|
         | 
| @@ -93,7 +109,7 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 93 109 | 
             
                    t.json     :object_changes
         | 
| 94 110 | 
             
                    t.datetime :created_at
         | 
| 95 111 | 
             
                  end
         | 
| 96 | 
            -
                  add_index :json_versions,  | 
| 112 | 
            +
                  add_index :json_versions, %i(item_type item_id)
         | 
| 97 113 | 
             
                end
         | 
| 98 114 |  | 
| 99 115 | 
             
                create_table :not_on_updates, force: true do |t|
         | 
| @@ -112,7 +128,7 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 112 128 | 
             
                  t.text     :object
         | 
| 113 129 | 
             
                  t.datetime :created_at
         | 
| 114 130 | 
             
                end
         | 
| 115 | 
            -
                add_index :banana_versions,  | 
| 131 | 
            +
                add_index :banana_versions, %i(item_type item_id)
         | 
| 116 132 |  | 
| 117 133 | 
             
                create_table :wotsits, force: true do |t|
         | 
| 118 134 | 
             
                  t.integer :widget_id
         | 
| @@ -150,6 +166,7 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 150 166 | 
             
                create_table :people, force: true do |t|
         | 
| 151 167 | 
             
                  t.string :name
         | 
| 152 168 | 
             
                  t.string :time_zone
         | 
| 169 | 
            +
                  t.integer :mentor_id
         | 
| 153 170 | 
             
                end
         | 
| 154 171 |  | 
| 155 172 | 
             
                create_table :editorships, force: true do |t|
         | 
| @@ -288,55 +305,12 @@ class SetUpTestTables < ActiveRecord::Migration | |
| 288 305 | 
             
                  t.text     :object
         | 
| 289 306 | 
             
                  t.datetime :created_at
         | 
| 290 307 | 
             
                end
         | 
| 291 | 
            -
                add_index :custom_primary_key_record_versions,  | 
| 308 | 
            +
                add_index :custom_primary_key_record_versions, %i(item_type item_id), name: "idx_cust_pk_item"
         | 
| 292 309 | 
             
              end
         | 
| 293 310 |  | 
| 294 311 | 
             
              def down
         | 
| 295 | 
            -
                 | 
| 296 | 
            -
                 | 
| 297 | 
            -
                drop_table :bar_habtms
         | 
| 298 | 
            -
                drop_table :citations
         | 
| 299 | 
            -
                drop_table :quotations
         | 
| 300 | 
            -
                drop_table :animals
         | 
| 301 | 
            -
                drop_table :skippers
         | 
| 302 | 
            -
                drop_table :not_on_updates
         | 
| 303 | 
            -
                drop_table :posts
         | 
| 304 | 
            -
                drop_table :songs
         | 
| 305 | 
            -
                drop_table :editors
         | 
| 306 | 
            -
                drop_table :editorships
         | 
| 307 | 
            -
                drop_table :people
         | 
| 308 | 
            -
                drop_table :authorships
         | 
| 309 | 
            -
                drop_table :books
         | 
| 310 | 
            -
                drop_table :articles
         | 
| 311 | 
            -
                drop_table :whatchamajiggers
         | 
| 312 | 
            -
                drop_table :fluxors
         | 
| 313 | 
            -
                drop_table :wotsits
         | 
| 314 | 
            -
                remove_index :post_versions, column: [:item_type, :item_id]
         | 
| 315 | 
            -
                drop_table :post_versions
         | 
| 316 | 
            -
                remove_index :versions, column: [:item_type, :item_id]
         | 
| 317 | 
            -
                drop_table :versions
         | 
| 318 | 
            -
                if JsonVersion.table_exists?
         | 
| 319 | 
            -
                  remove_index :json_versions, column: [:item_type, :item_id]
         | 
| 320 | 
            -
                  drop_table :json_versions
         | 
| 321 | 
            -
                end
         | 
| 322 | 
            -
                drop_table :widgets
         | 
| 323 | 
            -
                drop_table :documents
         | 
| 324 | 
            -
                drop_table :legacy_widgets
         | 
| 325 | 
            -
                drop_table :things
         | 
| 326 | 
            -
                drop_table :translations
         | 
| 327 | 
            -
                drop_table :gadgets
         | 
| 328 | 
            -
                drop_table :customers
         | 
| 329 | 
            -
                drop_table :orders
         | 
| 330 | 
            -
                drop_table :line_items
         | 
| 331 | 
            -
                drop_table :fruits
         | 
| 332 | 
            -
                drop_table :boolits
         | 
| 333 | 
            -
                drop_table :chapters
         | 
| 334 | 
            -
                drop_table :sections
         | 
| 335 | 
            -
                drop_table :paragraphs
         | 
| 336 | 
            -
                remove_index :version_associations, column: [:version_id]
         | 
| 337 | 
            -
                remove_index :version_associations, name: "index_version_associations_on_foreign_key"
         | 
| 338 | 
            -
                drop_table :version_associations
         | 
| 339 | 
            -
                drop_table :callback_modifiers
         | 
| 312 | 
            +
                # Not actually irreversible, but there is no need to maintain this method.
         | 
| 313 | 
            +
                raise ActiveRecord::IrreversibleMigration
         | 
| 340 314 | 
             
              end
         | 
| 341 315 |  | 
| 342 316 | 
             
              private
         | 
    
        data/test/dummy/db/schema.rb
    CHANGED
    
    | @@ -1,4 +1,3 @@ | |
| 1 | 
            -
            # encoding: UTF-8
         | 
| 2 1 | 
             
            # This file is auto-generated from the current state of the database. Instead
         | 
| 3 2 | 
             
            # of editing this file, please use the migrations feature of Active Record to
         | 
| 4 3 | 
             
            # incrementally modify your database, and then regenerate this schema definition.
         | 
| @@ -37,10 +36,9 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 37 36 | 
             
                t.string   "whodunnit"
         | 
| 38 37 | 
             
                t.text     "object"
         | 
| 39 38 | 
             
                t.datetime "created_at"
         | 
| 39 | 
            +
                t.index ["item_type", "item_id"], name: "index_banana_versions_on_item_type_and_item_id"
         | 
| 40 40 | 
             
              end
         | 
| 41 41 |  | 
| 42 | 
            -
              add_index "banana_versions", ["item_type", "item_id"], name: "index_banana_versions_on_item_type_and_item_id"
         | 
| 43 | 
            -
             | 
| 44 42 | 
             
              create_table "bananas", force: :cascade do |t|
         | 
| 45 43 | 
             
                t.datetime "created_at"
         | 
| 46 44 | 
             
                t.datetime "updated_at"
         | 
| @@ -53,11 +51,10 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 53 51 | 
             
              create_table "bar_habtms_foo_habtms", id: false, force: :cascade do |t|
         | 
| 54 52 | 
             
                t.integer "foo_habtm_id"
         | 
| 55 53 | 
             
                t.integer "bar_habtm_id"
         | 
| 54 | 
            +
                t.index ["bar_habtm_id"], name: "index_bar_habtms_foo_habtms_on_bar_habtm_id"
         | 
| 55 | 
            +
                t.index ["foo_habtm_id"], name: "index_bar_habtms_foo_habtms_on_foo_habtm_id"
         | 
| 56 56 | 
             
              end
         | 
| 57 57 |  | 
| 58 | 
            -
              add_index "bar_habtms_foo_habtms", ["bar_habtm_id"], name: "index_bar_habtms_foo_habtms_on_bar_habtm_id"
         | 
| 59 | 
            -
              add_index "bar_habtms_foo_habtms", ["foo_habtm_id"], name: "index_bar_habtms_foo_habtms_on_foo_habtm_id"
         | 
| 60 | 
            -
             | 
| 61 58 | 
             
              create_table "books", force: :cascade do |t|
         | 
| 62 59 | 
             
                t.string "title"
         | 
| 63 60 | 
             
              end
         | 
| @@ -87,15 +84,14 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 87 84 | 
             
                t.string   "whodunnit"
         | 
| 88 85 | 
             
                t.text     "object"
         | 
| 89 86 | 
             
                t.datetime "created_at"
         | 
| 87 | 
            +
                t.index ["item_type", "item_id"], name: "idx_cust_pk_item"
         | 
| 90 88 | 
             
              end
         | 
| 91 89 |  | 
| 92 | 
            -
               | 
| 93 | 
            -
             | 
| 94 | 
            -
              create_table "custom_primary_key_records", id: false, force: :cascade do |t|
         | 
| 95 | 
            -
                t.string   "uuid"
         | 
| 90 | 
            +
              create_table "custom_primary_key_records", primary_key: "uuid", id: :string, force: :cascade do |t|
         | 
| 96 91 | 
             
                t.string   "name"
         | 
| 97 92 | 
             
                t.datetime "created_at"
         | 
| 98 93 | 
             
                t.datetime "updated_at"
         | 
| 94 | 
            +
                t.index ["uuid"], unique: true
         | 
| 99 95 | 
             
              end
         | 
| 100 96 |  | 
| 101 97 | 
             
              create_table "customers", force: :cascade do |t|
         | 
| @@ -151,6 +147,22 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 151 147 | 
             
                t.datetime "updated_at"
         | 
| 152 148 | 
             
              end
         | 
| 153 149 |  | 
| 150 | 
            +
              create_table "on_create", force: :cascade do |t|
         | 
| 151 | 
            +
                t.string "name", null: false
         | 
| 152 | 
            +
              end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
              create_table "on_destroy", force: :cascade do |t|
         | 
| 155 | 
            +
                t.string "name", null: false
         | 
| 156 | 
            +
              end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
              create_table "on_empty_array", force: :cascade do |t|
         | 
| 159 | 
            +
                t.string "name", null: false
         | 
| 160 | 
            +
              end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
              create_table "on_update", force: :cascade do |t|
         | 
| 163 | 
            +
                t.string "name", null: false
         | 
| 164 | 
            +
              end
         | 
| 165 | 
            +
             | 
| 154 166 | 
             
              create_table "orders", force: :cascade do |t|
         | 
| 155 167 | 
             
                t.integer "customer_id"
         | 
| 156 168 | 
             
                t.string  "order_date"
         | 
| @@ -162,8 +174,9 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 162 174 | 
             
              end
         | 
| 163 175 |  | 
| 164 176 | 
             
              create_table "people", force: :cascade do |t|
         | 
| 165 | 
            -
                t.string | 
| 166 | 
            -
                t.string | 
| 177 | 
            +
                t.string  "name"
         | 
| 178 | 
            +
                t.string  "time_zone"
         | 
| 179 | 
            +
                t.integer "mentor_id"
         | 
| 167 180 | 
             
              end
         | 
| 168 181 |  | 
| 169 182 | 
             
              create_table "post_versions", force: :cascade do |t|
         | 
| @@ -175,10 +188,9 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 175 188 | 
             
                t.datetime "created_at"
         | 
| 176 189 | 
             
                t.string   "ip"
         | 
| 177 190 | 
             
                t.string   "user_agent"
         | 
| 191 | 
            +
                t.index ["item_type", "item_id"], name: "index_post_versions_on_item_type_and_item_id"
         | 
| 178 192 | 
             
              end
         | 
| 179 193 |  | 
| 180 | 
            -
              add_index "post_versions", ["item_type", "item_id"], name: "index_post_versions_on_item_type_and_item_id"
         | 
| 181 | 
            -
             | 
| 182 194 | 
             
              create_table "post_with_statuses", force: :cascade do |t|
         | 
| 183 195 | 
             
                t.integer  "status"
         | 
| 184 196 | 
             
                t.datetime "created_at", null: false
         | 
| @@ -232,11 +244,10 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 232 244 | 
             
                t.integer "version_id"
         | 
| 233 245 | 
             
                t.string  "foreign_key_name", null: false
         | 
| 234 246 | 
             
                t.integer "foreign_key_id"
         | 
| 247 | 
            +
                t.index ["foreign_key_name", "foreign_key_id"], name: "index_version_associations_on_foreign_key"
         | 
| 248 | 
            +
                t.index ["version_id"], name: "index_version_associations_on_version_id"
         | 
| 235 249 | 
             
              end
         | 
| 236 250 |  | 
| 237 | 
            -
              add_index "version_associations", ["foreign_key_name", "foreign_key_id"], name: "index_version_associations_on_foreign_key"
         | 
| 238 | 
            -
              add_index "version_associations", ["version_id"], name: "index_version_associations_on_version_id"
         | 
| 239 | 
            -
             | 
| 240 251 | 
             
              create_table "versions", force: :cascade do |t|
         | 
| 241 252 | 
             
                t.string   "item_type",                         null: false
         | 
| 242 253 | 
             
                t.integer  "item_id",                           null: false
         | 
| @@ -253,10 +264,9 @@ ActiveRecord::Schema.define(version: 20110208155312) do | |
| 253 264 | 
             
                t.string   "title"
         | 
| 254 265 | 
             
                t.string   "ip"
         | 
| 255 266 | 
             
                t.string   "user_agent"
         | 
| 267 | 
            +
                t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
         | 
| 256 268 | 
             
              end
         | 
| 257 269 |  | 
| 258 | 
            -
              add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
         | 
| 259 | 
            -
             | 
| 260 270 | 
             
              create_table "whatchamajiggers", force: :cascade do |t|
         | 
| 261 271 | 
             
                t.string  "owner_type"
         | 
| 262 272 | 
             
                t.integer "owner_id"
         |