octokit 4.21.0 → 10.0.0

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +120 -96
  3. data/Rakefile +20 -14
  4. data/lib/ext/sawyer/relation.rb +4 -2
  5. data/lib/octokit/arguments.rb +3 -3
  6. data/lib/octokit/authentication.rb +10 -3
  7. data/lib/octokit/client/actions_artifacts.rb +71 -0
  8. data/lib/octokit/client/actions_secrets.rb +111 -8
  9. data/lib/octokit/client/actions_workflow_jobs.rb +65 -0
  10. data/lib/octokit/client/actions_workflow_runs.rb +23 -3
  11. data/lib/octokit/client/actions_workflows.rb +27 -2
  12. data/lib/octokit/client/apps.rb +63 -74
  13. data/lib/octokit/client/checks.rb +18 -9
  14. data/lib/octokit/client/code_scanning.rb +190 -0
  15. data/lib/octokit/client/codespaces_secrets.rb +108 -0
  16. data/lib/octokit/client/commit_branches.rb +2 -2
  17. data/lib/octokit/client/commit_comments.rb +8 -8
  18. data/lib/octokit/client/commit_pulls.rb +2 -2
  19. data/lib/octokit/client/commits.rb +31 -34
  20. data/lib/octokit/client/community_profile.rb +2 -3
  21. data/lib/octokit/client/contents.rb +19 -22
  22. data/lib/octokit/client/dependabot_secrets.rb +108 -0
  23. data/lib/octokit/client/deployments.rb +8 -8
  24. data/lib/octokit/client/downloads.rb +5 -6
  25. data/lib/octokit/client/emojis.rb +3 -3
  26. data/lib/octokit/client/environments.rb +58 -0
  27. data/lib/octokit/client/events.rb +4 -5
  28. data/lib/octokit/client/feeds.rb +4 -5
  29. data/lib/octokit/client/gists.rb +6 -6
  30. data/lib/octokit/client/gitignore.rb +3 -3
  31. data/lib/octokit/client/hooks.rb +9 -19
  32. data/lib/octokit/client/issues.rb +14 -15
  33. data/lib/octokit/client/labels.rb +10 -10
  34. data/lib/octokit/client/legacy_search.rb +3 -3
  35. data/lib/octokit/client/licenses.rb +3 -6
  36. data/lib/octokit/client/markdown.rb +3 -3
  37. data/lib/octokit/client/marketplace.rb +4 -4
  38. data/lib/octokit/client/meta.rb +4 -5
  39. data/lib/octokit/client/milestones.rb +5 -5
  40. data/lib/octokit/client/notifications.rb +6 -6
  41. data/lib/octokit/client/oauth_applications.rb +1 -7
  42. data/lib/octokit/client/objects.rb +14 -14
  43. data/lib/octokit/client/organizations.rb +106 -62
  44. data/lib/octokit/client/pages.rb +5 -7
  45. data/lib/octokit/client/projects.rb +44 -64
  46. data/lib/octokit/client/pull_requests.rb +66 -45
  47. data/lib/octokit/client/rate_limit.rb +9 -11
  48. data/lib/octokit/client/reactions.rb +78 -16
  49. data/lib/octokit/client/refs.rb +15 -18
  50. data/lib/octokit/client/releases.rb +13 -13
  51. data/lib/octokit/client/repositories.rb +92 -69
  52. data/lib/octokit/client/repository_invitations.rb +3 -3
  53. data/lib/octokit/client/reviews.rb +8 -8
  54. data/lib/octokit/client/say.rb +4 -5
  55. data/lib/octokit/client/search.rb +24 -10
  56. data/lib/octokit/client/service_status.rb +19 -9
  57. data/lib/octokit/client/source_import.rb +7 -12
  58. data/lib/octokit/client/stats.rb +10 -9
  59. data/lib/octokit/client/statuses.rb +5 -5
  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 +54 -33
  63. data/lib/octokit/client.rb +44 -20
  64. data/lib/octokit/configurable.rb +51 -31
  65. data/lib/octokit/connection.rb +33 -24
  66. data/lib/octokit/default.rb +66 -35
  67. data/lib/octokit/enterprise_admin_client/admin_stats.rb +13 -14
  68. data/lib/octokit/enterprise_admin_client/license.rb +3 -4
  69. data/lib/octokit/enterprise_admin_client/orgs.rb +3 -4
  70. data/lib/octokit/enterprise_admin_client/search_indexing.rb +7 -8
  71. data/lib/octokit/enterprise_admin_client/users.rb +5 -4
  72. data/lib/octokit/enterprise_admin_client.rb +9 -3
  73. data/lib/octokit/enterprise_management_console_client/management_console.rb +51 -33
  74. data/lib/octokit/enterprise_management_console_client.rb +8 -2
  75. data/lib/octokit/error.rb +53 -34
  76. data/lib/octokit/gist.rb +3 -4
  77. data/lib/octokit/manage_ghes_client/manage_ghes.rb +178 -0
  78. data/lib/octokit/manage_ghes_client.rb +64 -0
  79. data/lib/octokit/middleware/follow_redirects.rb +16 -12
  80. data/lib/octokit/organization.rb +3 -1
  81. data/lib/octokit/rate_limit.rb +8 -6
  82. data/lib/octokit/repo_arguments.rb +3 -4
  83. data/lib/octokit/repository.rb +32 -25
  84. data/lib/octokit/response/base_middleware.rb +10 -0
  85. data/lib/octokit/response/feed_parser.rb +5 -7
  86. data/lib/octokit/response/raise_error.rb +4 -4
  87. data/lib/octokit/user.rb +4 -2
  88. data/lib/octokit/version.rb +4 -2
  89. data/lib/octokit/warnable.rb +4 -5
  90. data/lib/octokit.rb +30 -8
  91. data/octokit.gemspec +12 -11
  92. metadata +22 -34
  93. data/lib/octokit/client/authorizations.rb +0 -182
  94. data/lib/octokit/client/pub_sub_hubbub.rb +0 -111
  95. data/lib/octokit/preview.rb +0 -46
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'octokit/configurable'
4
+ require 'octokit/connection'
5
+ require 'octokit/warnable'
6
+ require 'octokit/manage_ghes_client/manage_ghes'
7
+
8
+ module Octokit
9
+ # ManageGHESClient is only meant to be used by GitHub Enterprise Server (GHES) operators
10
+ # and provides access to the Manage GHES API endpoints.
11
+ #
12
+ # @see Octokit::Client Use Octokit::Client for regular API use for GitHub
13
+ # and GitHub Enterprise.
14
+ # @see https://developer.github.com/v3/enterprise-admin/manage-ghes/
15
+ class ManageGHESClient
16
+ include Octokit::Configurable
17
+ include Octokit::Connection
18
+ include Octokit::Warnable
19
+ include Octokit::ManageGHESClient::ManageAPI
20
+
21
+ def initialize(options = {})
22
+ # Use options passed in, but fall back to module defaults
23
+ # rubocop:disable Style/HashEachMethods
24
+ #
25
+ # This may look like a `.keys.each` which should be replaced with `#each_key`, but
26
+ # this doesn't actually work, since `#keys` is just a method we've defined ourselves.
27
+ # The class doesn't fulfill the whole `Enumerable` contract.
28
+ Octokit::Configurable.keys.each do |key|
29
+ # rubocop:enable Style/HashEachMethods
30
+ instance_variable_set(:"@#{key}", options[key] || Octokit.instance_variable_get(:"@#{key}"))
31
+ end
32
+ end
33
+
34
+ protected
35
+
36
+ def endpoint
37
+ manage_ghes_endpoint
38
+ end
39
+
40
+ # Set Manage GHES API endpoint
41
+ #
42
+ # @param value [String] Manage GHES API endpoint
43
+ def manage_ghes_endpoint=(value)
44
+ reset_agent
45
+ @manage_ghes_endpoint = value
46
+ end
47
+
48
+ # Set Manage GHES API username
49
+ #
50
+ # @param value [String] Manage GHES API username
51
+ def manage_ghes_username=(value)
52
+ reset_agent
53
+ @manage_ghes_username = value
54
+ end
55
+
56
+ # Set Manage GHES API password
57
+ #
58
+ # @param value [String] Manage GHES API password
59
+ def manage_ghes_password=(value)
60
+ reset_agent
61
+ @manage_ghes_password = value
62
+ end
63
+ end
64
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
  require 'set'
