# encoding: utf-8 module Github class Issues::Labels < API VALID_LABEL_INPUTS = %w[ name color ].freeze # List all labels for a repository # # = Examples # github = Github.new user: 'user-name', repo: 'repo-name' # github.issues.labels.list # github.issues.labels.list { |label| ... } # # Get labels for every issue in a milestone # # = Examples # github = Github.new # github.issues.labels.list 'user-name', 'repo-name', milestone_id: 'milestone-id' # # List labels on an issue # # = Examples # @github = Github.new # @github.issues.labels.list 'user-name', 'repo-name', issue_id: 'issue-id' # def list(user_name, repo_name, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo normalize! params response = if (milestone_id = params.delete('milestone_id')) get_request("/repos/#{user}/#{repo}/milestones/#{milestone_id}/labels", params) elsif (issue_id = params.delete('issue_id')) get_request("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params) else get_request("/repos/#{user}/#{repo}/labels", params) end return response unless block_given? response.each { |el| yield el } end alias :all :list # Get a single label # # = Examples # github = Github.new # github.issues.labels.find 'user-name', 'repo-name', 'label-name' # def get(user_name, repo_name, label_name, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo, label_name normalize! params get_request("/repos/#{user}/#{repo}/labels/#{label_name}", params) end alias :find :get # Create a label # # = Inputs # :name - Required string # :color - Required string - 6 character hex code, without leading # # # = Examples # github = Github.new user: 'user-name', repo: 'repo-name' # github.issues.labels.create name: 'API', color: 'FFFFFF' # def create(user_name, repo_name, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo normalize! params filter! VALID_LABEL_INPUTS, params assert_required_keys(VALID_LABEL_INPUTS, params) post_request("/repos/#{user}/#{repo}/labels", params) end # Update a label # # = Inputs # :name - Required string # :color - Required string-6 character hex code, without leading # # # = Examples # @github = Github.new # @github.issues.labels.update 'user-name', 'repo-name', 'label-name', # name: 'API', color: "FFFFFF" # def update(user_name, repo_name, label_name, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo, label_name normalize! params filter! VALID_LABEL_INPUTS, params assert_required_keys(VALID_LABEL_INPUTS, params) patch_request("/repos/#{user}/#{repo}/labels/#{label_name}", params) end alias :edit :update # Delete a label # # = Examples # github = Github.new # github.issues.labels.delete 'user-name', 'repo-name', 'label-name' # def delete(user_name, repo_name, label_name, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo assert_presence_of label_name normalize! params delete_request("/repos/#{user}/#{repo}/labels/#{label_name}", params) end # Add labels to an issue # # = Examples # github = Github.new # github.issues.labels.add 'user-name', 'repo-name', 'issue-id', 'label1', 'label2', ... # def add(user_name, repo_name, issue_id, *args) params = args.extract_options! params['data'] = args unless args.empty? set :user => user_name, :repo => repo_name assert_presence_of user, repo, issue_id normalize! params post_request("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params) end alias :<< :add # Remove a label from an issue # # = Examples # github = Github.new # github.issues.labels.remove 'user-name', 'repo-name', 'issue-id', # lable_name: 'label-name' # # Remove all labels from an issue # = Examples # github = Github.new # github.issues.labels.remove 'user-name', 'repo-name', 'issue-id' # def remove(user_name, repo_name, issue_id, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo, issue_id normalize! params if (label_name = params.delete('label_name')) delete_request("/repos/#{user}/#{repo}/issues/#{issue_id}/labels/#{label_name}", params) else delete_request("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params) end end # Replace all labels for an issue # # Sending an empty array ([]) will remove all Labels from the Issue. # # = Examples # github = Github.new # github.issues.labels.replace 'user-name', 'repo-name', 'issue-id', 'label1', 'label2', ... # def replace(user_name, repo_name, issue_id, *args) params = args.extract_options! params['data'] = args unless args.empty? set :user => user_name, :repo => repo_name assert_presence_of user, repo, issue_id normalize! params put_request("/repos/#{user}/#{repo}/issues/#{issue_id}/labels", params) end end # Issues::Labels end # Github