octodoggy 4.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/CONTRIBUTING.md +22 -0
  4. data/LICENSE.md +20 -0
  5. data/README.md +714 -0
  6. data/Rakefile +22 -0
  7. data/lib/ext/sawyer/relation.rb +10 -0
  8. data/lib/octokit.rb +59 -0
  9. data/lib/octokit/arguments.rb +14 -0
  10. data/lib/octokit/authentication.rb +82 -0
  11. data/lib/octokit/client.rb +238 -0
  12. data/lib/octokit/client/authorizations.rb +244 -0
  13. data/lib/octokit/client/commit_comments.rb +95 -0
  14. data/lib/octokit/client/commits.rb +239 -0
  15. data/lib/octokit/client/contents.rb +162 -0
  16. data/lib/octokit/client/deployments.rb +62 -0
  17. data/lib/octokit/client/downloads.rb +50 -0
  18. data/lib/octokit/client/emojis.rb +18 -0
  19. data/lib/octokit/client/events.rb +151 -0
  20. data/lib/octokit/client/feeds.rb +33 -0
  21. data/lib/octokit/client/gists.rb +233 -0
  22. data/lib/octokit/client/gitignore.rb +43 -0
  23. data/lib/octokit/client/hooks.rb +297 -0
  24. data/lib/octokit/client/integrations.rb +77 -0
  25. data/lib/octokit/client/issues.rb +321 -0
  26. data/lib/octokit/client/labels.rb +156 -0
  27. data/lib/octokit/client/legacy_search.rb +42 -0
  28. data/lib/octokit/client/licenses.rb +45 -0
  29. data/lib/octokit/client/markdown.rb +27 -0
  30. data/lib/octokit/client/meta.rb +21 -0
  31. data/lib/octokit/client/milestones.rb +87 -0
  32. data/lib/octokit/client/notifications.rb +171 -0
  33. data/lib/octokit/client/objects.rb +141 -0
  34. data/lib/octokit/client/organizations.rb +768 -0
  35. data/lib/octokit/client/pages.rb +63 -0
  36. data/lib/octokit/client/projects.rb +314 -0
  37. data/lib/octokit/client/pub_sub_hubbub.rb +111 -0
  38. data/lib/octokit/client/pull_requests.rb +301 -0
  39. data/lib/octokit/client/rate_limit.rb +54 -0
  40. data/lib/octokit/client/reactions.rb +158 -0
  41. data/lib/octokit/client/refs.rb +118 -0
  42. data/lib/octokit/client/releases.rb +163 -0
  43. data/lib/octokit/client/repositories.rb +654 -0
  44. data/lib/octokit/client/repository_invitations.rb +103 -0
  45. data/lib/octokit/client/reviews.rb +174 -0
  46. data/lib/octokit/client/say.rb +19 -0
  47. data/lib/octokit/client/search.rb +76 -0
  48. data/lib/octokit/client/service_status.rb +38 -0
  49. data/lib/octokit/client/source_import.rb +161 -0
  50. data/lib/octokit/client/stats.rb +105 -0
  51. data/lib/octokit/client/statuses.rb +47 -0
  52. data/lib/octokit/client/traffic.rb +69 -0
  53. data/lib/octokit/client/users.rb +354 -0
  54. data/lib/octokit/configurable.rb +147 -0
  55. data/lib/octokit/connection.rb +199 -0
  56. data/lib/octokit/default.rb +166 -0
  57. data/lib/octokit/enterprise_admin_client.rb +40 -0
  58. data/lib/octokit/enterprise_admin_client/admin_stats.rb +120 -0
  59. data/lib/octokit/enterprise_admin_client/license.rb +18 -0
  60. data/lib/octokit/enterprise_admin_client/orgs.rb +27 -0
  61. data/lib/octokit/enterprise_admin_client/search_indexing.rb +83 -0
  62. data/lib/octokit/enterprise_admin_client/users.rb +128 -0
  63. data/lib/octokit/enterprise_management_console_client.rb +50 -0
  64. data/lib/octokit/enterprise_management_console_client/management_console.rb +176 -0
  65. data/lib/octokit/error.rb +286 -0
  66. data/lib/octokit/gist.rb +36 -0
  67. data/lib/octokit/middleware/follow_redirects.rb +131 -0
  68. data/lib/octokit/organization.rb +17 -0
  69. data/lib/octokit/preview.rb +38 -0
  70. data/lib/octokit/rate_limit.rb +33 -0
  71. data/lib/octokit/repo_arguments.rb +19 -0
  72. data/lib/octokit/repository.rb +93 -0
  73. data/lib/octokit/response/feed_parser.rb +21 -0
  74. data/lib/octokit/response/raise_error.rb +21 -0
  75. data/lib/octokit/user.rb +19 -0
  76. data/lib/octokit/version.rb +17 -0
  77. data/lib/octokit/warnable.rb +17 -0
  78. data/octokit.gemspec +22 -0
  79. metadata +160 -0
