lib/gitlab/client/issues.rb in gitlab-4.6.0 vs lib/gitlab/client/issues.rb in gitlab-4.6.1

- old
+ new

@@ -1,207 +1,209 @@ # frozen_string_literal: true -# Defines methods related to issues. -# @see https://docs.gitlab.com/ce/api/issues.html -module Issues - # Gets a list of user's issues. - # Will return a list of project's issues if project ID passed. - # - # @example - # Gitlab.issues - # Gitlab.issues(5) - # Gitlab.issues({ per_page: 40 }) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Hash] options A customizable set of options. - # @option options [Integer] :page The page number. - # @option options [Integer] :per_page The number of results per page. - # @return [Array<Gitlab::ObjectifiedHash>] - def issues(project = nil, options = {}) - if project.to_s.empty? && project.to_i.zero? - get('/issues', query: options) - else - get("/projects/#{url_encode project}/issues", query: options) +class Gitlab::Client + # Defines methods related to issues. + # @see https://docs.gitlab.com/ce/api/issues.html + module Issues + # Gets a list of user's issues. + # Will return a list of project's issues if project ID passed. + # + # @example + # Gitlab.issues + # Gitlab.issues(5) + # Gitlab.issues({ per_page: 40 }) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Hash] options A customizable set of options. + # @option options [Integer] :page The page number. + # @option options [Integer] :per_page The number of results per page. + # @return [Array<Gitlab::ObjectifiedHash>] + def issues(project = nil, options = {}) + if project.to_s.empty? && project.to_i.zero? + get('/issues', query: options) + else + get("/projects/#{url_encode project}/issues", query: options) + end end - end - # Gets a single issue. - # - # @example - # Gitlab.issue(5, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @return [Gitlab::ObjectifiedHash] - def issue(project, id) - get("/projects/#{url_encode project}/issues/#{id}") - end + # Gets a single issue. + # + # @example + # Gitlab.issue(5, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @return [Gitlab::ObjectifiedHash] + def issue(project, id) + get("/projects/#{url_encode project}/issues/#{id}") + end - # Creates a new issue. - # - # @example - # Gitlab.create_issue(5, 'New issue') - # Gitlab.create_issue(5, 'New issue', { description: 'This is a new issue', assignee_id: 42 }) - # - # @param [Integer, String] project The ID or name of a project. - # @param [String] title The title of an issue. - # @param [Hash] options A customizable set of options. - # @option options [String] :description The description of an issue. - # @option options [Integer] :assignee_id The ID of a user to assign issue. - # @option options [Integer] :milestone_id The ID of a milestone to assign issue. - # @option options [String] :labels Comma-separated label names for an issue. - # @return [Gitlab::ObjectifiedHash] Information about created issue. - def create_issue(project, title, options = {}) - body = { title: title }.merge(options) - post("/projects/#{url_encode project}/issues", body: body) - end + # Creates a new issue. + # + # @example + # Gitlab.create_issue(5, 'New issue') + # Gitlab.create_issue(5, 'New issue', { description: 'This is a new issue', assignee_id: 42 }) + # + # @param [Integer, String] project The ID or name of a project. + # @param [String] title The title of an issue. + # @param [Hash] options A customizable set of options. + # @option options [String] :description The description of an issue. + # @option options [Integer] :assignee_id The ID of a user to assign issue. + # @option options [Integer] :milestone_id The ID of a milestone to assign issue. + # @option options [String] :labels Comma-separated label names for an issue. + # @return [Gitlab::ObjectifiedHash] Information about created issue. + def create_issue(project, title, options = {}) + body = { title: title }.merge(options) + post("/projects/#{url_encode project}/issues", body: body) + end - # Updates an issue. - # - # @example - # Gitlab.edit_issue(6, 1, { title: 'Updated title' }) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @param [Hash] options A customizable set of options. - # @option options [String] :title The title of an issue. - # @option options [String] :description The description of an issue. - # @option options [Integer] :assignee_id The ID of a user to assign issue. - # @option options [Integer] :milestone_id The ID of a milestone to assign issue. - # @option options [String] :labels Comma-separated label names for an issue. - # @option options [String] :state_event The state event of an issue ('close' or 'reopen'). - # @return [Gitlab::ObjectifiedHash] Information about updated issue. - def edit_issue(project, id, options = {}) - put("/projects/#{url_encode project}/issues/#{id}", body: options) - end + # Updates an issue. + # + # @example + # Gitlab.edit_issue(6, 1, { title: 'Updated title' }) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @param [Hash] options A customizable set of options. + # @option options [String] :title The title of an issue. + # @option options [String] :description The description of an issue. + # @option options [Integer] :assignee_id The ID of a user to assign issue. + # @option options [Integer] :milestone_id The ID of a milestone to assign issue. + # @option options [String] :labels Comma-separated label names for an issue. + # @option options [String] :state_event The state event of an issue ('close' or 'reopen'). + # @return [Gitlab::ObjectifiedHash] Information about updated issue. + def edit_issue(project, id, options = {}) + put("/projects/#{url_encode project}/issues/#{id}", body: options) + end - # Closes an issue. - # - # @example - # Gitlab.close_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @return [Gitlab::ObjectifiedHash] Information about closed issue. - def close_issue(project, id) - put("/projects/#{url_encode project}/issues/#{id}", body: { state_event: 'close' }) - end + # Closes an issue. + # + # @example + # Gitlab.close_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @return [Gitlab::ObjectifiedHash] Information about closed issue. + def close_issue(project, id) + put("/projects/#{url_encode project}/issues/#{id}", body: { state_event: 'close' }) + end - # Reopens an issue. - # - # @example - # Gitlab.reopen_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @return [Gitlab::ObjectifiedHash] Information about reopened issue. - def reopen_issue(project, id) - put("/projects/#{url_encode project}/issues/#{id}", body: { state_event: 'reopen' }) - end + # Reopens an issue. + # + # @example + # Gitlab.reopen_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @return [Gitlab::ObjectifiedHash] Information about reopened issue. + def reopen_issue(project, id) + put("/projects/#{url_encode project}/issues/#{id}", body: { state_event: 'reopen' }) + end - # Subscribe to an issue. - # - # @example - # Gitlab.subscribe_to_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @return [Gitlab::ObjectifiedHash] Information about subscribed issue. - def subscribe_to_issue(project, id) - post("/projects/#{url_encode project}/issues/#{id}/subscribe") - end + # Subscribe to an issue. + # + # @example + # Gitlab.subscribe_to_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @return [Gitlab::ObjectifiedHash] Information about subscribed issue. + def subscribe_to_issue(project, id) + post("/projects/#{url_encode project}/issues/#{id}/subscribe") + end - # Unsubscribe from an issue. - # - # @example - # Gitlab.unsubscribe_from_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @return [Gitlab::ObjectifiedHash] Information about unsubscribed issue. - def unsubscribe_from_issue(project, id) - post("/projects/#{url_encode project}/issues/#{id}/unsubscribe") - end + # Unsubscribe from an issue. + # + # @example + # Gitlab.unsubscribe_from_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @return [Gitlab::ObjectifiedHash] Information about unsubscribed issue. + def unsubscribe_from_issue(project, id) + post("/projects/#{url_encode project}/issues/#{id}/unsubscribe") + end - # Deletes an issue. - # Only for admins and project owners - # - # @example - # Gitlab.delete_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @return [Gitlab::ObjectifiedHash] Information about deleted issue. - def delete_issue(project, id) - delete("/projects/#{url_encode project}/issues/#{id}") - end + # Deletes an issue. + # Only for admins and project owners + # + # @example + # Gitlab.delete_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @return [Gitlab::ObjectifiedHash] Information about deleted issue. + def delete_issue(project, id) + delete("/projects/#{url_encode project}/issues/#{id}") + end - # Move an issue. - # - # @example - # Gitlab.move_issue(3, 42, { to_project_id: '4' }) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @option options [String] :to_project_id The ID of the new project. - # @return [Gitlab::ObjectifiedHash] Information about moved issue. - def move_issue(project, id, options = {}) - post("/projects/#{url_encode project}/issues/#{id}/move", body: options) - end + # Move an issue. + # + # @example + # Gitlab.move_issue(3, 42, { to_project_id: '4' }) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @option options [String] :to_project_id The ID of the new project. + # @return [Gitlab::ObjectifiedHash] Information about moved issue. + def move_issue(project, id, options = {}) + post("/projects/#{url_encode project}/issues/#{id}/move", body: options) + end - # Sets an estimated time of work for an issue. - # - # @example - # Gitlab.estimate_time_of_issue(3, 42, '3h30m') - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @param [String] duration The duration in human format. e.g: 3h30m - def estimate_time_of_issue(project, id, duration) - post("/projects/#{url_encode project}/issues/#{id}/time_estimate", body: { duration: url_encode(duration) }) - end + # Sets an estimated time of work for an issue. + # + # @example + # Gitlab.estimate_time_of_issue(3, 42, '3h30m') + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @param [String] duration The duration in human format. e.g: 3h30m + def estimate_time_of_issue(project, id, duration) + post("/projects/#{url_encode project}/issues/#{id}/time_estimate", body: { duration: url_encode(duration) }) + end - # Resets the estimated time for an issue to 0 seconds. - # - # @example - # Gitlab.reset_time_estimate_of_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - def reset_time_estimate_of_issue(project, id) - post("/projects/#{url_encode project}/issues/#{id}/reset_time_estimate") - end + # Resets the estimated time for an issue to 0 seconds. + # + # @example + # Gitlab.reset_time_estimate_of_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + def reset_time_estimate_of_issue(project, id) + post("/projects/#{url_encode project}/issues/#{id}/reset_time_estimate") + end - # Adds spent time for an issue - # - # @example - # Gitlab.estimate_time_of_issue(3, 42, '3h30m') - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - # @param [String] duration The time spent in human format. e.g: 3h30m - def add_time_spent_on_issue(project, id, duration) - post("/projects/#{url_encode project}/issues/#{id}/add_spent_time", body: { duration: url_encode(duration) }) - end + # Adds spent time for an issue + # + # @example + # Gitlab.estimate_time_of_issue(3, 42, '3h30m') + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + # @param [String] duration The time spent in human format. e.g: 3h30m + def add_time_spent_on_issue(project, id, duration) + post("/projects/#{url_encode project}/issues/#{id}/add_spent_time", body: { duration: url_encode(duration) }) + end - # Resets the total spent time for this issue to 0 seconds. - # - # @example - # Gitlab.reset_time_spent_on_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - def reset_time_spent_on_issue(project, id) - post("/projects/#{url_encode project}/issues/#{id}/reset_spent_time") - end + # Resets the total spent time for this issue to 0 seconds. + # + # @example + # Gitlab.reset_time_spent_on_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + def reset_time_spent_on_issue(project, id) + post("/projects/#{url_encode project}/issues/#{id}/reset_spent_time") + end - # Get time tracking stats for an issue - # - # @example - # @gitlab.time_stats_for_issue(3, 42) - # - # @param [Integer, String] project The ID or name of a project. - # @param [Integer] id The ID of an issue. - def time_stats_for_issue(project, id) - get("/projects/#{url_encode project}/issues/#{id}/time_stats") + # Get time tracking stats for an issue + # + # @example + # @gitlab.time_stats_for_issue(3, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of an issue. + def time_stats_for_issue(project, id) + get("/projects/#{url_encode project}/issues/#{id}/time_stats") + end end end