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,95 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Commit Comments API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/comments/
7
+ module CommitComments
8
+
9
+ # List all commit comments
10
+ #
11
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
12
+ # @return [Array] List of commit comments
13
+ # @see https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository
14
+ def list_commit_comments(repo, options = {})
15
+ paginate "#{Repository.path repo}/comments", options
16
+ end
17
+
18
+ # List comments for a single commit
19
+ #
20
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
21
+ # @param sha [String] The SHA of the commit whose comments will be fetched
22
+ # @return [Array] List of commit comments
23
+ # @see https://developer.github.com/v3/repos/comments/#list-comments-for-a-single-commit
24
+ def commit_comments(repo, sha, options = {})
25
+ paginate "#{Repository.path repo}/commits/#{sha}/comments", options
26
+ end
27
+
28
+ # Get a single commit comment
29
+ #
30
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
31
+ # @param id [String] The ID of the comment to fetch
32
+ # @return [Sawyer::Resource] Commit comment
33
+ # @see https://developer.github.com/v3/repos/comments/#get-a-single-commit-comment
34
+ def commit_comment(repo, id, options = {})
35
+ get "#{Repository.path repo}/comments/#{id}", options
36
+ end
37
+
38
+ # Create a commit comment
39
+ #
40
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
41
+ # @param sha [String] Sha of the commit to comment on
42
+ # @param body [String] Message
43
+ # @param path [String] Relative path of file to comment on
44
+ # @param line [Integer] Line number in the file to comment on
45
+ # @param position [Integer] Line index in the diff to comment on
46
+ # @return [Sawyer::Resource] Commit comment
47
+ # @see https://developer.github.com/v3/repos/comments/#create-a-commit-comment
48
+ # @example Create a commit comment
49
+ # comment = Octokit.create_commit_comment("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132", "My comment message", "README.md", 10, 1)
50
+ # comment.commit_id # => "827efc6d56897b048c772eb4087f854f46256132"
51
+ # comment.id # => 54321
52
+ # comment.body # => "My comment message"
53
+ # comment.path # => "README.md"
54
+ # comment.line # => 10
55
+ # comment.position # => 1
56
+ def create_commit_comment(repo, sha, body, path=nil, line=nil, position=nil, options = {})
57
+ params = {
58
+ :body => body,
59
+ :path => path,
60
+ :line => line,
61
+ :position => position
62
+ }
63
+ post "#{Repository.path repo}/commits/#{sha}/comments", options.merge(params)
64
+ end
65
+
66
+ # Update a commit comment
67
+ #
68
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
69
+ # @param id [String] The ID of the comment to update
70
+ # @param body [String] Message
71
+ # @return [Sawyer::Resource] Updated commit comment
72
+ # @see https://developer.github.com/v3/repos/comments/#update-a-commit-comment
73
+ # @example Update a commit comment
74
+ # comment = Octokit.update_commit_comment("octocat/Hello-World", "860296", "Updated commit comment")
75
+ # comment.id # => 860296
76
+ # comment.body # => "Updated commit comment"
77
+ def update_commit_comment(repo, id, body, options = {})
78
+ params = {
79
+ :body => body
80
+ }
81
+ patch "#{Repository.path repo}/comments/#{id}", options.merge(params)
82
+ end
83
+
84
+ # Delete a commit comment
85
+ #
86
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
87
+ # @param id [String] The ID of the comment to delete
88
+ # @return [Boolean] Success
89
+ # @see https://developer.github.com/v3/repos/comments/#delete-a-commit-comment
90
+ def delete_commit_comment(repo, id, options = {})
91
+ boolean_from_response :delete, "#{Repository.path repo}/comments/#{id}", options
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,239 @@
1
+ require 'date'
2
+
3
+ module Octokit
4
+ class Client
5
+
6
+ # Methods for the Commits API
7
+ #
8
+ # @see https://developer.github.com/v3/repos/commits/
9
+ module Commits
10
+
11
+ # List commits
12
+ #
13
+ # @overload commits(repo, sha_or_branch, options = {})
14
+ # @deprecated
15
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
16
+ # @param sha_or_branch [String] A commit SHA or branch name
17
+ # @param options [String] :sha Commit SHA or branch name from which to start the list
18
+ # @overload commits(repo, options = {})
19
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
20
+ # @param options [String] :sha Commit SHA or branch name from which to start the list
21
+ # @return [Array<Sawyer::Resource>] An array of hashes representing commits
22
+ # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
23
+ def commits(*args)
24
+ arguments = Octokit::RepoArguments.new(args)
25
+ sha_or_branch = arguments.pop
26
+ if sha_or_branch
27
+ arguments.options[:sha] = sha_or_branch
28
+ end
29
+ paginate "#{Repository.new(arguments.repo).path}/commits", arguments.options
30
+ end
31
+ alias :list_commits :commits
32
+
33
+ # Get commits after a specified date
34
+ #
35
+ # @overload commits_since(repo, date, options = {})
36
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
37
+ # @param date [String] Date on which we want to compare
38
+ # @param options [String] :sha Commit SHA or branch name from which to start the list
39
+ # @overload commits_since(repo, date, sha_or_branch, options = {})
40
+ # @deprecated
41
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
42
+ # @param date [String] Date on which we want to compare
43
+ # @param sha_or_branch [String] A commit SHA or branch name
44
+ # @param options [String] :sha Commit SHA or branch name from which to start the list
45
+ # @return [Array<Sawyer::Resource>] An array of hashes representing commits
46
+ # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
47
+ # @example
48
+ # Octokit.commits_since('octokit/octokit.rb', '2012-10-01')
49
+ def commits_since(*args)
50
+ arguments = Octokit::RepoArguments.new(args)
51
+ date = parse_date(arguments.shift)
52
+ params = arguments.options
53
+ params.merge!(:since => iso8601(date))
54
+ sha_or_branch = arguments.pop
55
+ if sha_or_branch
56
+ params[:sha] = sha_or_branch
57
+ end
58
+ commits(arguments.repo, params)
59
+ end
60
+
61
+ # Get commits before a specified date
62
+ #
63
+ # @overload commits_before(repo, date, options = {})
64
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
65
+ # @param date [String] Date on which we want to compare
66
+ # @overload commits_before(repo, date, sha_or_branch, options = {})
67
+ # @deprecated
68
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
69
+ # @param date [String] Date on which we want to compare
70
+ # @param sha_or_branch [String] Commit SHA or branch name from which to start the list
71
+ # @return [Array<Sawyer::Resource>] An array of hashes representing commits
72
+ # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
73
+ # @example
74
+ # Octokit.commits_before('octokit/octokit.rb', '2012-10-01')
75
+ def commits_before(*args)
76
+ arguments = Octokit::RepoArguments.new(args)
77
+ date = parse_date(arguments.shift)
78
+ params = arguments.options
79
+ params.merge!(:until => iso8601(date))
80
+ sha_or_branch = arguments.pop
81
+ if sha_or_branch
82
+ params[:sha] = sha_or_branch
83
+ end
84
+ commits(arguments.repo, params)
85
+ end
86
+
87
+ # Get commits on a specified date
88
+ #
89
+ # @overload commits_on(repo, date, options = {})
90
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
91
+ # @param date [String] Date on which we want to compare
92
+ # @overload commits_on(repo, date, sha_or_branch, options = {})
93
+ # @deprecated
94
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
95
+ # @param date [String] Date on which we want to compare
96
+ # @param sha_or_branch [String] Commit SHA or branch name from which to start the list
97
+ # @return [Array<Sawyer::Resource>] An array of hashes representing commits
98
+ # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
99
+ # @example
100
+ # Octokit.commits_on('octokit/octokit.rb', '2012-10-01')
101
+ def commits_on(*args)
102
+ arguments = Octokit::RepoArguments.new(args)
103
+ date = parse_date(arguments.shift)
104
+ params = arguments.options
105
+ end_date = date + 1
106
+ params.merge!(:since => iso8601(date), :until => iso8601(end_date))
107
+ sha_or_branch = arguments.pop
108
+ if sha_or_branch
109
+ params[:sha] = sha_or_branch
110
+ end
111
+ commits(arguments.repo, params)
112
+ end
113
+
114
+ # Get commits made between two nominated dates
115
+ #
116
+ # @overload commits_between(repo, start_date, end_date, options = {})
117
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
118
+ # @param start_date [String] Start Date on which we want to compare
119
+ # @param end_date [String] End Date on which we want to compare
120
+ # @overload commits_between(repo, start_date, end_date, sha_or_branch, options = {})
121
+ # @deprecated
122
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
123
+ # @param start_date [String] Start Date on which we want to compare
124
+ # @param end_date [String] End Date on which we want to compare
125
+ # @param sha_or_branch [String] Commit SHA or branch name from which to start the list
126
+ # @return [Array<Sawyer::Resource>] An array of hashes representing commits
127
+ # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
128
+ # @example
129
+ # Octokit.commits_between('octokit/octokit.rb', '2012-10-01', '2012-11-01')
130
+ def commits_between(*args)
131
+ arguments = Octokit::RepoArguments.new(args)
132
+ date = parse_date(arguments.shift)
133
+ end_date = parse_date(arguments.shift)
134
+ raise ArgumentError, "Start date #{date} does not precede #{end_date}" if date > end_date
135
+
136
+ params = arguments.options
137
+ params.merge!(:since => iso8601(date), :until => iso8601(end_date))
138
+ sha_or_branch = arguments.pop
139
+ if sha_or_branch
140
+ params[:sha] = sha_or_branch
141
+ end
142
+ commits(arguments.repo, params)
143
+ end
144
+
145
+ # Get a single commit
146
+ #
147
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
148
+ # @param sha [String] The SHA of the commit to fetch
149
+ # @return [Sawyer::Resource] A hash representing the commit
150
+ # @see https://developer.github.com/v3/repos/commits/#get-a-single-commit
151
+ def commit(repo, sha, options = {})
152
+ get "#{Repository.path repo}/commits/#{sha}", options
153
+ end
154
+
155
+ # Get a detailed git commit
156
+ #
157
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
158
+ # @param sha [String] The SHA of the commit to fetch
159
+ # @return [Sawyer::Resource] A hash representing the commit
160
+ # @see https://developer.github.com/v3/git/commits/#get-a-commit
161
+ def git_commit(repo, sha, options = {})
162
+ get "#{Repository.path repo}/git/commits/#{sha}", options
163
+ end
164
+
165
+ # Create a commit
166
+ #
167
+ # Optionally pass <tt>author</tt> and <tt>committer</tt> hashes in <tt>options</tt>
168
+ # if you'd like manual control over those parameters. If absent, details will be
169
+ # inferred from the authenticated user. See <a href="http://developer.github.com/v3/git/commits/">GitHub's documentation</a>
170
+ # for details about how to format committer identities.
171
+ #
172
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
173
+ # @param message [String] The commit message
174
+ # @param tree [String] The SHA of the tree object the new commit will point to
175
+ # @param parents [String, Array] One SHA (for a normal commit) or an array of SHAs (for a merge) of the new commit's parent commits. If ommitted or empty, a root commit will be created
176
+ # @return [Sawyer::Resource] A hash representing the new commit
177
+ # @see https://developer.github.com/v3/git/commits/#create-a-commit
178
+ # @example Create a commit
179
+ # commit = Octokit.create_commit("octocat/Hello-World", "My commit message", "827efc6d56897b048c772eb4087f854f46256132", "7d1b31e74ee336d15cbd21741bc88a537ed063a0")
180
+ # commit.sha # => "7638417db6d59f3c431d3e1f261cc637155684cd"
181
+ # commit.tree.sha # => "827efc6d56897b048c772eb4087f854f46256132"
182
+ # commit.message # => "My commit message"
183
+ # commit.committer # => { "name" => "Wynn Netherland", "email" => "wynn@github.com", ... }
184
+ def create_commit(repo, message, tree, parents=nil, options = {})
185
+ params = { :message => message, :tree => tree }
186
+ params[:parents] = [parents].flatten if parents
187
+ post "#{Repository.path repo}/git/commits", options.merge(params)
188
+ end
189
+
190
+ # Compare two commits
191
+ #
192
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
193
+ # @param start [String] The sha of the starting commit
194
+ # @param endd [String] The sha of the ending commit
195
+ # @return [Sawyer::Resource] A hash representing the comparison
196
+ # @see https://developer.github.com/v3/repos/commits/#compare-two-commits
197
+ def compare(repo, start, endd, options = {})
198
+ get "#{Repository.path repo}/compare/#{start}...#{endd}", options
199
+ end
200
+
201
+ # Merge a branch or sha
202
+ #
203
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
204
+ # @param base [String] The name of the base branch to merge into
205
+ # @param head [String] The branch or SHA1 to merge
206
+ # @option options [String] :commit_message The commit message for the merge
207
+ # @return [Sawyer::Resource] A hash representing the comparison
208
+ # @see https://developer.github.com/v3/repos/merging/#perform-a-merge
209
+ def merge(repo, base, head, options = {})
210
+ params = {
211
+ :base => base,
212
+ :head => head
213
+ }.merge(options)
214
+ post "#{Repository.path repo}/merges", params
215
+ end
216
+
217
+ protected
218
+
219
+ def iso8601(date)
220
+ if date.respond_to?(:iso8601)
221
+ date.iso8601
222
+ else
223
+ date.strftime("%Y-%m-%dT%H:%M:%S%Z")
224
+ end
225
+ end
226
+
227
+ # Parses the given string representation of a date, throwing a meaningful exception
228
+ # (containing the date that failed to parse) in case of failure.
229
+ #
230
+ # @param date [String] String representation of a date
231
+ # @return [DateTime]
232
+ def parse_date(date)
233
+ date = DateTime.parse(date.to_s)
234
+ rescue ArgumentError
235
+ raise ArgumentError, "#{date} is not a valid date"
236
+ end
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,162 @@
1
+ require 'base64'
2
+
3
+ module Octokit
4
+ class Client
5
+
6
+ # Methods for the Repo Contents API
7
+ #
8
+ # @see https://developer.github.com/v3/repos/contents/
9
+ module Contents
10
+
11
+ # Receive the default Readme for a repository
12
+ #
13
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
14
+ # @option options [String] :ref name of the Commit/Branch/Tag. Defaults to “master”.
15
+ # @return [Sawyer::Resource] The detail of the readme
16
+ # @see https://developer.github.com/v3/repos/contents/#get-the-readme
17
+ # @example Get the readme file for a repo
18
+ # Octokit.readme("octokit/octokit.rb")
19
+ def readme(repo, options={})
20
+ get "#{Repository.path repo}/readme", options
21
+ end
22
+
23
+ # Receive a listing of a repository folder or the contents of a file
24
+ #
25
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
26
+ # @option options [String] :path A folder or file path
27
+ # @option options [String] :ref name of the Commit/Branch/Tag. Defaults to “master”.
28
+ # @return [Sawyer::Resource] The contents of a file or list of the files in the folder
29
+ # @see https://developer.github.com/v3/repos/contents/#get-contents
30
+ # @example List the contents of lib/octokit.rb
31
+ # Octokit.contents("octokit/octokit.rb", :path => 'lib/octokit.rb')
32
+ def contents(repo, options={})
33
+ repo_path = options.delete :path
34
+ url = "#{Repository.path repo}/contents/#{repo_path}"
35
+ get url, options
36
+ end
37
+ alias :content :contents
38
+
39
+ # Add content to a repository
40
+ #
41
+ # @overload create_contents(repo, path, message, content = nil, options = {})
42
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
43
+ # @param path [String] A path for the new content
44
+ # @param message [String] A commit message for adding the content
45
+ # @param optional content [String] The content for the file
46
+ # @option options [String] :branch The branch on which to add the content
47
+ # @option options [String] :file Path or Ruby File object for content
48
+ # @return [Sawyer::Resource] The contents and commit info for the addition
49
+ # @see https://developer.github.com/v3/repos/contents/#create-a-file
50
+ # @example Add content at lib/octokit.rb
51
+ # Octokit.create_contents("octokit/octokit.rb",
52
+ # "lib/octokit.rb",
53
+ # "Adding content",
54
+ # "File content",
55
+ # :branch => "my-new-feature")
56
+ def create_contents(*args)
57
+ options = args.last.is_a?(Hash) ? args.pop : {}
58
+ repo = args.shift
59
+ path = args.shift
60
+ message = args.shift
61
+ content = args.shift
62
+ if content.nil? && file = options.delete(:file)
63
+ case file
64
+ when String
65
+ if File.exist?(file)
66
+ file = File.open(file, "r")
67
+ content = file.read
68
+ file.close
69
+ end
70
+ when File, Tempfile
71
+ content = file.read
72
+ file.close
73
+ end
74
+ end
75
+ raise ArgumentError.new("content or :file option required") if content.nil?
76
+ options[:content] = Base64.respond_to?(:strict_encode64) ?
77
+ Base64.strict_encode64(content) :
78
+ Base64.encode64(content).delete("\n") # Ruby 1.9.2
79
+ options[:message] = message
80
+ url = "#{Repository.path repo}/contents/#{path}"
81
+ put url, options
82
+ end
83
+ alias :create_content :create_contents
84
+ alias :add_content :create_contents
85
+ alias :add_contents :create_contents
86
+
87
+ # Update content in a repository
88
+ #
89
+ # @overload update_contents(repo, path, message, sha, content = nil, options = {})
90
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
91
+ # @param path [String] A path for the content to update
92
+ # @param message [String] A commit message for updating the content
93
+ # @param sha [String] The _blob sha_ of the content to update
94
+ # @param content [String] The content for the file
95
+ # @option options [String] :branch The branch on which to update the content
96
+ # @option options [String] :file Path or Ruby File object for content
97
+ # @return [Sawyer::Resource] The contents and commit info for the update
98
+ # @see https://developer.github.com/v3/repos/contents/#update-a-file
99
+ # @example Update content at lib/octokit.rb
100
+ # Octokit.update_contents("octokit/octokit.rb",
101
+ # "lib/octokit.rb",
102
+ # "Updating content",
103
+ # "7eb95f97e1a0636015df3837478d3f15184a5f49",
104
+ # "File content",
105
+ # :branch => "my-new-feature")
106
+ def update_contents(*args)
107
+ options = args.last.is_a?(Hash) ? args.pop : {}
108
+ repo = args.shift
109
+ path = args.shift
110
+ message = args.shift
111
+ sha = args.shift
112
+ content = args.shift
113
+ options.merge!(:sha => sha)
114
+ create_contents(repo, path, message, content, options)
115
+ end
116
+ alias :update_content :update_contents
117
+
118
+ # Delete content in a repository
119
+ #
120
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
121
+ # @param path [String] A path for the content to delete
122
+ # @param message [String] A commit message for deleting the content
123
+ # @param sha [String] The _blob sha_ of the content to delete
124
+ # @option options [String] :branch The branch on which to delete the content
125
+ # @return [Sawyer::Resource] The commit info for the delete
126
+ # @see https://developer.github.com/v3/repos/contents/#delete-a-file
127
+ # @example Delete content at lib/octokit.rb
128
+ # Octokit.delete_contents("octokit/octokit.rb",
129
+ # "lib/octokit.rb",
130
+ # "Deleting content",
131
+ # "7eb95f97e1a0636015df3837478d3f15184a5f49",
132
+ # :branch => "my-new-feature")
133
+ def delete_contents(repo, path, message, sha, options = {})
134
+ options[:message] = message
135
+ options[:sha] = sha
136
+ url = "#{Repository.path repo}/contents/#{path}"
137
+ delete url, options
138
+ end
139
+ alias :delete_content :delete_contents
140
+ alias :remove_content :delete_contents
141
+ alias :remove_contents :delete_contents
142
+
143
+ # This method will provide a URL to download a tarball or zipball archive for a repository.
144
+ #
145
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository.
146
+ # @option options format [String] Either tarball (default) or zipball.
147
+ # @option options [String] :ref Optional valid Git reference, defaults to master.
148
+ # @return [String] Location of the download
149
+ # @see https://developer.github.com/v3/repos/contents/#get-archive-link
150
+ # @example Get archive link for octokit/octokit.rb
151
+ # Octokit.archive_link("octokit/octokit.rb")
152
+ def archive_link(repo, options={})
153
+ repo_ref = options.delete :ref
154
+ format = (options.delete :format) || 'tarball'
155
+ url = "#{Repository.path repo}/#{format}/#{repo_ref}"
156
+
157
+ response = client_without_redirects.head(url, options)
158
+ response.headers['Location']
159
+ end
160
+ end
161
+ end
162
+ end