@@ -0,0 +1,118 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for References for Git Data API
5
+ #
6
+ # @see https://developer.github.com/v3/git/refs/
7
+ module Refs
8
+
9
+ # List all refs for a given user and repo
10
+ #
11
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
12
+ # @param namespace [String] The ref namespace, e.g. <tt>tag</tt> or <tt>heads</tt>
13
+ # @return [Array<Sawyer::Resource>] A list of references matching the repo and the namespace
14
+ # @see https://developer.github.com/v3/git/refs/#get-all-references
15
+ # @example Fetch all refs for sferik/rails_admin
16
+ # Octokit.refs("sferik/rails_admin")
17
+ def refs(repo, namespace = nil, options = {})
18
+ path = "#{Repository.path repo}/git/refs"
19
+ path += "/#{namespace}" unless namespace.nil?
20
+ paginate path, options
21
+ end
22
+ alias :list_refs :refs
23
+ alias :references :refs
24
+ alias :list_references :refs
25
+
26
+ # Fetch a given reference
27
+ #
28
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
29
+ # @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
30
+ # @return [Sawyer::Resource] The reference matching the given repo and the ref id
31
+ # @see https://developer.github.com/v3/git/refs/#get-a-reference
32
+ # @example Fetch tags/v0.0.3 for sferik/rails_admin
33
+ # Octokit.ref("sferik/rails_admin","tags/v0.0.3")
34
+ def ref(repo, ref, options = {})
35
+ get "#{Repository.path repo}/git/refs/#{ref}", options
36
+ end
37
+ alias :reference :ref
38
+
39
+ # Create a reference
40
+ #
41
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
42
+ # @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
43
+ # @param sha [String] A SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
44
+ # @return [Array<Sawyer::Resource>] The list of references, already containing the new one
45
+ # @see https://developer.github.com/v3/git/refs/#create-a-reference
46
+ # @example Create refs/heads/master for octocat/Hello-World with sha 827efc6d56897b048c772eb4087f854f46256132
47
+ # Octokit.create_ref("octocat/Hello-World", "heads/master", "827efc6d56897b048c772eb4087f854f46256132")
48
+ def create_ref(repo, ref, sha, options = {})
49
+ ref = "refs/#{ref}" unless ref =~ %r{refs/}
50
+ parameters = {
51
+ :ref => ref,
52
+ :sha => sha
53
+ }
54
+ post "#{Repository.path repo}/git/refs", options.merge(parameters)
55
+ end
56
+ alias :create_reference :create_ref
57
+
58
+ # Update a reference
59
+ #
60
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
61
+ # @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
62
+ # @param sha [String] A SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
63
+ # @param force [Boolean] A flag indicating one wants to force the update to make sure the update is a fast-forward update.
64
+ # @return [Array<Sawyer::Resource>] The list of references updated
65
+ # @see https://developer.github.com/v3/git/refs/#update-a-reference
66
+ # @example Force update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd
67
+ # Octokit.update_ref("octocat/Hello-World", "heads/sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd")
68
+ def update_ref(repo, ref, sha, force = true, options = {})
69
+ parameters = {
70
+ :sha => sha,
71
+ :force => force
72
+ }
73
+ patch "#{Repository.path repo}/git/refs/#{ref}", options.merge(parameters)
74
+ end
75
+ alias :update_reference :update_ref
76
+
77
+ # Update a branch
78
+ #
79
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
80
+ # @param branch [String] The ref, e.g. <tt>feature/new-shiny</tt>
81
+ # @param sha [String] A SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
82
+ # @param force [Boolean] A flag indicating one wants to force the update to make sure the update is a fast-forward update.
83
+ # @return [Array<Sawyer::Resource>] The list of references updated
84
+ # @see https://developer.github.com/v3/git/refs/#update-a-reference
85
+ # @example Force update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd
86
+ # Octokit.update_ref("octocat/Hello-World","sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd")
87
+ def update_branch(repo, branch, sha, force = true, options = {})
88
+ update_ref repo, "heads/#{branch}", sha, force, options
89
+ end
90
+
91
+ # Delete a single branch
92
+ #
93
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
94
+ # @param branch [String] The branch, e.g. <tt>fix-refs</tt>
95
+ # @return [Boolean] Success
96
+ # @see https://developer.github.com/v3/git/refs/#delete-a-reference
97
+ # @example Delete uritemplate for sigmavirus24/github3.py
98
+ # Octokit.delete_branch("sigmavirus24/github3.py", "uritemplate")
99
+ def delete_branch(repo, branch, options = {})
100
+ delete_ref repo, "heads/#{branch}", options
101
+ end
102
+
103
+ # Delete a single reference
104
+ #
105
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
106
+ # @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
107
+ # @return [Boolean] Success
108
+ # @see https://developer.github.com/v3/git/refs/#delete-a-reference
109
+ # @example Delete tags/v0.0.3 for sferik/rails_admin
110
+ # Octokit.delete_ref("sferik/rails_admin","tags/v0.0.3")
111
+ def delete_ref(repo, ref, options = {})
112
+ boolean_from_response :delete, "#{Repository.path repo}/git/refs/#{ref}", options
113
+ end
114
+ alias :delete_reference :delete_ref
115
+
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,163 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Releases API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/releases/
7
+ module Releases
8
+
9
+ # List releases for a repository
10
+ #
11
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
12
+ # @return [Array<Sawyer::Resource>] A list of releases
13
+ # @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository
14
+ def releases(repo, options = {})
15
+ paginate "#{Repository.path repo}/releases", options
16
+ end
17
+ alias :list_releases :releases
18
+
19
+ # Create a release
20
+ #
21
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
22
+ # @param tag_name [String] Git tag from which to create release
23
+ # @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from.
24
+ # @option options [String] :name Name for the release
25
+ # @option options [String] :body Content for release notes
26
+ # @option options [Boolean] :draft Mark this release as a draft
27
+ # @option options [Boolean] :prerelease Mark this release as a pre-release
28
+ # @return [Sawyer::Resource] The release
29
+ # @see https://developer.github.com/v3/repos/releases/#create-a-release
30
+ def create_release(repo, tag_name, options = {})
31
+ opts = options.merge(:tag_name => tag_name)
32
+ post "#{Repository.path repo}/releases", opts
33
+ end
34
+
35
+ # Get a release
36
+ #
37
+ # @param url [String] URL for the release as returned from .releases
38
+ # @return [Sawyer::Resource] The release
39
+ # @see https://developer.github.com/v3/repos/releases/#get-a-single-release
40
+ def release(url, options = {})
41
+ get url, options
42
+ end
43
+
44
+ # Update a release
45
+ #
46
+ # @param url [String] URL for the release as returned from .releases
47
+ # @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from.
48
+ # @option options [String] :name Name for the release
49
+ # @option options [String] :body Content for release notes
50
+ # @option options [Boolean] :draft Mark this release as a draft
51
+ # @option options [Boolean] :prerelease Mark this release as a pre-release
52
+ # @return [Sawyer::Resource] The release
53
+ # @see https://developer.github.com/v3/repos/releases/#edit-a-release
54
+ def update_release(url, options = {})
55
+ patch url, options
56
+ end
57
+ alias :edit_release :update_release
58
+
59
+ # Delete a release
60
+ #
61
+ # @param url [String] URL for the release as returned from .releases
62
+ # @return [Boolean] Success or failure
63
+ # @see https://developer.github.com/v3/repos/releases/#delete-a-release
64
+ def delete_release(url, options = {})
65
+ boolean_from_response(:delete, url, options)
66
+ end
67
+
68
+ # List release assets
69
+ #
70
+ # @param release_url [String] URL for the release as returned from .releases
71
+ # @return [Array<Sawyer::Resource>] A list of release assets
72
+ # @see https://developer.github.com/v3/repos/releases/#list-assets-for-a-release
73
+ def release_assets(release_url, options = {})
74
+ paginate release(release_url).rels[:assets].href, options
75
+ end
76
+
77
+ # Upload a release asset
78
+ #
79
+ # @param release_url [String] URL for the release as returned from .releases
80
+ # @param path_or_file [String] Path to file to upload
81
+ # @option options [String] :content_type The MIME type for the file to upload
82
+ # @option options [String] :name The name for the file
83
+ # @return [Sawyer::Resource] The release asset
84
+ # @see https://developer.github.com/v3/repos/releases/#upload-a-release-asset
85
+ def upload_asset(release_url, path_or_file, options = {})
86
+ file = path_or_file.respond_to?(:read) ? path_or_file : File.new(path_or_file, "rb")
87
+ options[:content_type] ||= content_type_from_file(file)
88
+ raise Octokit::MissingContentType.new if options[:content_type].nil?
89
+ unless name = options[:name]
90
+ name = File.basename(file.path)
91
+ end
92
+ upload_url = release(release_url).rels[:upload].href_template.expand(:name => name)
93
+
94
+ request :post, upload_url, file.read, parse_query_and_convenience_headers(options)
95
+ ensure
96
+ file.close if file
97
+ end
98
+
99
+ # Get a single release asset
100
+ #
101
+ #
102
+ # @param asset_url [String] URL for the asset as returned from .release_assets
103
+ # @return [Sawyer::Resource] The release asset
104
+ # @see https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
105
+ def release_asset(asset_url, options = {})
106
+ get(asset_url, options)
107
+ end
108
+
109
+ # Update a release asset
110
+ #
111
+ # @param asset_url [String] URL for the asset as returned from .release_assets
112
+ # @option options [String] :name The name for the file
113
+ # @option options [String] :label The download text for the file
114
+ # @return [Sawyer::Resource] The release asset
115
+ # @see https://developer.github.com/v3/repos/releases/#edit-a-release-asset
116
+ def update_release_asset(asset_url, options = {})
117
+ patch(asset_url, options)
118
+ end
119
+ alias :edit_release_asset :update_release_asset
120
+
121
+ # Delete a release asset
122
+ #
123
+ # @param asset_url [String] URL for the asset as returned from .release_assets
124
+ # @return [Boolean] Success or failure
125
+ # @see https://developer.github.com/v3/repos/releases/#delete-a-release-asset
126
+ def delete_release_asset(asset_url, options = {})
127
+ boolean_from_response(:delete, asset_url, options)
128
+ end
129
+
130
+ # Get the release for a given tag
131
+ #
132
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
133
+ # @param tag_name [String] the name for a tag
134
+ # @return [Sawyer::Resource] The release
135
+ # @see https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name
136
+ def release_for_tag(repo, tag_name, options = {})
137
+ get "#{Repository.path repo}/releases/tags/#{tag_name}", options
138
+ end
139
+
140
+ # Get the latest release
141
+ #
142
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
143
+ # @return [Sawyer::Resource] The release
144
+ # @see https://developer.github.com/v3/repos/releases/#get-the-latest-release
145
+ def latest_release(repo, options = {})
146
+ get "#{Repository.path repo}/releases/latest", options
147
+ end
148
+
149
+ private
150
+
151
+ def content_type_from_file(file)
152
+ require 'mime/types'
153
+ if mime_type = MIME::Types.type_for(file.path).first
154
+ mime_type.content_type
155
+ end
156
+ rescue LoadError
157
+ msg = "Please pass content_type or install mime-types gem to guess content type from file"
158
+ raise Octokit::MissingContentType.new(msg)
159
+ end
160
+
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,654 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Repositories API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/
7
+ module Repositories
8
+
9
+ # Check if a repository exists
10
+ #
11
+ # @see https://developer.github.com/v3/repos/#get
12
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
13
+ # @return [Sawyer::Resource] if a repository exists, false otherwise
14
+ def repository?(repo, options = {})
15
+ !!repository(repo, options)
16
+ rescue Octokit::InvalidRepository
17
+ false
18
+ rescue Octokit::NotFound
19
+ false
20
+ end
21
+
22
+ # Get a single repository
23
+ #
24
+ # @see https://developer.github.com/v3/repos/#get
25
+ # @see https://developer.github.com/v3/licenses/#get-a-repositorys-license
26
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
27
+ # @return [Sawyer::Resource] Repository information
28
+ def repository(repo, options = {})
29
+ get Repository.path(repo), options
30
+ end
31
+ alias :repo :repository
32
+
33
+ # Edit a repository
34
+ #
35
+ # @see https://developer.github.com/v3/repos/#edit
36
+ # @param repo [String, Hash, Repository] A GitHub repository
37
+ # @param options [Hash] Repository information to update
38
+ # @option options [String] :name Name of the repo
39
+ # @option options [String] :description Description of the repo
40
+ # @option options [String] :homepage Home page of the repo
41
+ # @option options [String] :private `true` makes the repository private, and `false` makes it public.
42
+ # @option options [String] :has_issues `true` enables issues for this repo, `false` disables issues.
43
+ # @option options [String] :has_wiki `true` enables wiki for this repo, `false` disables wiki.
44
+ # @option options [String] :has_downloads `true` enables downloads for this repo, `false` disables downloads.
45
+ # @option options [String] :default_branch Update the default branch for this repository.
46
+ # @return [Sawyer::Resource] Repository information
47
+ def edit_repository(repo, options = {})
48
+ repo = Repository.new(repo)
49
+ options[:name] ||= repo.name
50
+ patch "repos/#{repo}", options
51
+ end
52
+ alias :edit :edit_repository
53
+ alias :update_repository :edit_repository
54
+ alias :update :edit_repository
55
+
56
+ # List user repositories
57
+ #
58
+ # If user is not supplied, repositories for the current
59
+ # authenticated user are returned.
60
+ #
61
+ # @note If the user provided is a GitHub organization, only the
62
+ # organization's public repositories will be listed. For retrieving
63
+ # organization repositories the {Organizations#organization_repositories}
64
+ # method should be used instead.
65
+ # @see https://developer.github.com/v3/repos/#list-your-repositories
66
+ # @see https://developer.github.com/v3/repos/#list-user-repositories
67
+ # @param user [Integer, String] Optional GitHub user login or id for which
68
+ # to list repos.
69
+ # @return [Array<Sawyer::Resource>] List of repositories
70
+ def repositories(user=nil, options = {})
71
+ paginate "#{User.path user}/repos", options
72
+ end
73
+ alias :list_repositories :repositories
74
+ alias :list_repos :repositories
75
+ alias :repos :repositories
76
+
77
+ # List all repositories
78
+ #
79
+ # This provides a dump of every repository, in the order that they were
80
+ # created.
81
+ #
82
+ # @see https://developer.github.com/v3/repos/#list-all-public-repositories
83
+ #
84
+ # @param options [Hash] Optional options
85
+ # @option options [Integer] :since The integer ID of the last Repository
86
+ # that you’ve seen.
87
+ # @return [Array<Sawyer::Resource>] List of repositories.
88
+ def all_repositories(options = {})
89
+ paginate 'repositories', options
90
+ end
91
+
92
+ # Star a repository
93
+ #
94
+ # @param repo [String, Hash, Repository] A GitHub repository
95
+ # @return [Boolean] `true` if successfully starred
96
+ # @see https://developer.github.com/v3/activity/starring/#star-a-repository
97
+ def star(repo, options = {})
98
+ boolean_from_response :put, "user/starred/#{Repository.new(repo)}", options
99
+ end
100
+
101
+ # Unstar a repository
102
+ #
103
+ # @param repo [String, Hash, Repository] A GitHub repository
104
+ # @return [Boolean] `true` if successfully unstarred
105
+ # @see https://developer.github.com/v3/activity/starring/#unstar-a-repository
106
+ def unstar(repo, options = {})
107
+ boolean_from_response :delete, "user/starred/#{Repository.new(repo)}", options
108
+ end
109
+
110
+ # Watch a repository
111
+ #
112
+ # @param repo [String, Hash, Repository] A GitHub repository
113
+ # @return [Boolean] `true` if successfully watched
114
+ # @deprecated Use #star instead
115
+ # @see https://developer.github.com/v3/activity/watching/#watch-a-repository-legacy
116
+ def watch(repo, options = {})
117
+ boolean_from_response :put, "user/watched/#{Repository.new(repo)}", options
118
+ end
119
+
120
+ # Unwatch a repository
121
+ #
122
+ # @param repo [String, Hash, Repository] A GitHub repository
123
+ # @return [Boolean] `true` if successfully unwatched
124
+ # @deprecated Use #unstar instead
125
+ # @see https://developer.github.com/v3/activity/watching/#stop-watching-a-repository-legacy
126
+ def unwatch(repo, options = {})
127
+ boolean_from_response :delete, "user/watched/#{Repository.new(repo)}", options
128
+ end
129
+
130
+ # Fork a repository
131
+ #
132
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
133
+ # @return [Sawyer::Resource] Repository info for the new fork
134
+ # @see https://developer.github.com/v3/repos/forks/#create-a-fork
135
+ def fork(repo, options = {})
136
+ post "#{Repository.path repo}/forks", options
137
+ end
138
+
139
+ # Create a repository for a user or organization
140
+ #
141
+ # @param name [String] Name of the new repo
142
+ # @option options [String] :description Description of the repo
143
+ # @option options [String] :homepage Home page of the repo
144
+ # @option options [String] :private `true` makes the repository private, and `false` makes it public.
145
+ # @option options [String] :has_issues `true` enables issues for this repo, `false` disables issues.
146
+ # @option options [String] :has_wiki `true` enables wiki for this repo, `false` disables wiki.
147
+ # @option options [String] :has_downloads `true` enables downloads for this repo, `false` disables downloads.
148
+ # @option options [String] :organization Short name for the org under which to create the repo.
149
+ # @option options [Integer] :team_id The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.
150
+ # @option options [Boolean] :auto_init `true` to create an initial commit with empty README. Default is `false`.
151
+ # @option options [String] :gitignore_template Desired language or platform .gitignore template to apply. Ignored if auto_init parameter is not provided.
152
+ # @return [Sawyer::Resource] Repository info for the new repository
153
+ # @see https://developer.github.com/v3/repos/#create
154
+ def create_repository(name, options = {})
155
+ opts = options.dup
156
+ organization = opts.delete :organization
157
+ opts.merge! :name => name
158
+
159
+ if organization.nil?
160
+ post 'user/repos', opts
161
+ else
162
+ post "#{Organization.path organization}/repos", opts
163
+ end
164
+ end
165
+ alias :create_repo :create_repository
166
+ alias :create :create_repository
167
+
168
+ # Delete repository
169
+ #
170
+ # Note: If OAuth is used, 'delete_repo' scope is required
171
+ #
172
+ # @see https://developer.github.com/v3/repos/#delete-a-repository
173
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
174
+ # @return [Boolean] `true` if repository was deleted
175
+ def delete_repository(repo, options = {})
176
+ boolean_from_response :delete, Repository.path(repo), options
177
+ end
178
+ alias :delete_repo :delete_repository
179
+
180
+ # Hide a public repository
181
+ #
182
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
183
+ # @return [Sawyer::Resource] Updated repository info
184
+ def set_private(repo, options = {})
185
+ # GitHub Api for setting private updated to use private attr, rather than public
186
+ update_repository repo, options.merge({ :private => true })
187
+ end
188
+
189
+ # Unhide a private repository
190
+ #
191
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
192
+ # @return [Sawyer::Resource] Updated repository info
193
+ def set_public(repo, options = {})
194
+ # GitHub Api for setting private updated to use private attr, rather than public
195
+ update_repository repo, options.merge({ :private => false })
196
+ end
197
+
198
+ # Get deploy keys on a repo
199
+ #
200
+ # Requires authenticated client.
201
+ #
202
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
203
+ # @return [Array<Sawyer::Resource>] Array of hashes representing deploy keys.
204
+ # @see https://developer.github.com/v3/repos/keys/#list-deploy-keys
205
+ # @example
206
+ # @client.deploy_keys('octokit/octokit.rb')
207
+ # @example
208
+ # @client.list_deploy_keys('octokit/octokit.rb')
209
+ def deploy_keys(repo, options = {})
210
+ paginate "#{Repository.path repo}/keys", options
211
+ end
212
+ alias :list_deploy_keys :deploy_keys
213
+
214
+ # Get a single deploy key for a repo
215
+ #
216
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
217
+ # @param id [Integer] Deploy key ID.
218
+ # @return [Sawyer::Resource] Deploy key.
219
+ # @see https://developer.github.com/v3/repos/keys/#get-a-deploy-key
220
+ # @example
221
+ # @client.deploy_key('octokit/octokit.rb', 8675309)
222
+ def deploy_key(repo, id, options={})
223
+ get "#{Repository.path repo}/keys/#{id}", options
224
+ end
225
+
226
+ # Add deploy key to a repo
227
+ #
228
+ # Requires authenticated client.
229
+ #
230
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
231
+ # @param title [String] Title reference for the deploy key.
232
+ # @param key [String] Public key.
233
+ # @return [Sawyer::Resource] Hash representing newly added key.
234
+ # @see https://developer.github.com/v3/repos/keys/#add-a-new-deploy-key
235
+ # @example
236
+ # @client.add_deploy_key('octokit/octokit.rb', 'Staging server', 'ssh-rsa AAA...')
237
+ def add_deploy_key(repo, title, key, options = {})
238
+ post "#{Repository.path repo}/keys", options.merge(:title => title, :key => key)
239
+ end
240
+
241
+ # Edit a deploy key
242
+ #
243
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
244
+ # @param id [Integer] Deploy key ID.
245
+ # @param options [Hash] Attributes to edit.
246
+ # @option title [String] Key title.
247
+ # @option key [String] Public key.
248
+ # @return [Sawyer::Resource] Updated deploy key.
249
+ # @deprecated This method is no longer supported in the API
250
+ # @see https://developer.github.com/changes/2014-02-24-finer-grained-scopes-for-ssh-keys/
251
+ # @see https://developer.github.com/v3/repos/keys/#edit-a-deploy-key
252
+ # @example Update the key for a deploy key.
253
+ # @client.edit_deploy_key('octokit/octokit.rb', 8675309, :key => 'ssh-rsa BBB...')
254
+ # @example
255
+ # @client.update_deploy_key('octokit/octokit.rb', 8675309, :title => 'Uber', :key => 'ssh-rsa BBB...'))
256
+ def edit_deploy_key(repo, id, options)
257
+ patch "#{Repository.path repo}/keys/#{id}", options
258
+ end
259
+ alias :update_deploy_key :edit_deploy_key
260
+
261
+ # Remove deploy key from a repo
262
+ #
263
+ # Requires authenticated client.
264
+ #
265
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
266
+ # @param id [Integer] Id of the deploy key to remove.
267
+ # @return [Boolean] True if key removed, false otherwise.
268
+ # @see https://developer.github.com/v3/repos/keys/#remove-a-deploy-key
269
+ # @example
270
+ # @client.remove_deploy_key('octokit/octokit.rb', 100000)
271
+ def remove_deploy_key(repo, id, options = {})
272
+ boolean_from_response :delete, "#{Repository.path repo}/keys/#{id}", options
273
+ end
274
+
275
+ # List collaborators
276
+ #
277
+ # Requires authenticated client for private repos.
278
+ #
279
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
280
+ # @option options [String] :affiliation Filters the return array by affiliation.
281
+ # Can be one of: <tt>outside</tt> or <tt>all</tt>.
282
+ # If not specified, defaults to <tt>all</tt>
283
+ # @return [Array<Sawyer::Resource>] Array of hashes representing collaborating users.
284
+ # @see https://developer.github.com/v3/repos/collaborators/#list-collaborators
285
+ # @example
286
+ # Octokit.collaborators('octokit/octokit.rb')
287
+ # @example
288
+ # Octokit.collabs('octokit/octokit.rb')
289
+ # @example
290
+ # @client.collabs('octokit/octokit.rb')
291
+ def collaborators(repo, options = {})
292
+ paginate "#{Repository.path repo}/collaborators", options
293
+ end
294
+ alias :collabs :collaborators
295
+
296
+ # Add collaborator to repo
297
+ #
298
+ # This can also be used to update the permission of an existing collaborator
299
+ #
300
+ # Requires authenticated client.
301
+ #
302
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
303
+ # @param collaborator [String] Collaborator GitHub username to add.
304
+ # @option options [String] :permission The permission to grant the collaborator.
305
+ # Only valid on organization-owned repositories.
306
+ # Can be one of: <tt>pull</tt>, <tt>push</tt>, or <tt>admin</tt>.
307
+ # If not specified, defaults to <tt>push</tt>
308
+ # @return [Boolean] True if collaborator added, false otherwise.
309
+ # @see https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator
310
+ # @example
311
+ # @client.add_collaborator('octokit/octokit.rb', 'holman')
312
+ # @example
313
+ # @client.add_collab('octokit/octokit.rb', 'holman')
314
+ # @example Add a collaborator with admin permissions
315
+ # @client.add_collaborator('octokit/octokit.rb', 'holman', permission: 'admin')
316
+ def add_collaborator(repo, collaborator, options = {})
317
+ boolean_from_response :put, "#{Repository.path repo}/collaborators/#{collaborator}", options
318
+ end
319
+ alias :add_collab :add_collaborator
320
+
321
+ # Remove collaborator from repo.
322
+ #
323
+ # Requires authenticated client.
324
+ #
325
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
326
+ # @param collaborator [String] Collaborator GitHub username to remove.
327
+ # @return [Boolean] True if collaborator removed, false otherwise.
328
+ # @see https://developer.github.com/v3/repos/collaborators/#remove-user-as-a-collaborator
329
+ # @example
330
+ # @client.remove_collaborator('octokit/octokit.rb', 'holman')
331
+ # @example
332
+ # @client.remove_collab('octokit/octokit.rb', 'holman')
333
+ def remove_collaborator(repo, collaborator, options = {})
334
+ boolean_from_response :delete, "#{Repository.path repo}/collaborators/#{collaborator}", options
335
+ end
336
+ alias :remove_collab :remove_collaborator
337
+
338
+ # Checks if a user is a collaborator for a repo.
339
+ #
340
+ # Requires authenticated client.
341
+ #
342
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
343
+ # @param collaborator [String] Collaborator GitHub username to check.
344
+ # @return [Boolean] True if user is a collaborator, false otherwise.
345
+ # @see https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator
346
+ # @example
347
+ # @client.collaborator?('octokit/octokit.rb', 'holman')
348
+ def collaborator?(repo, collaborator, options={})
349
+ boolean_from_response :get, "#{Repository.path repo}/collaborators/#{collaborator}", options
350
+ end
351
+
352
+ # Get a user's permission level for a repo.
353
+ #
354
+ # Requires authenticated client
355
+ #
356
+ # @return [Sawyer::Resource] Hash representing the user's permission level for the given repository
357
+ # @see https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level
358
+ # @example
359
+ # @client.permission_level('octokit/octokit.rb', 'lizzhale')
360
+ def permission_level(repo, collaborator, options={})
361
+ options = ensure_api_media_type(:org_memberships, options)
362
+ get "#{Repository.path repo}/collaborators/#{collaborator}/permission", options
363
+ end
364
+
365
+ # List teams for a repo
366
+ #
367
+ # Requires authenticated client that is an owner or collaborator of the repo.
368
+ #
369
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
370
+ # @return [Array<Sawyer::Resource>] Array of hashes representing teams.
371
+ # @see https://developer.github.com/v3/repos/#list-teams
372
+ # @example
373
+ # @client.repository_teams('octokit/pengwynn')
374
+ # @example
375
+ # @client.repo_teams('octokit/pengwynn')
376
+ # @example
377
+ # @client.teams('octokit/pengwynn')
378
+ def repository_teams(repo, options = {})
379
+ paginate "#{Repository.path repo}/teams", options
380
+ end
381
+ alias :repo_teams :repository_teams
382
+ alias :teams :repository_teams
383
+
384
+ # List contributors to a repo
385
+ #
386
+ # Requires authenticated client for private repos.
387
+ #
388
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
389
+ # @param anon [Boolean] Set true to include anonymous contributors.
390
+ # @return [Array<Sawyer::Resource>] Array of hashes representing users.
391
+ # @see https://developer.github.com/v3/repos/#list-contributors
392
+ # @example
393
+ # Octokit.contributors('octokit/octokit.rb', true)
394
+ # @example
395
+ # Octokit.contribs('octokit/octokit.rb')
396
+ # @example
397
+ # @client.contribs('octokit/octokit.rb')
398
+ def contributors(repo, anon = nil, options = {})
399
+ options[:anon] = 1 if anon.to_s[/1|true/]
400
+ paginate "#{Repository.path repo}/contributors", options
401
+ end
402
+ alias :contribs :contributors
403
+
404
+ # List stargazers of a repo
405
+ #
406
+ # Requires authenticated client for private repos.
407
+ #
408
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
409
+ # @return [Array<Sawyer::Resource>] Array of hashes representing users.
410
+ # @see https://developer.github.com/v3/activity/starring/#list-stargazers
411
+ # @example
412
+ # Octokit.stargazers('octokit/octokit.rb')
413
+ # @example
414
+ # @client.stargazers('octokit/octokit.rb')
415
+ def stargazers(repo, options = {})
416
+ paginate "#{Repository.path repo}/stargazers", options
417
+ end
418
+
419
+ # @deprecated Use {#stargazers} instead
420
+ #
421
+ # List watchers of repo.
422
+ #
423
+ # Requires authenticated client for private repos.
424
+ #
425
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
426
+ # @return [Array<Sawyer::Resource>] Array of hashes representing users.
427
+ # @see https://developer.github.com/v3/repos/watching/#list-watchers
428
+ # @example
429
+ # Octokit.watchers('octokit/octokit.rb')
430
+ # @example
431
+ # @client.watchers('octokit/octokit.rb')
432
+ def watchers(repo, options = {})
433
+ paginate "#{Repository.path repo}/watchers", options
434
+ end
435
+
436
+ # List forks
437
+ #
438
+ # Requires authenticated client for private repos.
439
+ #
440
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
441
+ # @return [Array<Sawyer::Resource>] Array of hashes representing repos.
442
+ # @see https://developer.github.com/v3/repos/forks/#list-forks
443
+ # @example
444
+ # Octokit.forks('octokit/octokit.rb')
445
+ # @example
446
+ # Octokit.network('octokit/octokit.rb')
447
+ # @example
448
+ # @client.forks('octokit/octokit.rb')
449
+ def forks(repo, options = {})
450
+ paginate "#{Repository.path repo}/forks", options
451
+ end
452
+ alias :network :forks
453
+
454
+ # List languages of code in the repo.
455
+ #
456
+ # Requires authenticated client for private repos.
457
+ #
458
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
459
+ # @return [Array<Sawyer::Resource>] Array of Hashes representing languages.
460
+ # @see https://developer.github.com/v3/repos/#list-languages
461
+ # @example
462
+ # Octokit.languages('octokit/octokit.rb')
463
+ # @example
464
+ # @client.languages('octokit/octokit.rb')
465
+ def languages(repo, options = {})
466
+ paginate "#{Repository.path repo}/languages", options
467
+ end
468
+
469
+ # List tags
470
+ #
471
+ # Requires authenticated client for private repos.
472
+ #
473
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
474
+ # @return [Array<Sawyer::Resource>] Array of hashes representing tags.
475
+ # @see https://developer.github.com/v3/repos/#list-tags
476
+ # @example
477
+ # Octokit.tags('octokit/octokit.rb')
478
+ # @example
479
+ # @client.tags('octokit/octokit.rb')
480
+ def tags(repo, options = {})
481
+ paginate "#{Repository.path repo}/tags", options
482
+ end
483
+
484
+ # List branches
485
+ #
486
+ # Requires authenticated client for private repos.
487
+ #
488
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
489
+ # @return [Array<Sawyer::Resource>] Array of hashes representing branches.
490
+ # @see https://developer.github.com/v3/repos/#list-branches
491
+ # @example
492
+ # Octokit.branches('octokit/octokit.rb')
493
+ # @example
494
+ # @client.branches('octokit/octokit.rb')
495
+ def branches(repo, options = {})
496
+ paginate "#{Repository.path repo}/branches", options
497
+ end
498
+
499
+ # Get a single branch from a repository
500
+ #
501
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
502
+ # @param branch [String] Branch name
503
+ # @return [Sawyer::Resource] The branch requested, if it exists
504
+ # @see https://developer.github.com/v3/repos/#get-branch
505
+ # @example Get branch 'master` from octokit/octokit.rb
506
+ # Octokit.branch("octokit/octokit.rb", "master")
507
+ def branch(repo, branch, options = {})
508
+ get "#{Repository.path repo}/branches/#{branch}", options
509
+ end
510
+ alias :get_branch :branch
511
+
512
+ # Lock a single branch from a repository
513
+ #
514
+ # Requires authenticated client
515
+ #
516
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
517
+ # @param branch [String] Branch name
518
+ # @option options [Hash] :required_status_checks If not null, the following keys are required:
519
+ # <tt>:include_admins [boolean] Enforce required status checks for repository administrators.</tt>
520
+ # <tt>:strict [boolean] Require branches to be up to date before merging.</tt>
521
+ # <tt>:contexts [Array] The list of status checks to require in order to merge into this branch</tt>
522
+ #
523
+ # @option options [Hash] :restrictions If not null, the following keys are required:
524
+ # <tt>:users [Array] The list of user logins with push access</tt>
525
+ # <tt>:teams [Array] The list of team slugs with push access</tt>.
526
+ #
527
+ # Teams and users restrictions are only available for organization-owned repositories.
528
+ # @return [Sawyer::Resource] The protected branch
529
+ # @see https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection
530
+ # @example
531
+ # @client.protect_branch('octokit/octokit.rb', 'master', foo)
532
+ def protect_branch(repo, branch, options = {})
533
+ opts = ensure_api_media_type(:branch_protection, options)
534
+ opts[:restrictions] ||= nil
535
+ opts[:required_status_checks] ||= nil
536
+ put "#{Repository.path repo}/branches/#{branch}/protection", opts
537
+ end
538
+
539
+ # Get branch protection summary
540
+ #
541
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
542
+ # @param branch [String] Branch name
543
+ # @return [Sawyer::Resource, nil] Branch protection summary or nil if the branch
544
+ # is not protected
545
+ # @see https://developer.github.com/v3/repos/branches/#get-branch-protection
546
+ # @example
547
+ # @client.branch_protection('octokit/octokit.rb', 'master')
548
+ def branch_protection(repo, branch, options = {})
549
+ opts = ensure_api_media_type(:branch_protection, options)
550
+ begin
551
+ get "#{Repository.path repo}/branches/#{branch}/protection", opts
552
+ rescue Octokit::BranchNotProtected
553
+ nil
554
+ end
555
+ end
556
+
557
+ # Unlock a single branch from a repository
558
+ #
559
+ # Requires authenticated client
560
+ #
561
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
562
+ # @param branch [String] Branch name
563
+ # @return [Sawyer::Resource] The unprotected branch
564
+ # @see https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection
565
+ # @example
566
+ # @client.unprotect_branch('octokit/octokit.rb', 'master')
567
+ def unprotect_branch(repo, branch, options = {})
568
+ opts = ensure_api_media_type(:branch_protection, options)
569
+ boolean_from_response :delete, "#{Repository.path repo}/branches/#{branch}/protection", opts
570
+ end
571
+
572
+ # List users available for assigning to issues.
573
+ #
574
+ # Requires authenticated client for private repos.
575
+ #
576
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
577
+ # @return [Array<Sawyer::Resource>] Array of hashes representing users.
578
+ # @see https://developer.github.com/v3/issues/assignees/#list-assignees
579
+ # @example
580
+ # Octokit.repository_assignees('octokit/octokit.rb')
581
+ # @example
582
+ # Octokit.repo_assignees('octokit/octokit.rb')
583
+ # @example
584
+ # @client.repository_assignees('octokit/octokit.rb')
585
+ def repository_assignees(repo, options = {})
586
+ paginate "#{Repository.path repo}/assignees", options
587
+ end
588
+ alias :repo_assignees :repository_assignees
589
+
590
+ # Check to see if a particular user is an assignee for a repository.
591
+ #
592
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
593
+ # @param assignee [String] User login to check
594
+ # @return [Boolean] True if assignable on project, false otherwise.
595
+ # @see https://developer.github.com/v3/issues/assignees/#check-assignee
596
+ # @example
597
+ # Octokit.check_assignee('octokit/octokit.rb', 'andrew')
598
+ def check_assignee(repo, assignee, options = {})
599
+ boolean_from_response :get, "#{Repository.path repo}/assignees/#{assignee}", options
600
+ end
601
+
602
+ # List watchers subscribing to notifications for a repo
603
+ #
604
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
605
+ # @return [Array<Sawyer::Resource>] Array of users watching.
606
+ # @see https://developer.github.com/v3/activity/watching/#list-watchers
607
+ # @example
608
+ # @client.subscribers("octokit/octokit.rb")
609
+ def subscribers(repo, options = {})
610
+ paginate "#{Repository.path repo}/subscribers", options
611
+ end
612
+
613
+ # Get a repository subscription
614
+ #
615
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
616
+ # @return [Sawyer::Resource] Repository subscription.
617
+ # @see https://developer.github.com/v3/activity/watching/#get-a-repository-subscription
618
+ # @example
619
+ # @client.subscription("octokit/octokit.rb")
620
+ def subscription(repo, options = {})
621
+ get "#{Repository.path repo}/subscription", options
622
+ end
623
+
624
+ # Update repository subscription
625
+ #
626
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
627
+ # @param options [Hash]
628
+ #
629
+ # @option options [Boolean] :subscribed Determines if notifications
630
+ # should be received from this repository.
631
+ # @option options [Boolean] :ignored Deterimines if all notifications
632
+ # should be blocked from this repository.
633
+ # @return [Sawyer::Resource] Updated repository subscription.
634
+ # @see https://developer.github.com/v3/activity/watching/#set-a-repository-subscription
635
+ # @example Subscribe to notifications for a repository
636
+ # @client.update_subscription("octokit/octokit.rb", {subscribed: true})
637
+ def update_subscription(repo, options = {})
638
+ put "#{Repository.path repo}/subscription", options
639
+ end
640
+
641
+ # Delete a repository subscription
642
+ #
643
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
644
+ # @return [Boolean] True if subscription deleted, false otherwise.
645
+ # @see https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription
646
+ #
647
+ # @example
648
+ # @client.delete_subscription("octokit/octokit.rb")
649
+ def delete_subscription(repo, options = {})
650
+ boolean_from_response :delete, "#{Repository.path repo}/subscription", options
651
+ end
652
+ end
653
+ end
654
+ end