octokit 4.6.2 → 6.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.md +14 -13
  3. data/LICENSE.md +1 -1
  4. data/README.md +239 -118
  5. data/Rakefile +12 -12
  6. data/lib/ext/sawyer/relation.rb +4 -2
  7. data/lib/octokit/arguments.rb +2 -2
  8. data/lib/octokit/authentication.rb +20 -14
  9. data/lib/octokit/client/actions_artifacts.rb +71 -0
  10. data/lib/octokit/client/actions_secrets.rb +59 -0
  11. data/lib/octokit/client/actions_workflow_jobs.rb +65 -0
  12. data/lib/octokit/client/actions_workflow_runs.rb +125 -0
  13. data/lib/octokit/client/actions_workflows.rb +68 -0
  14. data/lib/octokit/client/apps.rb +222 -0
  15. data/lib/octokit/client/checks.rb +200 -0
  16. data/lib/octokit/client/commit_branches.rb +20 -0
  17. data/lib/octokit/client/commit_comments.rb +8 -8
  18. data/lib/octokit/client/commit_pulls.rb +20 -0
  19. data/lib/octokit/client/commits.rb +31 -34
  20. data/lib/octokit/client/community_profile.rb +21 -0
  21. data/lib/octokit/client/contents.rb +25 -20
  22. data/lib/octokit/client/deployments.rb +25 -5
  23. data/lib/octokit/client/downloads.rb +5 -6
  24. data/lib/octokit/client/emojis.rb +3 -3
  25. data/lib/octokit/client/environments.rb +55 -0
  26. data/lib/octokit/client/events.rb +4 -4
  27. data/lib/octokit/client/feeds.rb +4 -5
  28. data/lib/octokit/client/gists.rb +7 -6
  29. data/lib/octokit/client/gitignore.rb +3 -3
  30. data/lib/octokit/client/hooks.rb +9 -19
  31. data/lib/octokit/client/issues.rb +60 -14
  32. data/lib/octokit/client/labels.rb +17 -17
  33. data/lib/octokit/client/legacy_search.rb +3 -3
  34. data/lib/octokit/client/licenses.rb +4 -7
  35. data/lib/octokit/client/markdown.rb +3 -3
  36. data/lib/octokit/client/marketplace.rb +56 -0
  37. data/lib/octokit/client/meta.rb +4 -5
  38. data/lib/octokit/client/milestones.rb +5 -5
  39. data/lib/octokit/client/notifications.rb +6 -10
  40. data/lib/octokit/client/oauth_applications.rb +116 -0
  41. data/lib/octokit/client/objects.rb +14 -14
  42. data/lib/octokit/client/organizations.rb +238 -61
  43. data/lib/octokit/client/pages.rb +5 -7
  44. data/lib/octokit/client/projects.rb +50 -70
  45. data/lib/octokit/client/pub_sub_hubbub.rb +16 -16
  46. data/lib/octokit/client/pull_requests.rb +58 -46
  47. data/lib/octokit/client/rate_limit.rb +11 -13
  48. data/lib/octokit/client/reactions.rb +6 -11
  49. data/lib/octokit/client/refs.rb +32 -19
  50. data/lib/octokit/client/releases.rb +14 -13
  51. data/lib/octokit/client/repositories.rb +195 -54
  52. data/lib/octokit/client/repository_invitations.rb +4 -11
  53. data/lib/octokit/client/reviews.rb +227 -0
  54. data/lib/octokit/client/say.rb +4 -5
  55. data/lib/octokit/client/search.rb +46 -17
  56. data/lib/octokit/client/service_status.rb +19 -9
  57. data/lib/octokit/client/source_import.rb +8 -13
  58. data/lib/octokit/client/stats.rb +12 -9
  59. data/lib/octokit/client/statuses.rb +6 -6
  60. data/lib/octokit/client/tokens.rb +31 -0
  61. data/lib/octokit/client/traffic.rb +6 -11
  62. data/lib/octokit/client/users.rb +106 -25
  63. data/lib/octokit/client.rb +66 -17
  64. data/lib/octokit/configurable.rb +42 -30
  65. data/lib/octokit/connection.rb +43 -21
  66. data/lib/octokit/default.rb +63 -34
  67. data/lib/octokit/enterprise_admin_client/admin_stats.rb +14 -15
  68. data/lib/octokit/enterprise_admin_client/license.rb +4 -5
  69. data/lib/octokit/enterprise_admin_client/orgs.rb +5 -6
  70. data/lib/octokit/enterprise_admin_client/search_indexing.rb +8 -9
  71. data/lib/octokit/enterprise_admin_client/users.rb +17 -16
  72. data/lib/octokit/enterprise_admin_client.rb +9 -3
  73. data/lib/octokit/enterprise_management_console_client/management_console.rb +33 -33
  74. data/lib/octokit/enterprise_management_console_client.rb +9 -3
  75. data/lib/octokit/error.rb +107 -26
  76. data/lib/octokit/gist.rb +4 -5
  77. data/lib/octokit/middleware/follow_redirects.rb +17 -13
  78. data/lib/octokit/organization.rb +3 -1
  79. data/lib/octokit/rate_limit.rb +11 -9
  80. data/lib/octokit/repo_arguments.rb +2 -3
  81. data/lib/octokit/repository.rb +27 -25
  82. data/lib/octokit/response/base_middleware.rb +10 -0
  83. data/lib/octokit/response/feed_parser.rb +5 -9
  84. data/lib/octokit/response/raise_error.rb +4 -6
  85. data/lib/octokit/user.rb +4 -2
  86. data/lib/octokit/version.rb +5 -3
  87. data/lib/octokit/warnable.rb +4 -5
  88. data/lib/octokit.rb +15 -8
  89. data/octokit.gemspec +13 -10
  90. metadata +55 -22
  91. data/lib/octokit/client/authorizations.rb +0 -244
  92. data/lib/octokit/preview.rb +0 -35
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
  require 'set'
