# encoding: utf-8
module Github
class Orgs::Teams < API
# All actions against teams require at a minimum an authenticated user
# who is a member of the owner’s team in the :org being managed.
# Api calls that require explicit permissions are noted.
VALID_TEAM_PARAM_NAMES = %w[ name repo_names permission ].freeze
VALID_TEAM_PARAM_VALUES = {
'permission' => %w[ pull push admin ].freeze
}
# List teams
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.list 'org-name'
#
def list(*args)
arguments(args, :required => [:org_name])
response = get_request("/orgs/#{org_name}/teams", arguments.params)
return response unless block_given?
response.each { |el| yield el }
end
alias :all :list
# Get a team
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.get 'team-id'
#
def get(*args)
arguments(args, :required => [:team_id])
get_request("/teams/#{team_id}", arguments.params)
end
alias :find :get
# Create a team
#
# In order to create a team, the authenticated user must be an owner of:org.
# = Inputs
# :name - Required string
# :repo_names - Optional array of strings
# :permission - Optional string
# * pull - team members can pull, but not push or administor this repositories. Default
# * push - team members can pull and push, but not administor this repositores.
# * admin - team members can pull, push and administor these repositories.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.create 'org-name',
# "name" => "new team",
# "permission" => "push",
# "repo_names" => [
# "github/dotfiles"
# ]
#
def create(*args)
arguments(args, :required => [:org_name]) do
sift VALID_TEAM_PARAM_NAMES
assert_values VALID_TEAM_PARAM_VALUES
assert_required %w[name]
end
post_request("/orgs/#{org_name}/teams", arguments.params)
end
# Edit a team
# In order to edit a team, the authenticated user must be an owner of the org that the team is associated with.
#
# = Inputs
# :name - Required string
# :permission - Optional string
# * pull - team members can pull, but not push or administor this repositories. Default
# * push - team members can pull and push, but not administor this repositores.
# * admin - team members can pull, push and administor these repositories.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.edit 'team-id',
# "name" => "new team name",
# "permission" => "push"
#
def edit(*args)
arguments(args, :required => [:team_id]) do
sift VALID_TEAM_PARAM_NAMES
assert_values VALID_TEAM_PARAM_VALUES
assert_required %w[name]
end
patch_request("/teams/#{team_id}", arguments.params)
end
# Delete a team
# In order to delete a team, the authenticated user must be an owner of the org that the team is associated with
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.delete 'team-id'
#
def delete(*args)
arguments(args, :required => [:team_id])
delete_request("/teams/#{team_id}", arguments.params)
end
alias :remove :delete
# List team members
# In order to list members in a team, the authenticated user must be a member of the team.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.list_members 'team-id'
# github.orgs.teams.list_members 'team-id' { |member| ... }
#
def list_members(*args)
arguments(args, :required => [:team_id])
response = get_request("/teams/#{team_id}/members", arguments.params)
return response unless block_given?
response.each { |el| yield el }
end
alias :all_members :list_members
# Check if a user is a member of a team
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.team_member? 'team-id', 'user-name'
#
def team_member?(*args)
arguments(args, :required => [:team_id, :user])
response = get_request("/teams/#{team_id}/members/#{user}", arguments.params)
response.status == 204
rescue Github::Error::NotFound
false
end
# Add a team member
# In order to add a user to a team, the authenticated user must have ‘admin’ permissions to the team or be an owner of the org that the team is associated with.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.add_member 'team-id', 'user-name'
#
def add_member(*args)
arguments(args, :required => [:team_id, :user])
put_request("/teams/#{team_id}/members/#{user}", arguments.params)
end
alias :add_team_member :add_member
# Remove a team member
#
# In order to remove a user from a team, the authenticated user must
# have ‘admin’ permissions to the team or be an owner of the org that
# the team is associated with.
# note: This does not delete the user, it just remove them from the team.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.remove_member 'team-id', 'user-name'
#
def remove_member(*args)
arguments(args, :required => [:team_id, :user])
delete_request("/teams/#{team_id}/members/#{user}", arguments.params)
end
alias :remove_team_member :remove_member
# List team repositories
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.list_repos 'team-id'
#
def list_repos(*args)
arguments(args, :required => [:team_id])
response = get_request("/teams/#{team_id}/repos", arguments.params)
return response unless block_given?
response.each { |el| yield el }
end
alias :repos :list_repos
# Check if a repository belongs to a team
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.team_repo? 'team-id', 'user-name', 'repo-name'
#
def team_repo?(*args)
arguments(args, :required => [:team_id, :user, :repo])
response = get_request("/teams/#{team_id}/repos/#{user}/#{repo}", arguments.params)
response.status == 204
rescue Github::Error::NotFound
false
end
alias :team_repository? :team_repo?
# Add a team repository
#
# In order to add a repo to a team, the authenticated user must be
# an owner of the org that the team is associated with. Also, the repo
# must be owned by the organization, or a direct for of a repo owned
# by the organization.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.add_repo 'team-id', 'user-name', 'repo-name'
#
def add_repo(*args)
arguments(args, :required => [:team_id, :user, :repo])
put_request("/teams/#{team_id}/repos/#{user}/#{repo}", arguments.params)
end
alias :add_repository :add_repo
# Remove a team repository
#
# In order to add a repo to a team, the authenticated user must be
# an owner of the org that the team is associated with.
# note: This does not delete the repo, it just removes it from the team.
#
# = Examples
# github = Github.new :oauth_token => '...'
# github.orgs.teams.remove_repo 'team-id', 'user-name', 'repo-name'
#
def remove_repo(*args)
arguments(args, :required => [:team_id, :user, :repo])
delete_request("/teams/#{team_id}/repos/#{user}/#{repo}", arguments.params)
end
alias :remove_repository :remove_repo
end # Orgs::Teams
end # Github