summaryrefslogtreecommitdiff
path: root/app/models/out_of_context_discussion.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/out_of_context_discussion.rb')
-rw-r--r--app/models/out_of_context_discussion.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/app/models/out_of_context_discussion.rb b/app/models/out_of_context_discussion.rb
new file mode 100644
index 00000000000..4227c40b69a
--- /dev/null
+++ b/app/models/out_of_context_discussion.rb
@@ -0,0 +1,26 @@
+# When notes on a commit are displayed in the context of a merge request that
+# contains that commit, they are displayed as if they were a discussion.
+#
+# This represents one of those discussions, consisting of `Note` notes.
+#
+# A discussion of this type is never resolvable.
+class OutOfContextDiscussion < Discussion
+ # Returns an array of discussion ID components
+ def self.build_discussion_id(note)
+ base_discussion_id(note)
+ end
+
+ # To make sure all out-of-context notes end up grouped as one discussion,
+ # we override the discussion ID to be a newly generated but consistent ID.
+ def self.override_discussion_id(note)
+ discussion_id(note)
+ end
+
+ def self.note_class
+ Note
+ end
+
+ def reply_attributes
+ super.tap { |attrs| attrs.delete(:discussion_id) }
+ end
+end