3
5
 
@@ -7,11 +9,9 @@ require 'set'
7
9
  # https://github.com/lostisland/faraday_middleware/blob/138766e/lib/faraday_middleware/response/follow_redirects.rb
8
10
 
9
11
  module Octokit
10
-
11
12
  module Middleware
12
-
13
13
  # Public: Exception thrown when the maximum amount of requests is exceeded.
14
- class RedirectLimitReached < Faraday::Error::ClientError
14
+ class RedirectLimitReached < Faraday::ClientError
15
15
  attr_reader :response
16
16
 
17
17
  def initialize(response)
@@ -30,13 +30,13 @@ module Octokit
30
30
  # doesn't support parallelism.
31
31
  class FollowRedirects < Faraday::Middleware
32
32
  # HTTP methods for which 30x redirects can be followed
33
- ALLOWED_METHODS = Set.new [:head, :options, :get, :post, :put, :patch, :delete]
33
+ ALLOWED_METHODS = Set.new %i[head options get post put patch delete]
34
34
 
35
35
  # HTTP redirect status codes that this middleware implements
36
36
  REDIRECT_CODES = Set.new [301, 302, 303, 307]
37
37
 
38
38
  # Keys in env hash which will get cleared between requests
39
- ENV_TO_CLEAR = Set.new [:status, :response, :response_headers]
39
+ ENV_TO_CLEAR = Set.new %i[status response response_headers]
40
40
 
41
41
  # Default value for max redirects followed
42
42
  FOLLOW_LIMIT = 3
@@ -44,12 +44,12 @@ module Octokit
44
44
  # Regex that matches characters that need to be escaped in URLs, sans
45
45
  # the "%" character which we assume already represents an escaped
46
46
  # sequence.
