octodoggy 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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