paper_trail-association_tracking 2.1.1 → 2.2.1
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/CHANGELOG.md +18 -2
 - data/README.md +9 -4
 - data/Rakefile +1 -4
 - data/lib/paper_trail-association_tracking.rb +8 -16
 - data/lib/paper_trail_association_tracking/frameworks/active_record.rb +0 -2
 - data/lib/paper_trail_association_tracking/frameworks/rails/railtie.rb +17 -0
 - data/lib/paper_trail_association_tracking/frameworks/rails.rb +1 -1
 - data/lib/paper_trail_association_tracking/model_config.rb +28 -9
 - data/lib/paper_trail_association_tracking/reifiers/has_many.rb +7 -1
 - data/lib/paper_trail_association_tracking/reifiers/has_one.rb +1 -3
 - data/lib/paper_trail_association_tracking/version.rb +1 -1
 - data/lib/paper_trail_association_tracking/version_concern.rb +1 -20
 - metadata +16 -31
 - data/lib/paper_trail_association_tracking/frameworks/rails/engine.rb +0 -10
 - data/lib/paper_trail_association_tracking/frameworks/rspec.rb +0 -20
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3b49b412d6cd431cd4310dadde716d334231225fed80e84c5d4d8696f42fcb0f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: a77500b35d0f66a1840272b8efd9891ce876da341756fe47077cd1257e4f26b2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: dff6c0eacc9cf46bb6ed00edbed900426ac3b842b7e5046bb9511422b44d78bb88782d7ffc4c4322c40e28426ee0cc2c3c4fdcd7630f0c0ca4b294dabaa9f815
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 41c42f324a608af7c22d7b442827eedf15f4d6c79e0c023eb93adc99f177076a95b84c7dc18acdf8f8a3f0d3a9726378d542d18f02b8bc92a3a18092d9e792d2
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,8 +1,24 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # CHANGELOG
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            ### Unreleased - [View Diff](https://github.com/westonganger/paper_trail-association_tracking/compare/v2. 
     | 
| 
      
 3 
     | 
    
         
            +
            ### Unreleased - [View Diff](https://github.com/westonganger/paper_trail-association_tracking/compare/v2.2.1...master)
         
     | 
| 
      
 4 
     | 
    
         
            +
            - Nothing yet 
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            -  
     | 
| 
      
 6 
     | 
    
         
            +
            ### v2.2.1 - [View Diff](https://github.com/westonganger/paper_trail-association_tracking/compare/v2.2.0...v2.2.1)
         
     | 
