lib/active_archive/base.rb in active_archive-4.0.2 vs lib/active_archive/base.rb in active_archive-4.0.3

- old
+ new

@@ -34,11 +34,11 @@ end def unarchive(opts = nil) with_transaction_returning_status do records = should_unarchive_parent_first?(opts) ? unarchival.reverse : unarchival - records.each { |record| record.call(opts) } + records.each { |rec| rec.call(opts) } self end end @@ -73,12 +73,12 @@ # rubocop:disable Metrics/AbcSize def retrieve_dependent_records dependent_records = {} - self.class.reflections.each do |key, reflection| - next unless reflection.options[:dependent] == :destroy + self.class.reflections.each do |key, ref| + next unless ref.options[:dependent] == :destroy records = send(key) next unless records records.respond_to?(:empty?) ? (next if records.empty?) : (records = [] << records) @@ -118,27 +118,30 @@ end end ] end + # rubocop:disable Metrics/LineLength def dependent_records_for_unarchival(name, reflection) record = send(name) case reflection.macro.to_s.gsub('has_', '').to_sym when :many - records = archived_at ? set_record_window(record, name, reflection) : record + records = archived_at ? set_record_window(record, name, reflection) : record.unscope(where: :archived_at) when :one, :belongs_to self.class.unscoped { records = [] << record } end [records].flatten.compact end + # rubocop:enable Metrics/LineLength def unarchive_destroyed_dependent_records(force = nil) self.class.reflections .select { |_, ref| 'destroy' == ref.options[:dependent].to_s && ref.klass.archivable? } .each do |name, ref| - dependent_records_for_unarchival(name, ref).each { |record| record.unarchive(force) } + dependent_records_for_unarchival(name, ref).each { |rec| rec.try(:unarchive, force) } + reload end end def set_archived_at(value, force = nil) return self unless archivable?