Class: PostMerger

Inherits:
Object
  • Object
show all
Defined in:
lib/post_merger.rb

Defined Under Namespace

Classes: CannotMergeError

Instance Method Summary collapse

Constructor Details

#initialize(user, posts) ⇒ PostMerger

Returns a new instance of PostMerger.



7
8
9
10
# File 'lib/post_merger.rb', line 7

def initialize(user, posts)
  @user = user
  @posts = posts
end

Instance Method Details

#mergeObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/post_merger.rb', line 12

def merge
  return if @posts.count < 2

  ensure_same_topic!
  ensure_same_user!

  guardian = Guardian.new(@user)
  ensure_can_merge!(guardian)

  posts =
    @posts.sort_by do |post|
      guardian.ensure_can_delete!(post)
      post.post_number
    end

  post_content = posts.map(&:raw)
  post = posts.pop

  merged_post_raw = post_content.join("\n\n")
  changes = {
    raw: merged_post_raw,
    edit_reason: I18n.t("merge_posts.edit_reason", count: posts.length, username: @user.username),
  }

  ensure_max_post_length!(merged_post_raw)
  PostRevisor
    .new(post, post.topic)
    .revise!(@user, changes) { posts.each { |p| PostDestroyer.new(@user, p).destroy } }
end