problem_merge.rb
762 Bytes
require 'problem_destroy'
class ProblemMerge
def initialize(*problems)
problems = problems.flatten.uniq
@merged_problem = problems[0]
@child_problems = problems[1..-1]
raise ArgumentError.new("need almost 2 uniq different problems") if @child_problems.empty?
end
attr_reader :merged_problem, :child_problems
def merge
child_problems.each do |problem|
merged_problem.errs.concat problem.errs
merged_problem.comments.concat problem.comments
problem.reload # deference all associate objet to avoid delete him after
ProblemDestroy.execute(problem)
end
reset_cached_attributes
merged_problem
end
private
def reset_cached_attributes
ProblemUpdaterCache.new(merged_problem).update
end
end