3
5
 
@@ -7,15 +9,13 @@ 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
14
  class RedirectLimitReached < Faraday::ClientError
15
15
  attr_reader :response
16
16
 
17
17
  def initialize(response)
18
- super "too many redirects; last one to: #{response['location']}"
18
+ super("too many redirects; last one to: #{response['location']}")
19
19
  @response = response
20
20
  end
21
21
  end
@@ -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,7 +44,7 @@ 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
  #
@@ -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,5 +1,6 @@
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
@@ -13,17 +14,18 @@ module Octokit
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.respond_to?(:headers) && !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,19 +1,18 @@
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
10
10
 
11
11
  def initialize(args)
12
- arguments = super(args)
12
+ arguments = super
13
13
  @repo = arguments.shift
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,7 +25,7 @@ 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
@@ -33,9 +35,7 @@ module Octokit
33
35
  else
34
36
  raise_invalid_repository!(repo)
35
37
  end
36
- if @owner && @name
37
- validate_owner_and_name!(repo)
38
- end
38
+ validate_owner_and_name!(repo) if @owner && @name
39
39
  end
40
40
 
41
41
  # Repository owner/name
@@ -43,18 +43,19 @@ 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
50
50
  return named_api_path if @owner && @name
51
- return id_api_path if @id
51
+
52
+ id_api_path if @id
52
53
  end
