lib/gitlab/client/issues.rb in gitlab-3.7.0 vs lib/gitlab/client/issues.rb in gitlab-4.0.0

- old
+ new

@@ -1,113 +1,137 @@ class Gitlab::Client # Defines methods related to issues. - # @see https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md + # @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] project The ID of a project. + # @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_i.zero? + if project.to_s.empty? && project.to_i.zero? get("/issues", query: options) else - get("/projects/#{project}/issues", query: options) + get("/projects/#{url_encode project}/issues", query: options) end end # Gets a single issue. # # @example # Gitlab.issue(5, 42) # - # @param [Integer] project The ID of a project. + # @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/#{project}/issues/#{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] project The ID of a project. + # @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/#{project}/issues", body: body) + post("/projects/#{url_encode project}/issues", body: body) end # Updates an issue. # # @example # Gitlab.edit_issue(6, 1, { title: 'Updated title' }) # - # @param [Integer] project The ID of a project. + # @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/#{project}/issues/#{id}", body: options) + put("/projects/#{url_encode project}/issues/#{id}", body: options) end # Closes an issue. # # @example # Gitlab.close_issue(3, 42) # - # @param [Integer] project The ID of a project. + # @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/#{project}/issues/#{id}", body: { state_event: 'close' }) + put("/projects/#{url_encode project}/issues/#{id}", body: { state_event: 'close' }) end # Reopens an issue. # # @example # Gitlab.reopen_issue(3, 42) # - # @param [Integer] project The ID of a project. + # @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/#{project}/issues/#{id}", body: { state_event: 'reopen' }) + 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 + + # 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] project The ID of a project. + # @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/#{project}/issues/#{id}") + delete("/projects/#{url_encode project}/issues/#{id}") end end end