Sha256: f4fc37bdc7727eddd055dd44c062c320df0c532ab7513ed00b3a05d7e4c1b114

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module NullifyDependencies
  def nullify_dependencies(dependencies_symbols_to_nullify)
    dependencies_symbols_to_nullify.map do |symbol|
      dependencies = self.send(symbol) # e.g. build.tags_for_that_this_build_is_last

      dependencies.map do |entry| # e.g. tags.map do |tag|
        foreign_key = self.class.reflect_on_association(symbol).foreign_key.to_sym # e.g. last_build_id
        entry.update(foreign_key => nil) # e.g. tag.update(last_build_id: nil)
        {
          related_table: entry.class.table_name,
          foreign_key: foreign_key,
          parent_id: self.id,
          related_id: entry.id
        }
      end
    end.flatten
  end
  
  def nullify_all_dependencies
    nullify_dependencies(symbols_of_all_direct_dependencies)
  end

  def nullify_default_dependencies
    nullify_dependencies(default_dependencies_symbols_to_nullify)
  end

  def default_dependencies_symbols_to_nullify
    self.class.default_dependencies_symbols_to_nullify
  end

  def self.default_dependencies_symbols_to_nullify
    raise "self.default_dependencies_symbols_to_nullify not implemented in the #{self.class} class"
  end

  def default_dependencies_to_nullify
    default_dependencies_symbols_to_nullify.map do |symbol|
      self.send(symbol).to_a
    end.flatten(1)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
travis-backup-for-v3-0.1.1 lib/nullify_dependencies.rb
travis-backup-for-v3-0.1.0 lib/nullify_dependencies.rb