53
54
 
54
55
  # Get the api path for a repo
55
56
  # @param repo [Integer, String, Hash, Repository] A GitHub repository.
56
57
  # @return [String] Api path.
57
- def self.path repo
58
+ def self.path(repo)
58
59
  new(repo).path
59
60
  end
60
61
 
@@ -74,22 +75,28 @@ module Octokit
74
75
  "#{Octokit.web_endpoint}#{slug}"
75
76
  end
76
77
 
77
- alias :user :owner
78
- alias :username :owner
79
- alias :repo :name
78
+ alias user owner
79
+ alias username owner
80
+ alias repo name
80
81
 
81
82
  private
82
83
 
83
- def validate_owner_and_name!(repo)
84
- if @owner.include?('/') || @name.include?('/') || !url.match(URI::ABS_URI)
85
- raise_invalid_repository!(repo)
86
- end
87
- end
84
+ ABS_URI_REGEXP = if URI.const_defined?(:RFC2396_PARSER) # Ruby 3.4+
85
+ URI::RFC2396_PARSER.regexp.fetch(:ABS_URI)
86
+ else
87
+ URI::RFC2396_Parser.new.regexp.fetch(:ABS_URI)
88
+ end
88
89
 
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
90
+ def validate_owner_and_name!(repo)
91
+ if @owner.include?('/') || @name.include?('/') || !url.match?(ABS_URI_REGEXP)
92
+ raise_invalid_repository!(repo)
93
93
  end
94
+ end
95
+
96
+ def raise_invalid_repository!(repo)
97
+ msg = "#{repo.inspect} is invalid as a repository identifier. " \
98
+ 'Use the user/repo (String) format, or the repository ID (Integer), or a hash containing :repo and :user keys.'
99
+ raise Octokit::InvalidRepository, msg
100
+ end
94
101
  end
95
102
  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,19 +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
-
8
+ class FeedParser < BaseMiddleware
10
9
  def on_complete(env)
11
- if env[:response_headers]["content-type"] =~ /(\batom|\brss)/
10
+ if env[:response_headers]['content-type'] =~ /(\batom|\brss)/
12
11
  require 'rss'
13
12
  env[:body] = RSS::Parser.parse env[:body]
14
13
  end
15
14
  end
16
-
17
15
  end
18
16
  end
19
17
  end
@@ -1,14 +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
-
11
+ class RaiseError < BaseMiddleware
12
12
  def on_complete(response)
13
13
  if error = Octokit::Error.from_response(response)
14
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,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Octokit
2
4
  # Current major release.
3
5
  # @return [Integer]
4
- MAJOR = 4
6
+ MAJOR = 10
5
7
 
6
8
  # Current minor release.
7
9
  # @return [Integer]
8
- MINOR = 21
10
+ MINOR = 0
9
11
 
10
12
  # Current patch level.
11
13
  # @return [Integer]
@@ -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,13 @@
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'
7
+ require 'octokit/manage_ghes_client'
5
8
 
6
9
  # Ruby toolkit for the GitHub API
7
10
  module Octokit
8
-
9
11
  class << self
10
12
  include Octokit::Configurable
11
13
 
@@ -14,6 +16,7 @@ module Octokit
14
16
  # @return [Octokit::Client] API wrapper
15
17
  def client
16
18
  return @client if defined?(@client) && @client.same_options?(options)
19
+
17
20
  @client = Octokit::Client.new(options)
18
21
  end
19
22
 
@@ -21,7 +24,10 @@ module Octokit
21
24
  #
22
25
  # @return [Octokit::EnterpriseAdminClient] API wrapper
23
26
  def enterprise_admin_client
