module Octokit class Client # Methods for the Issues Milestones API # # @see https://developer.github.com/v3/issues/milestones/ module Milestones # List milestones for a repository # # @param repository [String, Repository, Hash] A GitHub repository. # @param options [Hash] A customizable set of options. # @option options [Integer] :milestone Milestone number. # @option options [String] :state (open) State: open or closed. # @option options [String] :sort (created) Sort: created, updated, or comments. # @option options [String] :direction (desc) Direction: asc or desc. # @return [Array] A list of milestones for a repository. # @see https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository # @example List milestones for a repository # Octokit.list_milestones("octokit/octokit.rb") def list_milestones(repository, options = {}) paginate "repos/#{Repository.new(repository)}/milestones", options end alias :milestones :list_milestones # Get a single milestone for a repository # # @param repository [String, Repository, Hash] A GitHub repository. # @param options [Hash] A customizable set of options. # @option options [Integer] :milestone Milestone number. # @option options [String] :state (open) State: open or closed. # @option options [String] :sort (created) Sort: created, updated, or comments. # @option options [String] :direction (desc) Direction: asc or desc. # @return [Sawyer::Resource] A single milestone from a repository. # @see https://developer.github.com/v3/issues/milestones/#get-a-single-milestone # @example Get a single milestone for a repository # Octokit.milestone("octokit/octokit.rb", 1) def milestone(repository, number, options = {}) get "repos/#{Repository.new(repository)}/milestones/#{number}", options end # Create a milestone for a repository # # @param repository [String, Repository, Hash] A GitHub repository. # @param title [String] A unique title. # @param options [Hash] A customizable set of options. # @option options [String] :state (open) State: open or closed. # @option options [String] :description A meaningful description # @option options [Time] :due_on Set if the milestone has a due date # @return [Sawyer::Resource] A single milestone object # @see https://developer.github.com/v3/issues/milestones/#create-a-milestone # @example Create a milestone for a repository # Octokit.create_milestone("octokit/octokit.rb", "0.7.0", {:description => 'Add support for v3 of Github API'}) def create_milestone(repository, title, options = {}) post "repos/#{Repository.new(repository)}/milestones", options.merge({:title => title}) end # Update a milestone for a repository # # @param repository [String, Repository, Hash] A GitHub repository. # @param number [String, Integer] ID of the milestone # @param options [Hash] A customizable set of options. # @option options [String] :title A unique title. # @option options [String] :state (open) State: open or closed. # @option options [String] :description A meaningful description # @option options [Time] :due_on Set if the milestone has a due date # @return [Sawyer::Resource] A single milestone object # @see https://developer.github.com/v3/issues/milestones/#update-a-milestone # @example Update a milestone for a repository # Octokit.update_milestone("octokit/octokit.rb", 1, {:description => 'Add support for v3 of Github API'}) def update_milestone(repository, number, options = {}) patch "repos/#{Repository.new(repository)}/milestones/#{number}", options end alias :edit_milestone :update_milestone # Delete a single milestone for a repository # # @param repository [String, Repository, Hash] A GitHub repository. # @param options [Hash] A customizable set of options. # @option options [Integer] :milestone Milestone number. # @return [Boolean] Success # @see https://developer.github.com/v3/issues/milestones/#delete-a-milestone # @example Delete a single milestone from a repository # Octokit.delete_milestone("octokit/octokit.rb", 1) def delete_milestone(repository, number, options = {}) boolean_from_response :delete, "repos/#{Repository.new(repository)}/milestones/#{number}", options end end end end