47
- URI_UNSAFE = /[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]%]/
47
+ URI_UNSAFE = %r{[^\-_.!~*'()a-zA-Z\d;/?:@&=+$,\[\]%]}.freeze
48
48
 
49
49
  # Public: Initialize the middleware.
50
50
  #
51
51
  # options - An options Hash (default: {}):
52
- # :limit - A Fixnum redirect limit (default: 3).
52
+ # :limit - A Integer redirect limit (default: 3).
53
53
  def initialize(app, options = {})
54
54
  super(app)
55
55
  @options = options
@@ -64,7 +64,7 @@ module Octokit
64
64
  private
65
65
 
66
66
  def convert_to_get?(response)
67
- ![:head, :options].include?(response.env[:method]) &&
67
+ !%i[head options].include?(response.env[:method]) &&
68
68
  @convert_to_get.include?(response.status)
69
69
  end
70
70
 
@@ -75,6 +75,7 @@ module Octokit
75
75
  response.on_complete do |response_env|
76
76
  if follow_redirect?(response_env, response)
77
77
  raise(RedirectLimitReached, response) if follows.zero?
78
+
78
79
  new_request_env = update_env(response_env, request_body, response)
79
80
  response = perform_with_redirection(new_request_env, follows - 1)
80
81
  end
@@ -84,9 +85,12 @@ module Octokit
84
85
 
85
86
  def update_env(env, request_body, response)
86
87
  original_url = env[:url]
87
- env[:url] += safe_escape(response["location"])
88
+ env[:url] += safe_escape(response['location'])
88
89
  unless same_host?(original_url, env[:url])
89
- env[:request_headers].delete("Authorization")
90
+ # HACK: Faraday’s Authorization middlewares don’t touch the request if the `Authorization` header is set.
91
+ # This is a workaround to drop authentication info.
92
+ # See https://github.com/octokit/octokit.rb/pull/1359#issuecomment-925609697
93
+ env[:request_headers]['Authorization'] = 'dummy'
90
94
  end
91
95
 
92
96
  if convert_to_get?(response)
@@ -122,9 +126,9 @@ module Octokit
122
126
  # URI:HTTP using the `+` operator. Doesn't escape "%" characters so to not
123
127
  # risk double-escaping.
124
128
  def safe_escape(uri)
125
- uri.to_s.gsub(URI_UNSAFE) { |match|
126
- "%" + match.unpack("H2" * match.bytesize).join("%").upcase
127
- }
129
+ uri.to_s.gsub(URI_UNSAFE) do |match|
130
+ "%#{match.unpack('H2' * match.bytesize).join('%').upcase}"
131
+ end
128
132
  end
129
133
  end
130
134
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Octokit
2
4
  # GitHub organization class to generate API path urls
3
5
  class Organization
@@ -5,7 +7,7 @@ module Octokit
5
7
  #
6
8
  # @param org [String, Integer] GitHub organization login or id
7
9
  # @return [String] Organization Api path
8
- def self.path org
10
+ def self.path(org)
9
11
  case org
10
12
  when String
11
13
  "orgs/#{org}"
@@ -1,29 +1,31 @@
1
- module Octokit
1
+ # frozen_string_literal: true
2
2
 
3
+ module Octokit
3
4
  # Class for API Rate Limit info
4
5
  #
5
6
  # @!attribute [w] limit
6
- # @return [Fixnum] Max tries per rate limit period
7
+ # @return [Integer] Max tries per rate limit period
7
8
  # @!attribute [w] remaining
8
- # @return [Fixnum] Remaining tries per rate limit period
9
+ # @return [Integer] Remaining tries per rate limit period
9
10
  # @!attribute [w] resets_at
10
11
  # @return [Time] Indicates when rate limit resets
11
12
  # @!attribute [w] resets_in
12
- # @return [Fixnum] Number of seconds when rate limit resets
13
+ # @return [Integer] Number of seconds when rate limit resets
13
14
  #
14
15
  # @see https://developer.github.com/v3/#rate-limiting
15
16
  class RateLimit < Struct.new(:limit, :remaining, :resets_at, :resets_in)
16
-
17
17
  # Get rate limit info from HTTP response
18
18
  #
19
19
  # @param response [#headers] HTTP response
20
20
  # @return [RateLimit]
21
21
  def self.from_response(response)
22
22
  info = new
23
- if response && !response.headers.nil?
24
- info.limit = (response.headers['X-RateLimit-Limit'] || 1).to_i
25
- info.remaining = (response.headers['X-RateLimit-Remaining'] || 1).to_i
26
- info.resets_at = Time.at((response.headers['X-RateLimit-Reset'] || Time.now).to_i)
23
+ headers = response.headers if response.respond_to?(:headers) && !response.headers.nil?
24
+ headers ||= response.response_headers if response.respond_to?(:response_headers) && !response.response_headers.nil?
25
+ if headers
26
+ info.limit = (headers['X-RateLimit-Limit'] || 1).to_i
27
+ info.remaining = (headers['X-RateLimit-Remaining'] || 1).to_i
28
+ info.resets_at = Time.at((headers['X-RateLimit-Reset'] || Time.now).to_i)
27
29
  info.resets_in = [(info.resets_at - Time.now).to_i, 0].max
28
30
  end
29
31
 
@@ -1,9 +1,9 @@
1
- module Octokit
1
+ # frozen_string_literal: true
2
2
 
3
+ module Octokit
3
4
  # Class to extract options from Ruby arguments for
4
5
  # Repository-related methods
5
6
  class RepoArguments < Arguments
6
-
7
7
  # !@attribute [r] repo
8
8
  # @return [Repository]
9
9
  attr_reader :repo
@@ -14,6 +14,5 @@ module Octokit
14
14
 
15
15
  arguments
16
16
  end
17
-
18
17
  end
19
18
  end
@@ -1,19 +1,21 @@
1
- module Octokit
1
+ # frozen_string_literal: true
2
2
 
3
+ module Octokit
3
4
  # Class to parse GitHub repository owner and name from
4
5
  # URLs and to generate URLs
5
6
  class Repository
6
7
  attr_accessor :owner, :name, :id
7
- NAME_WITH_OWNER_PATTERN = /\A[\w.-]+\/[\w.-]+\z/i
8
+
9
+ NAME_WITH_OWNER_PATTERN = %r{\A[\w.-]+/[\w.-]+\z}i.freeze
8
10
 
9
11
  # Instantiate from a GitHub repository URL
10
12
  #
11
13
  # @return [Repository]
12
14
  def self.from_url(url)
13
- new URI.parse(url).path[1..-1].
14
- gsub(/^repos\//,'').
15
- split('/', 3)[0..1].
16
- join('/')
15
+ new URI.parse(url).path[1..]
16
+ .gsub(%r{^repos/}, '')
17
+ .split('/', 3)[0..1]
18
+ .join('/')
17
19
  end
18
20
 
19
21
  # @raise [Octokit::InvalidRepository] if the repository
@@ -23,19 +25,17 @@ module Octokit
23
25
  when Integer
24
26
  @id = repo
25
27
  when NAME_WITH_OWNER_PATTERN
26
- @owner, @name = repo.split("/")
28
+ @owner, @name = repo.split('/')
27
29
  when Repository
28
30
  @owner = repo.owner
29
31
  @name = repo.name
30
32
  when Hash
31
- @name = repo[:repo] ||= repo[:name]
32
- @owner = repo[:owner] ||= repo[:user] ||= repo[:username]
33
+ @name = repo[:repo] || repo[:name]
34
+ @owner = repo[:owner] || repo[:user] || repo[:username]
33
35
  else
34
- raise_invalid_repository!
35
- end
36
- if @owner && @name
37
- validate_owner_and_name!
36
+ raise_invalid_repository!(repo)
38
37
  end
38
+ validate_owner_and_name!(repo) if @owner && @name
39
39
  end
40
40
 
41
41
  # Repository owner/name
@@ -43,7 +43,7 @@ module Octokit
43
43
  def slug
44
44
  "#{@owner}/#{@name}"
45
45
  end
46
- alias :to_s :slug
46
+ alias to_s slug
47
47
 
48
48
  # @return [String] Repository API path
49
49
  def path
@@ -54,7 +54,7 @@ module Octokit
54
54
  # Get the api path for a repo
55
55
  # @param repo [Integer, String, Hash, Repository] A GitHub repository.
56
56
  # @return [String] Api path.
57
- def self.path repo
57
+ def self.path(repo)
58
58
  new(repo).path
59
59
  end
60
60
 
@@ -74,20 +74,22 @@ module Octokit
74
74
  "#{Octokit.web_endpoint}#{slug}"
75
75
  end
76
76
 
77
- alias :user :owner
78
- alias :username :owner
79
- alias :repo :name
77
+ alias user owner
78
+ alias username owner
79
+ alias repo name
80
80
 
81
81
  private
82
82
 
83
- def validate_owner_and_name!
84
- if @owner.include?('/') || @name.include?('/') || !url.match(URI::ABS_URI)
85
- raise_invalid_repository!
86
- end
83
+ def validate_owner_and_name!(repo)
84
+ if @owner.include?('/') || @name.include?('/') || !url.match(URI::ABS_URI)
85
+ raise_invalid_repository!(repo)
87
86
  end
87
+ end
88
88
 
89
- def raise_invalid_repository!
90
- raise Octokit::InvalidRepository, "Invalid Repository. Use user/repo format."
91
- end
89
+ def raise_invalid_repository!(repo)
90
+ msg = "#{repo.inspect} is invalid as a repository identifier. " \
91
+ 'Use the user/repo (String) format, or the repository ID (Integer), or a hash containing :repo and :user keys.'
92
+ raise Octokit::InvalidRepository, msg
93
+ end
92
94
  end
93
95
  end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+
5
+ module Octokit
6
+ module Response
7
+ # In Faraday 2.x, Faraday::Response::Middleware was removed
8
+ BaseMiddleware = defined?(Faraday::Response::Middleware) ? Faraday::Response::Middleware : Faraday::Middleware
9
+ end
10
+ end
@@ -1,21 +1,17 @@
1
- require 'faraday'
1
+ # frozen_string_literal: true
2
2
 
3
- module Octokit
3
+ require 'octokit/response/base_middleware'
4
4
 
5
+ module Octokit
5
6
  module Response
6
-
7
7
  # Parses RSS and Atom feed responses.
8
- class FeedParser < Faraday::Response::Middleware
9
-
10
- private
11
-
8
+ class FeedParser < BaseMiddleware
12
9
  def on_complete(env)
13
- if env[:response_headers]["content-type"] =~ /(\batom|\brss)/
10
+ if env[:response_headers]['content-type'] =~ /(\batom|\brss)/
14
11
  require 'rss'
15
12
  env[:body] = RSS::Parser.parse env[:body]
16
13
  end
17
14
  end
18
-
19
15
  end
20
16
  end
21
17
  end
@@ -1,16 +1,14 @@
1
- require 'faraday'
1
+ # frozen_string_literal: true
2
+
3
+ require 'octokit/response/base_middleware'
2
4
  require 'octokit/error'
3
5
 
4
6
  module Octokit
5
7
  # Faraday response middleware
6
8
  module Response
7
-
8
9
  # This class raises an Octokit-flavored exception based
9
10
  # HTTP status codes returned by the API
10
- class RaiseError < Faraday::Response::Middleware
11
-
12
- private
13
-
11
+ class RaiseError < BaseMiddleware
14
12
  def on_complete(response)
15
13
  if error = Octokit::Error.from_response(response)
16
14
  raise error
data/lib/octokit/user.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Octokit
2
4
  # GitHub user class to generate API path urls
3
5
  class User
@@ -5,14 +7,14 @@ module Octokit
5
7
  #
6
8
  # @param user [String, Integer] GitHub user login or id
7
9
  # @return [String] User Api path
8
- def self.path user
10
+ def self.path(user)
9
11
  case user
10
12
  when String
11
13
  "users/#{user}"
12
14
  when Integer
13
15
  "user/#{user}"
14
16
  else
15
- "user"
17
+ 'user'
16
18
  end
17
19
  end
18
20
  end
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Octokit
2
4
  # Current major release.
3
5
  # @return [Integer]
4
- MAJOR = 4
6
+ MAJOR = 6
5
7
 
6
8
  # Current minor release.
7
9
  # @return [Integer]
8
- MINOR = 6
10
+ MINOR = 1
9
11
 
10
12
  # Current patch level.
11
13
  # @return [Integer]
12
- PATCH = 2
14
+ PATCH = 1
13
15
 
14
16
  # Full release version.
15
17
  # @return [String]
@@ -1,17 +1,16 @@
1
- module Octokit
1
+ # frozen_string_literal: true
2
2
 
3
+ module Octokit
3
4
  # Allows warnings to be suppressed via environment variable.
4
5
  module Warnable
6
+ module_function
5
7
 
6
8
  # Wrapper around Kernel#warn to print warnings unless
7
9
  # OCTOKIT_SILENT is set to true.
8
10
  #
9
11
  # @return [nil]
10
12
  def octokit_warn(*message)
11
- unless ENV['OCTOKIT_SILENT']
12
- warn message
13
- end
13
+ warn message unless ENV['OCTOKIT_SILENT']
14
14
  end
15
15
  end
16
16
  end
17
-
data/lib/octokit.rb CHANGED
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'octokit/default'
1
4
  require 'octokit/client'
2
5
  require 'octokit/enterprise_admin_client'
3
6
  require 'octokit/enterprise_management_console_client'
4
- require 'octokit/default'
5
7
 
6
8
  # Ruby toolkit for the GitHub API
7
9
  module Octokit
8
-
9
10
  class << self
10
11
  include Octokit::Configurable
11
12
 
@@ -14,6 +15,7 @@ module Octokit
14
15
  # @return [Octokit::Client] API wrapper
15
16
  def client
16
17
  return @client if defined?(@client) && @client.same_options?(options)
18
+
17
19
  @client = Octokit::Client.new(options)
18
20
  end
19
21
 
@@ -21,7 +23,10 @@ module Octokit
21
23
  #
22
24
  # @return [Octokit::EnterpriseAdminClient] API wrapper
23
25
  def enterprise_admin_client
24
- return @enterprise_admin_client if defined?(@enterprise_admin_client) && @enterprise_admin_client.same_options?(options)
26
+ if defined?(@enterprise_admin_client) && @enterprise_admin_client.same_options?(options)
27
+ return @enterprise_admin_client
28
+ end
29
+
25
30
  @enterprise_admin_client = Octokit::EnterpriseAdminClient.new(options)
26
31
  end
27
32
 
@@ -29,16 +34,19 @@ module Octokit
29
34
  #
30
35
  # @return [Octokit::EnterpriseManagementConsoleClient] API wrapper
31
36
  def enterprise_management_console_client
32
- return @enterprise_management_console_client if defined?(@enterprise_management_console_client) && @enterprise_management_console_client.same_options?(options)
37
+ if defined?(@enterprise_management_console_client) && @enterprise_management_console_client.same_options?(options)
38
+ return @enterprise_management_console_client
39
+ end
40
+
33
41
  @enterprise_management_console_client = Octokit::EnterpriseManagementConsoleClient.new(options)
34
42
  end
35
43
 
36
44
  private
37
45
 
38
- def respond_to_missing?(method_name, include_private=false)
46
+ def respond_to_missing?(method_name, include_private = false)
39
47
  client.respond_to?(method_name, include_private) ||
40
- enterprise_admin_client.respond_to?(method_name, include_private) ||
41
- enterprise_management_console_client.respond_to?(method_name, include_private)
48
+ enterprise_admin_client.respond_to?(method_name, include_private) ||
49
+ enterprise_management_console_client.respond_to?(method_name, include_private)
42
50
  end
43
51
 
44
52
  def method_missing(method_name, *args, &block)
@@ -52,7 +60,6 @@ module Octokit
52
60
 
53
61
  super
54
62
  end
55
-
56
63
  end
57
64
  end
58
65
 
data/octokit.gemspec CHANGED
@@ -1,22 +1,25 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'octokit/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.add_development_dependency 'bundler', '~> 1.0'
8
- spec.add_dependency 'sawyer', '>= 0.5.3', '~> 0.8.0'
9
- spec.authors = ["Wynn Netherland", "Erik Michaels-Ober", "Clint Shryock"]
10
- spec.description = %q{Simple wrapper for the GitHub API}
8
+ spec.add_development_dependency 'bundler', '>= 1', '< 3'
9
+ spec.add_dependency 'faraday', '>= 1', '< 3'
10
+ spec.add_dependency 'sawyer', '~> 0.9'
11
+ spec.authors = ['Wynn Netherland', 'Erik Michaels-Ober', 'Clint Shryock']
12
+ spec.description = 'Simple wrapper for the GitHub API'
11
13
  spec.email = ['wynn.netherland@gmail.com', 'sferik@gmail.com', 'clint@ctshryock.com']
12
- spec.files = %w(.document CONTRIBUTING.md LICENSE.md README.md Rakefile octokit.gemspec)
13
- spec.files += Dir.glob("lib/**/*.rb")
14
+ spec.files = %w[.document CONTRIBUTING.md LICENSE.md README.md Rakefile octokit.gemspec]
15
+ spec.files += Dir.glob('lib/**/*.rb')
14
16
  spec.homepage = 'https://github.com/octokit/octokit.rb'
15
17
  spec.licenses = ['MIT']
16
18
  spec.name = 'octokit'
17
19
  spec.require_paths = ['lib']
18
- spec.required_ruby_version = '>= 2.0.0'
20
+ spec.required_ruby_version = '>= 2.7.0'
19
21
  spec.required_rubygems_version = '>= 1.3.5'
20
- spec.summary = "Ruby toolkit for working with the GitHub API"
22
+ spec.summary = 'Ruby toolkit for working with the GitHub API'
21
23
  spec.version = Octokit::VERSION.dup
24
+ spec.metadata = { 'rubygems_mfa_required' => 'true' }
22
25
  end