24
- return @enterprise_admin_client if defined?(@enterprise_admin_client) && @enterprise_admin_client.same_options?(options)
27
+ if defined?(@enterprise_admin_client) && @enterprise_admin_client.same_options?(options)
28
+ return @enterprise_admin_client
29
+ end
30
+
25
31
  @enterprise_admin_client = Octokit::EnterpriseAdminClient.new(options)
26
32
  end
27
33
 
@@ -29,16 +35,31 @@ module Octokit
29
35
  #
30
36
  # @return [Octokit::EnterpriseManagementConsoleClient] API wrapper
31
37
  def enterprise_management_console_client
32
- return @enterprise_management_console_client if defined?(@enterprise_management_console_client) && @enterprise_management_console_client.same_options?(options)
38
+ if defined?(@enterprise_management_console_client) && @enterprise_management_console_client.same_options?(options)
39
+ return @enterprise_management_console_client
40
+ end
41
+
33
42
  @enterprise_management_console_client = Octokit::EnterpriseManagementConsoleClient.new(options)
34
43
  end
35
44
 
45
+ # ManageGHESClient client based on configured options {Configurable}
46
+ #
47
+ # @return [Octokit::ManageGHESClient] API wrapper
48
+ def manage_ghes_client
49
+ if defined?(@manage_ghes_client) && @manage_ghes_client.same_options?(options)
50
+ return @manage_ghes_client
51
+ end
52
+
53
+ @manage_ghes_client = Octokit::ManageGHESClient.new(options)
54
+ end
55
+
36
56
  private
37
57
 
38
- def respond_to_missing?(method_name, include_private=false)
58
+ def respond_to_missing?(method_name, include_private = false)
39
59
  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)
60
+ enterprise_admin_client.respond_to?(method_name, include_private) ||
61
+ enterprise_management_console_client.respond_to?(method_name, include_private) ||
62
+ manage_ghes_client.respond_to?(method_name, include_private)
42
63
  end
43
64
 
44
65
  def method_missing(method_name, *args, &block)
@@ -48,11 +69,12 @@ module Octokit
48
69
  return enterprise_admin_client.send(method_name, *args, &block)
49
70
  elsif enterprise_management_console_client.respond_to?(method_name)
50
71
  return enterprise_management_console_client.send(method_name, *args, &block)
72
+ elsif manage_ghes_client.respond_to?(method_name)
73
+ return manage_ghes_client.send(method_name, *args, &block)
51
74
  end
52
75
 
53
76
  super
54
77
  end
55
-
56
78
  end
57
79
  end
58
80
 
data/octokit.gemspec CHANGED
@@ -1,23 +1,24 @@
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', '< 3'
8
- spec.add_dependency 'sawyer', '>= 0.5.3', '~> 0.8.0'
9
- spec.add_dependency 'faraday', '>= 0.9'
10
- spec.authors = ["Wynn Netherland", "Erik Michaels-Ober", "Clint Shryock"]
11
- spec.description = %q{Simple wrapper for the GitHub API}
8
+ spec.add_dependency 'faraday', '>= 1', '< 3'
9
+ spec.add_dependency 'sawyer', '~> 0.9'
10
+ spec.authors = ['Wynn Netherland', 'Erik Michaels-Ober', 'Clint Shryock']
11
+ spec.description = 'Simple wrapper for the GitHub API'
12
12
  spec.email = ['wynn.netherland@gmail.com', 'sferik@gmail.com', 'clint@ctshryock.com']
13
- spec.files = %w(.document CONTRIBUTING.md LICENSE.md README.md Rakefile octokit.gemspec)
14
- spec.files += Dir.glob("lib/**/*.rb")
13
+ spec.files = %w[.document CONTRIBUTING.md LICENSE.md README.md Rakefile octokit.gemspec]
14
+ spec.files += Dir.glob('lib/**/*.rb')
15
15
  spec.homepage = 'https://github.com/octokit/octokit.rb'
16
16
  spec.licenses = ['MIT']
17
17
  spec.name = 'octokit'
18
18
  spec.require_paths = ['lib']
19
- spec.required_ruby_version = '>= 2.0.0'
19
+ spec.required_ruby_version = '>= 2.7.0'
20
20
  spec.required_rubygems_version = '>= 1.3.5'
21
- spec.summary = "Ruby toolkit for working with the GitHub API"
21
+ spec.summary = 'Ruby toolkit for working with the GitHub API'
22
22
  spec.version = Octokit::VERSION.dup
23
+ spec.metadata = { 'rubygems_mfa_required' => 'true' }
23
24
  end