Class: Github::Issues

Inherits:
API
  • Object
show all
Extended by:
AutoloadHelper
Defined in:
lib/github_api/issues.rb

Defined Under Namespace

Classes: Assignees, Comments, Events, Labels, Milestones

Constant Summary

VALID_ISSUE_PARAM_NAMES =
%w[
  assignee
  body
  creator
  direction
  filter
  labels
  milestone
  mentioned
  mime_type
  org
  resource
  since
  sort
  state
  title
].freeze
VALID_ISSUE_PARAM_VALUES =
{
  'filter'    => %w[ assigned created mentioned subscribed all ],
  'state'     => %w[ open closed ],
  'sort'      => %w[ created updated comments ],
  'direction' => %w[ desc asc ],
  'since'     => %r{\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z}
}

Constants included from Request

Request::METHODS, Request::METHODS_WITH_BODIES

Constants included from Connection

Connection::ALLOWED_OPTIONS

Constants included from Constants

Constants::ACCEPT, Constants::ACCEPTED_OAUTH_SCOPES, Constants::ACCEPT_CHARSET, Constants::CACHE_CONTROL, Constants::CONTENT_LENGTH, Constants::CONTENT_TYPE, Constants::DATE, Constants::ETAG, Constants::HEADER_LAST, Constants::HEADER_LINK, Constants::HEADER_NEXT, Constants::LOCATION, Constants::META_FIRST, Constants::META_LAST, Constants::META_NEXT, Constants::META_PREV, Constants::META_REL, Constants::OAUTH_SCOPES, Constants::PARAM_PAGE, Constants::PARAM_PER_PAGE, Constants::PARAM_START_PAGE, Constants::RATELIMIT_LIMIT, Constants::RATELIMIT_REMAINING, Constants::SERVER, Constants::USER_AGENT

Constants included from MimeType

MimeType::MEDIA_LOOKUP

Instance Attribute Summary

Attributes inherited from API

#current_options

Attributes included from Authorization

#scopes

Instance Method Summary (collapse)

Methods included from AutoloadHelper

autoload_all, lookup_constant, register_constant

Methods inherited from API

#api_methods_in, #append_arguments, #arguments, inherited, #initialize, #method_missing, #process_basic_auth, #set, #setup, #with, #yield_or_eval

Methods included from RateLimit

#ratelimit, #ratelimit_remaining

Methods included from Request

#delete_request, #get_request, #patch_request, #post_request, #put_request, #request

Methods included from Connection

#caching?, #clear_cache, #connection, #default_middleware, #default_options, #stack

Methods included from MimeType

#lookup_media, #parse

Methods included from Authorization

#auth_code, #authenticated?, #authentication, #authorize_url, #basic_authed?, #client, #get_token

Constructor Details

This class inherits a constructor from Github::API

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Github::API

Instance Method Details

- (Object) assignees(options = {}, &block)

Access to Issues::Assignees API



41
42
43
# File 'lib/github_api/issues.rb', line 41

def assignees(options={}, &block)
  @assignees ||= ApiFactory.new('Issues::Assignees', current_options.merge(options), &block)
end

- (Object) comments(options = {}, &block)

Access to Issues::Comments API



46
47
48
# File 'lib/github_api/issues.rb', line 46

def comments(options={}, &block)
  @comments ||= ApiFactory.new('Issues::Comments', current_options.merge(options), &block)
end

- (Object) create(*args)

Create an issue

Inputs

<tt>:title</tt> - Required string
<tt>:body</tt> - Optional string
<tt>:assignee</tt> - Optional string - Login for the user that this issue should be assigned to.
                     Only users with push access can set the assignee for new issues.
                     The assignee is silently dropped otherwise.
<tt>:milestone</tt> - Optional number - Milestone to associate this issue with.
                      Only users with push access can set the milestone for new issues.
                      The milestone is silently dropped otherwise.
<tt>:labels</tt> - Optional array of strings - Labels to associate with this issue
                   Only users with push access can set labels for new issues.
                   Labels are silently dropped otherwise.

Examples

github = Github.new :user => 'user-name', :repo => 'repo-name'
github.issues.create
  "title" => "Found a bug",
  "body" => "I'm having a problem with this.",
  "assignee" => "octocat",
  "milestone" => 1,
  "labels" => [
    "Label1",
    "Label2"
  ]


212
213
214
215
216
217
218
219
# File 'lib/github_api/issues.rb', line 212

def create(*args)
  arguments(args, :required => [:user, :repo]) do
    sift VALID_ISSUE_PARAM_NAMES
    assert_required %w[ title ]
  end

  post_request("/repos/#{user}/#{repo}/issues", arguments.params)
end

- (Object) edit(*args)

Edit an issue

Inputs

