Examples
This section provides examples for using the GitLab Discussions feature.
Creating a discussion
To create a discussion, you can use the Discussions::CreateService
. This service takes a number of options, including:
title
: The title of the discussion.body
: The body of the discussion.project
: The project where the discussion should be created.author
: The user who is creating the discussion.private
: Whether the discussion should be private or public.
discussion = Discussions::CreateService.new(project, current_user, title: "Example Discussion", body: "This is an example discussion.")
.execute
# The `discussion` variable will contain the newly created discussion.
Adding a comment
To add a comment to a discussion, you can use the Discussions::CreateCommentService
. This service takes a number of options, including:
discussion
: The discussion to which the comment should be added.body
: The body of the comment.author
: The user who is adding the comment.
comment = Discussions::CreateCommentService.new(discussion, current_user, body: "This is an example comment.")
.execute
# The `comment` variable will contain the newly created comment.
Voting on a discussion or comment
To vote on a discussion or comment, you can use the Discussions::VoteService
. This service takes a number of options, including:
votable
: The discussion or comment to be voted on.user
: The user who is voting.vote
: The type of vote, eitherupvote
ordownvote
.
# Upvote a discussion
Discussions::VoteService.new(discussion, current_user, vote: 'upvote').execute
# Downvote a comment
Discussions::VoteService.new(comment, current_user, vote: 'downvote').execute
Marking a discussion as resolved
To mark a discussion as resolved, you can use the Discussions::MarkAsResolvedService
. This service takes a number of options, including:
discussion
: The discussion to be marked as resolved.author
: The user who is marking the discussion as resolved.
Discussions::MarkAsResolvedService.new(discussion, current_user).execute
Unmarking a discussion as resolved
To unmark a discussion as resolved, you can use the Discussions::MarkAsUnresolvedService
. This service takes a number of options, including:
discussion
: The discussion to be unmarked as resolved.author
: The user who is unmarking the discussion as resolved.
Discussions::MarkAsUnresolvedService.new(discussion, current_user).execute
Closing a discussion
To close a discussion, you can use the Discussions::CloseService
. This service takes a number of options, including:
discussion
: The discussion to be closed.author
: The user who is closing the discussion.
Discussions::CloseService.new(discussion, current_user).execute
Reopening a discussion
To reopen a discussion, you can use the Discussions::ReopenService
. This service takes a number of options, including:
discussion
: The discussion to be reopened.author
: The user who is reopening the discussion.
Discussions::ReopenService.new(discussion, current_user).execute
Subscribing to a discussion
To subscribe to a discussion, you can use the Discussions::SubscribeService
. This service takes a number of options, including:
discussion
: The discussion to be subscribed to.user
: The user who is subscribing.
Discussions::SubscribeService.new(discussion, current_user).execute
Unsubscribing from a discussion
To unsubscribe from a discussion, you can use the Discussions::UnsubscribeService
. This service takes a number of options, including:
discussion
: The discussion to be unsubscribed from.user
: The user who is unsubscribing.
Discussions::UnsubscribeService.new(discussion, current_user).execute
Viewing a discussion
To view a discussion, you can use the Discussions::ShowService
. This service takes a number of options, including:
discussion
: The discussion to be viewed.
discussion = Discussions::ShowService.new(discussion).execute
Updating a discussion
To update a discussion, you can use the Discussions::UpdateService
. This service takes a number of options, including:
discussion
: The discussion to be updated.title
: The new title of the discussion.body
: The new body of the discussion.
Discussions::UpdateService.new(discussion, title: "New title", body: "New body").execute
Deleting a discussion
To delete a discussion, you can use the Discussions::DestroyService
. This service takes a number of options, including:
discussion
: The discussion to be deleted.
Discussions::DestroyService.new(discussion).execute
Finding discussions
To find discussions, you can use the DiscussionsFinder
class. This class provides a number of methods for finding discussions, including:
by_project
: Find discussions for a given project.by_author
: Find discussions by a given author.by_title
: Find discussions with a given title.
# Find all discussions for a given project
DiscussionsFinder.new(project).execute
# Find all discussions by a given author
DiscussionsFinder.new.by_author(current_user).execute
# Find all discussions with a given title
DiscussionsFinder.new.by_title("Example Discussion").execute
Filtering discussions
To filter discussions, you can use the DiscussionsFilter
class. This class provides a number of methods for filtering discussions, including:
resolved
: Find discussions that are resolved.unresolved
: Find discussions that are unresolved.closed
: Find discussions that are closed.opened
: Find discussions that are open.
# Find all resolved discussions
DiscussionsFilter.new.resolved
# Find all unresolved discussions
DiscussionsFilter.new.unresolved
# Find all closed discussions
DiscussionsFilter.new.closed
# Find all open discussions
DiscussionsFilter.new.opened
Sorting discussions
To sort discussions, you can use the DiscussionsSorter
class. This class provides a number of methods for sorting discussions, including:
created_at
: Sort discussions by creation date.updated_at
: Sort discussions by update date.votes
: Sort discussions by number of votes.
# Sort discussions by creation date
DiscussionsSorter.new.created_at
# Sort discussions by update date
DiscussionsSorter.new.updated_at
# Sort discussions by number of votes
DiscussionsSorter.new.votes
Working with discussions within a project
Discussions can also be found and manipulated within a project.
# Find discussions for a given project
project.discussions
# Create a discussion for a project
project.discussions.create(title: "Example Discussion", body: "This is an example discussion.")
# Find comments on a discussion in a project
discussion.comments
Example: Creating a Discussion and Comment
# Create a new discussion in a project
discussion = Discussions::CreateService.new(project, current_user, title: "Example Discussion", body: "This is an example discussion.")
.execute
# Add a comment to the newly created discussion
comment = Discussions::CreateCommentService.new(discussion, current_user, body: "This is an example comment.")
.execute
Example: Finding Discussions
# Find all discussions in a project
project.discussions
# Find all discussions by a specific author
DiscussionsFinder.new.by_author(current_user).execute
# Find all discussions with a specific title
DiscussionsFinder.new.by_title("Example Discussion").execute
# Find all resolved discussions
DiscussionsFilter.new.resolved
# Find all unresolved discussions
DiscussionsFilter.new.unresolved
# Find all closed discussions
DiscussionsFilter.new.closed
# Find all open discussions
DiscussionsFilter.new.opened
Example: Voting on a Discussion
# Upvote a discussion
Discussions::VoteService.new(discussion, current_user, vote: 'upvote').execute
# Downvote a discussion
Discussions::VoteService.new(discussion, current_user, vote: 'downvote').execute
Example: Marking a Discussion as Resolved
# Mark a discussion as resolved
Discussions::MarkAsResolvedService.new(discussion, current_user).execute
Example: Closing a Discussion
# Close a discussion
Discussions::CloseService.new(discussion, current_user).execute
Example: Subscribing to a Discussion
# Subscribe to a discussion
Discussions::SubscribeService.new(discussion, current_user).execute
Example: Updating a Discussion
# Update a discussion
Discussions::UpdateService.new(discussion, title: "New title", body: "New body").execute
Example: Deleting a Discussion
# Delete a discussion
Discussions::DestroyService.new(discussion).execute