| 
      
 7 
     | 
    
         
            +
            - [PR #38](https://github.com/westonganger/paper_trail-association_tracking/pull/38) - Fix the issue where reifying has_one association with `dependent: :destroy` could destroy a live record
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ### v2.2.0 - [View Diff](https://github.com/westonganger/paper_trail-association_tracking/compare/v2.1.3...v2.2.0)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            - [PR #36](https://github.com/westonganger/paper_trail-association_tracking/pull/36) - Fix load order for paper_trail v12+
         
     | 
| 
      
 12 
     | 
    
         
            +
            - Drop support for Ruby 2.5
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Add Github Actions CI supporting multiple version of Ruby, Rails and multiple databases types
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ### 2.1.3 - [View Diff](https://github.com/westonganger/paper_trail-association_tracking/compare/v2.1.1...v2.1.3)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - [PR #24](https://github.com/westonganger/paper_trail-association_tracking/pull/24) - Fix reification on STI models that have parent child relationships
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            ### 2.1.2
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            - A late night oopsies, Release yanked immediately, had bug preventing installation.
         
     | 
| 
       6 
22 
     | 
    
         | 
| 
       7 
23 
     | 
    
         
             
            ### 2.1.1 - 2020-10-21 - [View Diff](https://github.com/westonganger/paper_trail-association_tracking/compare/v2.1.0...v2.1.1)
         
     | 
| 
       8 
24 
     | 
    
         | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # PaperTrail-AssociationTracking
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            <a href="https://badge.fury.io/rb/paper_trail-association_tracking" target="_blank"><img height="21" style='border:0px;height:21px;' border='0' src="https://badge.fury.io/rb/paper_trail-association_tracking.svg" alt="Gem Version"></a>
         
     | 
| 
       4 
     | 
    
         
            -
            <a href='https:// 
     | 
| 
      
 4 
     | 
    
         
            +
            <a href='https://github.com/westonganger/paper_trail-association_tracking/actions' target='_blank'><img src="https://github.com/westonganger/paper_trail-association_tracking/workflows/Tests/badge.svg" style="max-width:100%;" height='21' style='border:0px;height:21px;' border='0' alt="CI Status"></a>
         
     | 
| 
       5 
5 
     | 
    
         
             
            <a href='https://rubygems.org/gems/paper_trail-association_tracking' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://ruby-gem-downloads-badge.herokuapp.com/paper_trail-association_tracking?label=rubygems&type=total&total_label=downloads&color=brightgreen' border='0' alt='RubyGems Downloads' /></a>
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            Plugin for the [PaperTrail](https://github.com/paper-trail-gem/paper_trail.git) gem to track and reify associations. This gem was extracted from PaperTrail for v9.2.0 to simplify things in PaperTrail and association tracking separately. 
         
     | 
| 
         @@ -23,14 +23,13 @@ It will store in the `version_associations` table additional information to corr 
     | 
|
| 
       23 
23 
     | 
    
         
             
            - [Known Issues](#known-issues)
         
     | 
| 
       24 
24 
     | 
    
         
             
            - [Contributing](#contributing)
         
     | 
| 
       25 
25 
     | 
    
         
             
            - [Credits](#credits)
         
     | 
| 
      
 26 
     | 
    
         
            +
            - [Alternative Solution](#alternative-solution)
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
28 
     | 
    
         | 
| 
       28 
29 
     | 
    
         
             
            # Install
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
31 
     | 
    
         
             
            ```ruby
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
            gem 'paper_trail' # Minimum required version is v9.2.0
         
     | 
| 
      
 32 
     | 
    
         
            +
            gem 'paper_trail'
         
     | 
| 
       34 
33 
     | 
    
         
             
            gem 'paper_trail-association_tracking'
         
     | 
| 
       35 
34 
     | 
    
         
             
            ```
         
     | 
| 
       36 
35 
     | 
    
         | 
| 
         @@ -182,3 +181,9 @@ Maintained by [Weston Ganger](https://westonganger.com) - [@westonganger](https: 
     | 
|
| 
       182 
181 
     | 
    
         
             
            Plugin authored by [Weston Ganger](https://westonganger.com) - [@westonganger](https://github.com/westonganger)
         
     | 
| 
       183 
182 
     | 
    
         | 
| 
       184 
183 
     | 
    
         
             
            Associations code originally contributed by Ben Atkins, Jared Beck, Andy Stewart & more
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
            # Alternative Solution
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
            Model Versioning and Restoration require concious thought, design, and understanding. You should understand your versioning and restoration process completely. Because PT-AT it is mostly a blackbox solution which encourages you to set it up and then assume its "Just Working". This can make for major data problems later.
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            Instead I recommend a newer gem that I have created for handling snapshots of records and associations called [active_snapshot](https://github.com/westonganger/active_snapshot). This gem does not utilize `paper_trail` at all. The focus of this gem is to have a simple and fully understandable design is easy to customize and know inside and out for your projects needs.
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -17,9 +17,6 @@ Rake::TestTask.new(:test) do |t| 
     | 
|
| 
       17 
17 
     | 
    
         
             
              t.libs << "test"
         
     | 
| 
       18 
18 
     | 
    
         
             
              t.pattern = "test/**/*_test.rb"
         
     | 
| 
       19 
19 
     | 
    
         
             
              t.verbose = false
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
              ### Enabling ruby interpreter warnings (-w) is, sadly, impractical. 
         
     | 
| 
       22 
     | 
    
         
            -
              ### There are too many noisy warnings that we have no control over, e.g. caused by libs we depend on.
         
     | 
| 
       23 
20 
     | 
    
         
             
              t.warning = false
         
     | 
| 
       24 
21 
     | 
    
         
             
            end
         
     | 
| 
       25 
22 
     | 
    
         | 
| 
         @@ -27,7 +24,7 @@ require "rspec/core/rake_task" 
     | 
|
| 
       27 
24 
     | 
    
         
             
            desc "Run tests on PaperTrail with RSpec"
         
     | 
| 
       28 
25 
     | 
    
         
             
            task(:spec).clear
         
     | 
| 
       29 
26 
     | 
    
         
             
            RSpec::Core::RakeTask.new(:spec) do |t|
         
     | 
| 
       30 
     | 
    
         
            -
              t.verbose = false # hide list of specs 
     | 
| 
      
 27 
     | 
    
         
            +
              t.verbose = false # hide list of specs
         
     | 
| 
       31 
28 
     | 
    
         
             
            end
         
     | 
| 
       32 
29 
     | 
    
         | 
| 
       33 
30 
     | 
    
         
             
            desc "Default: run all available test suites"
         
     | 
| 
         @@ -9,6 +9,14 @@ require "paper_trail_association_tracking/request" 
     | 
|
| 
       9 
9 
     | 
    
         
             
            require "paper_trail_association_tracking/paper_trail"
         
     | 
| 
       10 
10 
     | 
    
         
             
            require "paper_trail_association_tracking/version_concern"
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
            if defined?(Rails)
         
     | 
| 
      
 13 
     | 
    
         
            +
              require "paper_trail/frameworks/active_record"
         
     | 
| 
      
 14 
     | 
    
         
            +
              require "paper_trail_association_tracking/frameworks/rails"
         
     | 
| 
      
 15 
     | 
    
         
            +
            elsif defined?(ActiveRecord)
         
     | 
| 
      
 16 
     | 
    
         
            +
              require "paper_trail/frameworks/active_record"
         
     | 
| 
      
 17 
     | 
    
         
            +
              require "paper_trail_association_tracking/frameworks/active_record"
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       12 
20 
     | 
    
         
             
            module PaperTrailAssociationTracking
         
     | 
| 
       13 
21 
     | 
    
         
             
              def self.version
         
     | 
| 
       14 
22 
     | 
    
         
             
                VERSION
         
     | 
| 
         @@ -47,20 +55,4 @@ module PaperTrail 
     | 
|
| 
       47 
55 
     | 
    
         
             
                  prepend ::PaperTrailAssociationTracking::Request::ClassMethods
         
     | 
| 
       48 
56 
     | 
    
         
             
                end
         
     | 
| 
       49 
57 
     | 
    
         
             
              end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              module VersionConcern
         
     | 
| 
       52 
     | 
    
         
            -
                include ::PaperTrailAssociationTracking::VersionConcern
         
     | 
| 
       53 
     | 
    
         
            -
              end
         
     | 
| 
       54 
     | 
    
         
            -
            end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
            # Require frameworks
         
     | 
| 
       57 
     | 
    
         
            -
            if defined?(::Rails)
         
     | 
| 
       58 
     | 
    
         
            -
              # Rails module is sometimes defined by gems like rails-html-sanitizer so we check for presence of Rails.application.
         
     | 
| 
       59 
     | 
    
         
            -
              if defined?(::Rails.application)
         
     | 
| 
       60 
     | 
    
         
            -
                require "paper_trail_association_tracking/frameworks/rails"
         
     | 
| 
       61 
     | 
    
         
            -
              else
         
     | 
| 
       62 
     | 
    
         
            -
                ::Kernel.warn('PaperTrail has been loaded too early, before rails is loaded. This can happen when another gem defines the ::Rails namespace, then PT is loaded, all before rails is loaded. You may want to reorder your Gemfile, or defer the loading of PT by using `require: false` and a manual require elsewhere.')
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
            else
         
     | 
| 
       65 
     | 
    
         
            -
              require "paper_trail_association_tracking/frameworks/active_record"
         
     | 
| 
       66 
58 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,5 +1,3 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            # This file only needs to be loaded if the gem is being used outside of Rails,
         
     | 
| 
       4 
     | 
    
         
            -
            # since otherwise the model(s) will get loaded in via the `Rails::Engine`.
         
     | 
| 
       5 
3 
     | 
    
         
             
            require "paper_trail_association_tracking/frameworks/active_record/models/paper_trail/version_association"
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module PaperTrailAssociationTracking
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Railtie < ::Rails::Railtie
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                initializer "paper_trail_association_tracking", after: "paper_trail" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  ActiveSupport.on_load(:active_record) do
         
     | 
| 
      
 8 
     | 
    
         
            +
                    require "paper_trail_association_tracking/frameworks/active_record"
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                config.to_prepare do
         
     | 
| 
      
 13 
     | 
    
         
            +
                  ::PaperTrail::Version.include(::PaperTrailAssociationTracking::VersionConcern)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -38,15 +38,34 @@ module PaperTrailAssociationTracking 
     | 
|
| 
       38 
38 
     | 
    
         
             
                  habtm_assocs_not_skipped.each(&method(:setup_habtm_change_callbacks))
         
     | 
| 
       39 
39 
     | 
    
         
             
                end
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                def setup_habtm_change_callbacks( 
     | 
| 
       42 
     | 
    
         
            -
                   
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                       
     | 
| 
       49 
     | 
    
         
            -
                     
     | 
| 
      
 41 
     | 
    
         
            +
                def setup_habtm_change_callbacks(association)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  association_name = association.name
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  if ActiveRecord::VERSION::MAJOR >= 7
         
     | 
| 
      
 45 
     | 
    
         
            +
                    ### https://github.com/westonganger/paper_trail-association_tracking/pull/37#issuecomment-1067146121
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    before_add_callback = lambda do |*args|
         
     | 
| 
      
 48 
     | 
    
         
            +
                      update_habtm_state(association_name, :before_add, args[-2], args.last)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    before_remove_callback = lambda do |*args|
         
     | 
| 
      
 52 
     | 
    
         
            +
                      update_habtm_state(association_name, :before_remove, args[-2], args.last)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    assoc_opts = association.options.merge(before_add: before_add_callback, before_remove: before_remove_callback)
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                    association.instance_variable_set(:@options, **assoc_opts)
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                    ::ActiveRecord::Associations::Builder::CollectionAssociation.send(:define_callbacks, @model_class, association)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  else
         
     | 
| 
      
 61 
     | 
    
         
            +
                    %w[add remove].each do |verb|
         
     | 
| 
      
 62 
     | 
    
         
            +
                      @model_class.send("before_#{verb}_for_#{association_name}").send(
         
     | 
| 
      
 63 
     | 
    
         
            +
                        :<<,
         
     | 
| 
      
 64 
     | 
    
         
            +
                        lambda do |*args|
         
     | 
| 
      
 65 
     | 
    
         
            +
                          update_habtm_state(association_name, :"before_#{verb}", args[-2], args.last)
         
     | 
| 
      
 66 
     | 
    
         
            +
                        end
         
     | 
| 
      
 67 
     | 
    
         
            +
                      )
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
       50 
69 
     | 
    
         
             
                  end
         
     | 
| 
       51 
70 
     | 
    
         
             
                end
         
     | 
| 
       52 
71 
     | 
    
         | 
| 
         @@ -94,12 +94,18 @@ module PaperTrailAssociationTracking 
     | 
|
| 
       94 
94 
     | 
    
         
             
                    # from the point in time identified by `tx_id` or `version_at`.
         
     | 
| 
       95 
95 
     | 
    
         
             
                    # @api private
         
     | 
| 
       96 
96 
     | 
    
         
             
                    def load_versions_for_hm_association(assoc, model, version_table, tx_id, version_at)
         
     | 
| 
      
 97 
     | 
    
         
            +
                      # For STI models, associations may be defined to reference superclasses, so looking up 
         
     | 
| 
      
 98 
     | 
    
         
            +
                      # based on only the child-most class is not appropriate.
         
     | 
| 
      
 99 
     | 
    
         
            +
                      sti_model_names =  model.class.ancestors
         
     | 
| 
      
 100 
     | 
    
         
            +
                                              .select { |x| x <= model.class.base_class && x.method_defined?(assoc.name) }
         
     | 
| 
      
 101 
     | 
    
         
            +
                                              .map(&:name)
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
       97 
103 
     | 
    
         
             
                      version_ids = ::PaperTrail::VersionAssociation.
         
     | 
| 
       98 
104 
     | 
    
         
             
                        joins(model.class.version_association_name).
         
     | 
| 
       99 
105 
     | 
    
         
             
                        select("MIN(version_id) as version_id").
         
     | 
| 
       100 
106 
     | 
    
         
             
                        where("foreign_key_name = ?", assoc.foreign_key).
         
     | 
| 
       101 
107 
     | 
    
         
             
                        where("foreign_key_id = ?", model.id).
         
     | 
| 
       102 
     | 
    
         
            -
                        where(foreign_type: [ 
     | 
| 
      
 108 
     | 
    
         
            +
                        where(foreign_type: sti_model_names + [nil]).
         
     | 
| 
       103 
109 
     | 
    
         
             
                        where("#{version_table}.item_type = ?", assoc.klass.base_class.name).
         
     | 
| 
       104 
110 
     | 
    
         
             
                        where("created_at >= ? OR transaction_id = ?", version_at, tx_id).
         
     | 
| 
       105 
111 
     | 
    
         
             
                        group("item_id").
         
     | 
| 
         @@ -56,9 +56,7 @@ module PaperTrailAssociationTracking 
     | 
|
| 
       56 
56 
     | 
    
         
             
                      if options[:mark_for_destruction]
         
     | 
| 
       57 
57 
     | 
    
         
             
                        model.send(assoc.name).mark_for_destruction if model.send(assoc.name, true)
         
     | 
| 
       58 
58 
     | 
    
         
             
                      else
         
     | 
| 
       59 
     | 
    
         
            -
                        model. 
     | 
| 
       60 
     | 
    
         
            -
                          model.send "#{assoc.name}=", nil
         
     | 
| 
       61 
     | 
    
         
            -
                        end
         
     | 
| 
      
 59 
     | 
    
         
            +
                        model.association(assoc.name).target = nil
         
     | 
| 
       62 
60 
     | 
    
         
             
                      end
         
     | 
| 
       63 
61 
     | 
    
         
             
                    end
         
     | 
| 
       64 
62 
     | 
    
         | 
| 
         @@ -1,10 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module PaperTrailAssociationTracking
         
     | 
| 
       4 
     | 
    
         
            -
              # Originally, PaperTrail did not provide this module, and all of this
         
     | 
| 
       5 
     | 
    
         
            -
              # functionality was in `PaperTrail::Version`. That model still exists (and is
         
     | 
| 
       6 
     | 
    
         
            -
              # used by most apps) but by moving the functionality to this module, people
         
     | 
| 
       7 
     | 
    
         
            -
              # can include this concern instead of sub-classing the `Version` model.
         
     | 
| 
       8 
4 
     | 
    
         
             
              module VersionConcern
         
     | 
| 
       9 
5 
     | 
    
         
             
                extend ::ActiveSupport::Concern
         
     | 
| 
       10 
6 
     | 
    
         | 
| 
         @@ -16,22 +12,7 @@ module PaperTrailAssociationTracking 
     | 
|
| 
       16 
12 
     | 
    
         
             
                    has_many :version_associations, dependent: :destroy
         
     | 
| 
       17 
13 
     | 
    
         
             
                  end
         
     | 
| 
       18 
14 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                  scope 
     | 
| 
      
 15 
     | 
    
         
            +
                  scope :within_transaction, ->(id) { where(transaction_id: id) }
         
     | 
| 
       20 
16 
     | 
    
         
             
                end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                # Restore the item from this version.
         
     | 
| 
       23 
     | 
    
         
            -
                #
         
     | 
| 
       24 
     | 
    
         
            -
                # In addition to the options provided by PaperTrail core. This Plugin provides the following Options:
         
     | 
| 
       25 
     | 
    
         
            -
                #
         
     | 
| 
       26 
     | 
    
         
            -
                # - :has_one
         
     | 
| 
       27 
     | 
    
         
            -
                #   - `true` - Also reify has_one associations.
         
     | 
| 
       28 
     | 
    
         
            -
                #   - `false - Default.
         
     | 
| 
       29 
     | 
    
         
            -
                # - :has_many
         
     | 
| 
       30 
     | 
    
         
            -
                #   - `true` - Also reify has_many and has_many :through associations.
         
     | 
| 
       31 
     | 
    
         
            -
                #   - `false` - Default.
         
     | 
| 
       32 
     | 
    
         
            -
                #
         
     | 
| 
       33 
     | 
    
         
            -
                #def reify(options = {})
         
     | 
| 
       34 
     | 
    
         
            -
                #  super
         
     | 
| 
       35 
     | 
    
         
            -
                #end
         
     | 
| 
       36 
17 
     | 
    
         
             
              end
         
     | 
| 
       37 
18 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,47 +1,33 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: paper_trail-association_tracking
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.2.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Weston Ganger
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Jared Beck
         
     | 
| 
       9 
9 
     | 
    
         
             
            - Ben Atkins
         
     | 
| 
       10 
     | 
    
         
            -
            autorequire: 
     | 
| 
      
 10 
     | 
    
         
            +
            autorequire:
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date:  
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2022-03-29 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
     | 
    
         
            -
              name:  
     | 
| 
       17 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       18 
     | 
    
         
            -
                requirements:
         
     | 
| 
       19 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       20 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       21 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
       22 
     | 
    
         
            -
              type: :development
         
     | 
| 
       23 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       25 
     | 
    
         
            -
                requirements:
         
     | 
| 
       26 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       27 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       28 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
       29 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       30 
     | 
    
         
            -
              name: byebug
         
     | 
| 
      
 16 
     | 
    
         
            +
              name: paper_trail
         
     | 
| 
       31 
17 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       32 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       33 
19 
     | 
    
         
             
                - - ">="
         
     | 
| 
       34 
20 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       35 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
       36 
     | 
    
         
            -
              type: : 
     | 
| 
      
 21 
     | 
    
         
            +
                    version: '12.0'
         
     | 
| 
      
 22 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
       37 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       38 
24 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       39 
25 
     | 
    
         
             
                requirements:
         
     | 
| 
       40 
26 
     | 
    
         
             
                - - ">="
         
     | 
| 
       41 
27 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       42 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 28 
     | 
    
         
            +
                    version: '12.0'
         
     | 
| 
       43 
29 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       44 
     | 
    
         
            -
              name:  
     | 
| 
      
 30 
     | 
    
         
            +
              name: appraisal
         
     | 
| 
       45 
31 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       46 
32 
     | 
    
         
             
                requirements:
         
     | 
| 
       47 
33 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -55,7 +41,7 @@ dependencies: 
     | 
|
| 
       55 
41 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       56 
42 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       57 
43 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       58 
     | 
    
         
            -
              name:  
     | 
| 
      
 44 
     | 
    
         
            +
              name: byebug
         
     | 
| 
       59 
45 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       60 
46 
     | 
    
         
             
                requirements:
         
     | 
| 
       61 
47 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -69,7 +55,7 @@ dependencies: 
     | 
|
| 
       69 
55 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       70 
56 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       71 
57 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       72 
     | 
    
         
            -
              name:  
     | 
| 
      
 58 
     | 
    
         
            +
              name: ffaker
         
     | 
| 
       73 
59 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       74 
60 
     | 
    
         
             
                requirements:
         
     | 
| 
       75 
61 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -83,7 +69,7 @@ dependencies: 
     | 
|
| 
       83 
69 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       84 
70 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       85 
71 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       86 
     | 
    
         
            -
              name:  
     | 
| 
      
 72 
     | 
    
         
            +
              name: generator_spec
         
     | 
| 
       87 
73 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       88 
74 
     | 
    
         
             
                requirements:
         
     | 
| 
       89 
75 
     | 
    
         
             
                - - ">="
         
     | 
| 
         @@ -186,8 +172,7 @@ files: 
     | 
|
| 
       186 
172 
     | 
    
         
             
            - lib/paper_trail_association_tracking/frameworks/active_record.rb
         
     | 
| 
       187 
173 
     | 
    
         
             
            - lib/paper_trail_association_tracking/frameworks/active_record/models/paper_trail/version_association.rb
         
     | 
| 
       188 
174 
     | 
    
         
             
            - lib/paper_trail_association_tracking/frameworks/rails.rb
         
     | 
| 
       189 
     | 
    
         
            -
            - lib/paper_trail_association_tracking/frameworks/rails/ 
     | 
| 
       190 
     | 
    
         
            -
            - lib/paper_trail_association_tracking/frameworks/rspec.rb
         
     | 
| 
      
 175 
     | 
    
         
            +
            - lib/paper_trail_association_tracking/frameworks/rails/railtie.rb
         
     | 
| 
       191 
176 
     | 
    
         
             
            - lib/paper_trail_association_tracking/model_config.rb
         
     | 
| 
       192 
177 
     | 
    
         
             
            - lib/paper_trail_association_tracking/paper_trail.rb
         
     | 
| 
       193 
178 
     | 
    
         
             
            - lib/paper_trail_association_tracking/record_trail.rb
         
     | 
| 
         @@ -205,7 +190,7 @@ homepage: https://github.com/westonganger/paper_trail-association_tracking 
     | 
|
| 
       205 
190 
     | 
    
         
             
            licenses:
         
     | 
| 
       206 
191 
     | 
    
         
             
            - MIT
         
     | 
| 
       207 
192 
     | 
    
         
             
            metadata: {}
         
     | 
| 
       208 
     | 
    
         
            -
            post_install_message: 
     | 
| 
      
 193 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
       209 
194 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       210 
195 
     | 
    
         
             
            require_paths:
         
     | 
| 
       211 
196 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -213,15 +198,15 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       213 
198 
     | 
    
         
             
              requirements:
         
     | 
| 
       214 
199 
     | 
    
         
             
              - - ">="
         
     | 
| 
       215 
200 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       216 
     | 
    
         
            -
                  version: 2. 
     | 
| 
      
 201 
     | 
    
         
            +
                  version: 2.6.0
         
     | 
| 
       217 
202 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       218 
203 
     | 
    
         
             
              requirements:
         
     | 
| 
       219 
204 
     | 
    
         
             
              - - ">="
         
     | 
| 
       220 
205 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       221 
206 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       222 
207 
     | 
    
         
             
            requirements: []
         
     | 
| 
       223 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
       224 
     | 
    
         
            -
            signing_key: 
     | 
| 
      
 208 
     | 
    
         
            +
            rubygems_version: 3.2.32
         
     | 
| 
      
 209 
     | 
    
         
            +
            signing_key:
         
     | 
| 
       225 
210 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       226 
211 
     | 
    
         
             
            summary: Plugin for the PaperTrail gem to track and reify associations
         
     | 
| 
       227 
212 
     | 
    
         
             
            test_files: []
         
     | 
| 
         @@ -1,10 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module PaperTrailAssociationTracking
         
     | 
| 
       4 
     | 
    
         
            -
              module Rails
         
     | 
| 
       5 
     | 
    
         
            -
                # See http://guides.rubyonrails.org/engines.html
         
     | 
| 
       6 
     | 
    
         
            -
                class Engine < ::Rails::Engine
         
     | 
| 
       7 
     | 
    
         
            -
                  paths["app/models"] << "lib/paper_trail_association_tracking/frameworks/active_record/models"
         
     | 
| 
       8 
     | 
    
         
            -
                end
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
       10 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "rspec/core"
         
     | 
| 
       4 
     | 
    
         
            -
            require "rspec/matchers"
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            RSpec::Matchers.define :have_a_version_with do |attributes|
         
     | 
| 
       7 
     | 
    
         
            -
              # check if the model has a version with the specified attributes
         
     | 
| 
       8 
     | 
    
         
            -
              match do |actual|
         
     | 
| 
       9 
     | 
    
         
            -
                versions_association = actual.class.versions_association_name
         
     | 
| 
       10 
     | 
    
         
            -
                actual.send(versions_association).where_object(attributes).any?
         
     | 
| 
       11 
     | 
    
         
            -
              end
         
     | 
| 
       12 
     | 
    
         
            -
            end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            RSpec::Matchers.define :have_a_version_with_changes do |attributes|
         
     | 
| 
       15 
     | 
    
         
            -
              # check if the model has a version changes with the specified attributes
         
     | 
| 
       16 
     | 
    
         
            -
              match do |actual|
         
     | 
| 
       17 
     | 
    
         
            -
                versions_association = actual.class.versions_association_name
         
     | 
| 
       18 
     | 
    
         
            -
                actual.send(versions_association).where_object_changes(attributes).any?
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     |