<tt>:title</tt> - Optional string
<tt>:body</tt> - Optional string
<tt>:assignee</tt> - Optional string - Login for the user that this issue should be assigned to.
<tt>:state</tt> - Optional string - State of the issue:<tt>open</tt> or <tt>closed</tt>
<tt>:milestone</tt> - Optional number - Milestone to associate this issue with
<tt>:labels</tt> - Optional array of strings - Labels to associate with this issue. Pass one or more Labels to replace the set of Labels on this Issue. Send an empty array ([]) to clear all Labels from the Issue.

Examples

github = Github.new
github.issues.edit 'user-name', 'repo-name', 'number'
  "title" => "Found a bug",
  "body" => "I'm having a problem with this.",
  "assignee" => "octocat",
  "milestone" => 1,
  "labels" => [
    "Label1",
    "Label2"
  ]


243
244
245
246
247
248
249
250
# File 'lib/github_api/issues.rb', line 243

def edit(*args)
  arguments(args, :required => [:user, :repo, :number]) do
    sift VALID_ISSUE_PARAM_NAMES
  end
  params = arguments.params

  patch_request("/repos/#{user}/#{repo}/issues/#{number}", params)
end

- (Object) events(options = {}, &block)

Access to Issues::Events API



51
52
53
# File 'lib/github_api/issues.rb', line 51

def events(options={}, &block)
  @events ||= ApiFactory.new('Issues::Events', current_options.merge(options), &block)
end

- (Object) get(*args) Also known as: find

Get a single issue

Examples

github = Github.new
github.issues.get 'user-name', 'repo-name', 'number'


179
180
181
182
183
# File 'lib/github_api/issues.rb', line 179

def get(*args)
  arguments(args, :required => [:user, :repo, :number])

  get_request("/repos/#{user}/#{repo}/issues/#{number}", arguments.params)
end

- (Object) labels(options = {}, &block)

Access to Issues::Comments API



56
57
58
# File 'lib/github_api/issues.rb', line 56

def labels(options={}, &block)
  @labels ||= ApiFactory.new('Issues::Labels', current_options.merge(options), &block)
end

- (Object) list(*args) Also known as: all

List your issues

List all issues across all the authenticated user’s visible repositories including owned repositories, member repositories, and organization repositories.

Example

github = Github.new :oauth_token => '...'
github.issues.list

List all issues across owned and member repositories for the authenticated user.

Example

github = Github.new :oauth_token => '...'
github.issues.list :user

List all issues for a given organization for the authenticated user.

Example

github = Github.new :oauth_token => '...'
github.issues.list :org => 'org-name'

List issues for a repository

Example

github = Github.new
github.issues.list :user => 'user-name', :repo => 'repo-name'

Parameters

:filter

* <tt>assigned</tt>   Issues assigned to you (default)
* <tt>created</tt>    Issues created by you 
* <tt>mentioned</tt>  Issues mentioning you 
* <tt>subscribed</tt> Issues you've subscribed to updates for 
* <tt>all</tt>        All issues the user can see

:milestone

* Integer Milestone number
* <tt>none</tt> for Issues with no Milestone.
* <tt>*</tt>    for Issues with any Milestone

:state - open, closed, default: open :labels - String list of comma separated Label names.

Example: bug,ui,@high

:assignee

* String User login
* <tt>none</tt> for Issues with no assigned User.
* <tt>*</tt>    for Issues with any assigned User.

:creator String User login :mentioned String User login :sort - created, updated, comments,

default: <tt>created</tt>

:direction - asc, desc, default: desc :since - Optional string of a timestamp in ISO 8601

format: YYYY-MM-DDTHH:MM:SSZ

Examples

github = Github.new :oauth_token => '...'
github.issues.list :since => '2011-04-12T12:12:12Z',
  :filter => 'created',
  :state  => 'open',
  :labels => "bug,ui,bla",
  :sort   => 'comments',
  :direction => 'asc'

github = Github.new :user => 'user-name', :repo => 'repo-name'
github.issues.list_repo :milestone => 1,
  :state  => 'open',
  :assignee => '*',
  :mentioned => 'octocat',
  :labels => "bug,ui,bla",
  :sort   => 'comments',
  :direction => 'asc'


138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/github_api/issues.rb', line 138

def list(*args)
  params = arguments(args) do
    assert_values VALID_ISSUE_PARAM_VALUES
  end.params

  response = if (org = params.delete('org'))
    get_request("/orgs/#{org}/issues", params)

  elsif (user_name = params.delete('user')) &&
        (repo_name = params.delete('repo'))

    list_repo user_name, repo_name, params
  elsif args.include? :user
    get_request("/user/issues", params)
  else
    get_request("/issues", params)
  end
  return response unless block_given?
  response.each { |el| yield el }
end

- (Object) milestones(options = {}, &block)

Access to Issues::Comments API



61
62
63
# File 'lib/github_api/issues.rb', line 61

def milestones(options={}, &block)
  @milestones ||= ApiFactory.new('Issues::Milestones', current_options.merge(options), &block)
end