From 14eee417a703a672edb798f0a17f38626b074d40 Mon Sep 17 00:00:00 2001 From: Jared Beck Date: Tue, 13 Dec 2016 22:32:11 -0500 Subject: [PATCH] Extract private method save_bt_association --- lib/paper_trail/record_trail.rb | 51 +++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/lib/paper_trail/record_trail.rb b/lib/paper_trail/record_trail.rb index 20c89654..cec29cfe 100644 --- a/lib/paper_trail/record_trail.rb +++ b/lib/paper_trail/record_trail.rb @@ -346,29 +346,15 @@ module PaperTrail # Saves associations if the join table for `VersionAssociation` exists. def save_associations(version) return unless PaperTrail.config.track_associations? - save_associations_belongs_to(version) - save_associations_habtm(version) + save_bt_associations(version) + save_habtm_associations(version) end - def save_associations_belongs_to(version) + # Save all `belongs_to` associations. + # @api private + def save_bt_associations(version) @record.class.reflect_on_all_associations(:belongs_to).each do |assoc| - assoc_version_args = { - version_id: version.id, - foreign_key_name: assoc.foreign_key - } - - if assoc.options[:polymorphic] - associated_record = @record.send(assoc.name) if @record.send(assoc.foreign_type) - if associated_record && associated_record.class.paper_trail.enabled? - assoc_version_args[:foreign_key_id] = associated_record.id - end - elsif assoc.klass.paper_trail.enabled? - assoc_version_args[:foreign_key_id] = @record.send(assoc.foreign_key) - end - - if assoc_version_args.key?(:foreign_key_id) - PaperTrail::VersionAssociation.create(assoc_version_args) - end + save_bt_association(assoc, version) end end @@ -376,7 +362,8 @@ module PaperTrail # HABTM associations looked like before any changes were made, by using # the `paper_trail_habtm` data structure. Then, we create # `VersionAssociation` records for each of the associated records. - def save_associations_habtm(version) + # @api private + def save_habtm_associations(version) @record.class.reflect_on_all_associations(:has_and_belongs_to_many).each do |a| next unless save_habtm_association?(a) habtm_assoc_ids(a).each do |id| @@ -525,6 +512,28 @@ module PaperTrail ) end + # Save a single `belongs_to` association. + # @api private + def save_bt_association(assoc, version) + assoc_version_args = { + version_id: version.id, + foreign_key_name: assoc.foreign_key + } + + if assoc.options[:polymorphic] + associated_record = @record.send(assoc.name) if @record.send(assoc.foreign_type) + if associated_record && associated_record.class.paper_trail.enabled? + assoc_version_args[:foreign_key_id] = associated_record.id + end + elsif assoc.klass.paper_trail.enabled? + assoc_version_args[:foreign_key_id] = @record.send(assoc.foreign_key) + end + + if assoc_version_args.key?(:foreign_key_id) + PaperTrail::VersionAssociation.create(assoc_version_args) + end + end + # Returns true if the given HABTM association should be saved. # @api private def save_habtm_association?(assoc)