github_api 0.15.0 → 0.19.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 (113) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +770 -0
  3. data/README.md +25 -8
  4. data/lib/github_api.rb +37 -76
  5. data/lib/github_api/api.rb +46 -19
  6. data/lib/github_api/api/arguments.rb +6 -1
  7. data/lib/github_api/api/config.rb +3 -5
  8. data/lib/github_api/api/config/property_set.rb +1 -0
  9. data/lib/github_api/authorization.rb +2 -0
  10. data/lib/github_api/client.rb +5 -0
  11. data/lib/github_api/client/activity.rb +2 -0
  12. data/lib/github_api/client/activity/events.rb +2 -0
  13. data/lib/github_api/client/activity/feeds.rb +2 -0
  14. data/lib/github_api/client/activity/notifications.rb +2 -0
  15. data/lib/github_api/client/activity/starring.rb +3 -1
  16. data/lib/github_api/client/activity/watching.rb +3 -1
  17. data/lib/github_api/client/authorizations.rb +2 -0
  18. data/lib/github_api/client/authorizations/app.rb +3 -1
  19. data/lib/github_api/client/emojis.rb +2 -0
  20. data/lib/github_api/client/gists.rb +4 -2
  21. data/lib/github_api/client/gists/comments.rb +3 -1
  22. data/lib/github_api/client/git_data.rb +2 -0
  23. data/lib/github_api/client/git_data/blobs.rb +2 -1
  24. data/lib/github_api/client/git_data/commits.rb +2 -0
  25. data/lib/github_api/client/git_data/references.rb +6 -2
  26. data/lib/github_api/client/git_data/tags.rb +2 -0
  27. data/lib/github_api/client/git_data/trees.rb +2 -0
  28. data/lib/github_api/client/gitignore.rb +2 -0
  29. data/lib/github_api/client/issues.rb +2 -0
  30. data/lib/github_api/client/issues/assignees.rb +35 -0
  31. data/lib/github_api/client/issues/comments.rb +2 -0
  32. data/lib/github_api/client/issues/events.rb +2 -0
  33. data/lib/github_api/client/issues/labels.rb +2 -0
  34. data/lib/github_api/client/issues/milestones.rb +2 -0
  35. data/lib/github_api/client/markdown.rb +4 -2
  36. data/lib/github_api/client/meta.rb +2 -0
  37. data/lib/github_api/client/orgs.rb +6 -0
  38. data/lib/github_api/client/orgs/hooks.rb +2 -0
  39. data/lib/github_api/client/orgs/members.rb +2 -0
  40. data/lib/github_api/client/orgs/memberships.rb +2 -0
  41. data/lib/github_api/client/orgs/projects.rb +57 -0
  42. data/lib/github_api/client/orgs/teams.rb +5 -3
  43. data/lib/github_api/client/projects.rb +83 -0
  44. data/lib/github_api/client/projects/cards.rb +158 -0
  45. data/lib/github_api/client/projects/columns.rb +146 -0
  46. data/lib/github_api/client/pull_requests.rb +2 -0
  47. data/lib/github_api/client/pull_requests/comments.rb +2 -0
  48. data/lib/github_api/client/pull_requests/reviews.rb +2 -0
  49. data/lib/github_api/client/repos.rb +27 -15
  50. data/lib/github_api/client/repos/branches.rb +48 -0
  51. data/lib/github_api/client/repos/branches/protections.rb +75 -0
  52. data/lib/github_api/client/repos/collaborators.rb +2 -1
  53. data/lib/github_api/client/repos/comments.rb +2 -1
  54. data/lib/github_api/client/repos/commits.rb +2 -0
  55. data/lib/github_api/client/repos/contents.rb +26 -4
  56. data/lib/github_api/client/repos/deployments.rb +3 -1
  57. data/lib/github_api/client/repos/downloads.rb +2 -0
  58. data/lib/github_api/client/repos/forks.rb +6 -2
  59. data/lib/github_api/client/repos/hooks.rb +2 -0
  60. data/lib/github_api/client/repos/invitations.rb +41 -0
  61. data/lib/github_api/client/repos/keys.rb +2 -0
  62. data/lib/github_api/client/repos/merging.rb +2 -0
  63. data/lib/github_api/client/repos/pages.rb +2 -0
  64. data/lib/github_api/client/repos/projects.rb +62 -0
  65. data/lib/github_api/client/repos/pub_sub_hubbub.rb +6 -6
  66. data/lib/github_api/client/repos/releases.rb +2 -0
  67. data/lib/github_api/client/repos/releases/assets.rb +3 -1
  68. data/lib/github_api/client/repos/releases/tags.rb +2 -0
  69. data/lib/github_api/client/repos/statistics.rb +2 -0
  70. data/lib/github_api/client/repos/statuses.rb +2 -0
  71. data/lib/github_api/client/say.rb +2 -0
  72. data/lib/github_api/client/scopes.rb +2 -0
  73. data/lib/github_api/client/search.rb +3 -0
  74. data/lib/github_api/client/search/legacy.rb +2 -0
  75. data/lib/github_api/client/users.rb +2 -0
  76. data/lib/github_api/client/users/emails.rb +3 -0
  77. data/lib/github_api/client/users/followers.rb +3 -1
  78. data/lib/github_api/client/users/keys.rb +2 -0
  79. data/lib/github_api/configuration.rb +4 -1
  80. data/lib/github_api/connection.rb +5 -1
  81. data/lib/github_api/error.rb +1 -4
  82. data/lib/github_api/error/client_error.rb +4 -2
  83. data/lib/github_api/error/service_error.rb +9 -2
  84. data/lib/github_api/ext/faraday.rb +3 -1
  85. data/lib/github_api/mash.rb +7 -0
  86. data/lib/github_api/middleware.rb +8 -6
  87. data/lib/github_api/normalizer.rb +3 -5
  88. data/lib/github_api/page_iterator.rb +4 -1
  89. data/lib/github_api/page_links.rb +4 -0
  90. data/lib/github_api/paged_request.rb +2 -0
  91. data/lib/github_api/pagination.rb +10 -7
  92. data/lib/github_api/parameter_filter.rb +4 -1
  93. data/lib/github_api/params_hash.rb +4 -4
  94. data/lib/github_api/request.rb +8 -9
  95. data/lib/github_api/request/basic_auth.rb +1 -1
  96. data/lib/github_api/request/jsonize.rb +0 -1
  97. data/lib/github_api/request/oauth2.rb +2 -0
  98. data/lib/github_api/request/verbs.rb +3 -0
  99. data/lib/github_api/response/follow_redirects.rb +140 -0
  100. data/lib/github_api/response/header.rb +6 -1
  101. data/lib/github_api/response/mashify.rb +2 -3
  102. data/lib/github_api/response/raise_error.rb +2 -1
  103. data/lib/github_api/response_wrapper.rb +5 -0
  104. data/lib/github_api/utils/url.rb +2 -0
  105. data/lib/github_api/validations.rb +5 -8
  106. data/lib/github_api/validations/format.rb +2 -0
  107. data/lib/github_api/validations/presence.rb +3 -1
  108. data/lib/github_api/validations/required.rb +2 -0
  109. data/lib/github_api/version.rb +2 -2
  110. metadata +100 -36
  111. data/lib/github_api/core_ext/ordered_hash.rb +0 -107
  112. data/lib/github_api/requestable.rb +0 -67
  113. data/lib/github_api/resource.rb +0 -13
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../api'
4
+
3
5
  module Github
4
6
  # The Releases API
5
7
  class Client::Repos::Releases < API
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../../api'
4
+
3
5
  module Github
4
6
  # The Release Assets API
5
7
  class Client::Repos::Releases::Assets < API
@@ -35,7 +37,7 @@ module Github
35
37
  #
36
38
  # @api public
37
39
  def get(*args)
38
- params = arguments(args, required: [:owner, :repo, :id]).params
40
+ arguments(args, required: [:owner, :repo, :id]).params
39
41
 
40
42
  get_request("/repos/#{arguments.owner}/#{arguments.repo}/releases/assets/#{arguments.id}" , arguments.params)
41
43
  end
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../../api'
4
+
3
5
  module Github
4
6
  # The Releases API
5
7
  class Client::Repos::Releases::Tags < API
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../api'
4
+
3
5
  module Github
4
6
  # The Repository Statistics API allows you to fetch the data that GitHub uses
5
7
  # for visualizing different types of repository activity.
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../api'
4
+
3
5
  module Github
4
6
  # The Status API allows external services to mark commits with a success,
5
7
  # failure, error, or pending state, which is then reflected in pull requests
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../api'
4
+
3
5
  module Github
4
6
  class Client::Say < API
5
7
 
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../api'
4
+
3
5
  module Github
4
6
  class Client::Scopes < API
5
7
  # Check what OAuth scopes you have.
@@ -1,5 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../api'
4
+ require_relative '../utils/url'
5
+
3
6
  module Github
4
7
  # The Search API is optimized to help you find the specific item
5
8
  # you're looking for (e.g., a specific user, a specific file
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../api'
4
+
3
5
  module Github
4
6
  class Client::Search::Legacy < API
5
7
  include Github::Utils::Url
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../api'
4
+
3
5
  module Github
4
6
  class Client::Users < API
5
7
  # Load all the modules after initializing Repos to avoid superclass mismatch
@@ -1,6 +1,9 @@
1
1
  # encoding: utf-8
2
+
2
3
  require 'cgi'
3
4
 
5
+ require_relative '../../api'
6
+
4
7
  module Github
5
8
  class Client::Users::Emails < API
6
9
 
@@ -1,11 +1,13 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../api'
4
+
3
5
  module Github
4
6
  class Client::Users::Followers < API
5
7
 
6
8
  # List a user's followers
7
9
  #
8
- # @xample
10
+ # @example
9
11
  # github = Github.new
10
12
  # github.users.followers.list 'user-name'
11
13
  # github.users.followers.list 'user-name' { |user| ... }
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../../api'
4
+
3
5
  module Github
4
6
  class Client::Users::Keys < API
5
7
 
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'github_api/api/config'
3
+ require_relative 'api/config'
4
+ require_relative 'version'
4
5
 
5
6
  module Github
6
7
  # Stores the configuration
@@ -12,6 +13,8 @@ module Github
12
13
  # By default, don't traverse the page links
13
14
  property :auto_pagination, default: false
14
15
 
16
+ property :follow_redirects, default: true
17
+
15
18
  # Basic authentication
16
19
  property :basic_auth
17
20
 
@@ -1,5 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require 'faraday'
4
+
5
+ require_relative 'constants'
6
+
3
7
  module Github
4
8
  # Specifies Http connection options
5
9
  module Connection
@@ -61,7 +65,7 @@ module Github
61
65
 
62
66
  # Creates http connection
63
67
  #
64
- # Returns a Fraday::Connection object
68
+ # Returns a Faraday::Connection object
65
69
  def connection(api, options = {})
66
70
  connection_options = default_options(options)
67
71
  connection_options.merge!(builder: stack(options.merge!(api: api)))
@@ -21,7 +21,7 @@ module Github
21
21
  end
22
22
 
23
23
  def backtrace
24
- if @response_message && @response_message.respond_to?(:backtrace)
24
+ if @response_message.respond_to?(:backtrace)
25
25
  @response_message.backtrace
26
26
  else
27
27
  super
@@ -30,6 +30,3 @@ module Github
30
30
  end # GithubError
31
31
  end # Error
32
32
  end # Github
33
-
34
- require 'github_api/error/service_error'
35
- require 'github_api/error/client_error'
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative '../error'
4
+
3
5
  module Github #:nodoc
4
6
  # Raised when Github returns the HTTP status code 404
5
7
  module Error
@@ -26,7 +28,7 @@ module Github #:nodoc
26
28
  super(
27
29
  generate_message(
28
30
  problem: "Invalid option #{invalid.keys.join(', ')} provided for this request.",
29
- summary: "Github gem checks the request parameters passed to ensure that github api is not hit unnecessairly and to fail fast.",
31
+ summary: "Github gem checks the request parameters passed to ensure that github api is not hit unnecessarily and to fail fast.",
30
32
  resolution: "Valid options are: #{valid.join(', ')}, make sure these are the ones you are using"
31
33
  )
32
34
  )
@@ -39,7 +41,7 @@ module Github #:nodoc
39
41
  super(
40
42
  generate_message(
41
43
  problem: "Missing required parameters: #{provided.keys.join(', ')} provided for this request.",
42
- summary: "Github gem checks the request parameters passed to ensure that github api is not hit unnecessairly and to fail fast.",
44
+ summary: "Github gem checks the request parameters passed to ensure that github api is not hit unnecessarily and to fail fast.",
43
45
  resolution: "Required parameters are: #{required.join(', ')}, make sure these are the ones you are using"
44
46
  )
45
47
  )
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'json'
4
4
 
5
+ require_relative '../error'
6
+
5
7
  module Github
6
8
  # Raised when GitHub returns any of the HTTP status codes
7
9
  module Error
@@ -31,7 +33,7 @@ module Github
31
33
 
32
34
  MIN_BODY_LENGTH = 2
33
35
 
34
- # Crate a ServiceError
36
+ # Create a ServiceError
35
37
  #
36
38
  # @param [Hash[Symbol]] response
37
39
  #
@@ -137,7 +139,12 @@ module Github
137
139
  elsif data[:errors]
138
140
  message = "\nErrors:\n"
139
141
  message << data[:errors].map do |error|
140
- "Error: #{error.map { |k, v| "#{k}: #{v}" }.join(', ')}"
142
+ case error
143
+ when Hash
144
+ "Error: #{error.map { |k, v| "#{k}: #{v}" }.join(', ')}"
145
+ else
146
+ "Error: #{error}"
147
+ end
141
148
  end.join("\n")
142
149
  end
143
150
  end
@@ -7,7 +7,7 @@ module Faraday
7
7
  def params_encoder(encoder = nil)
8
8
  if encoder
9
9
  @encoder = encoder
10
- else
10
+ elsif defined?(@encoder)
11
11
  @encoder
12
12
  end
13
13
  end
@@ -17,6 +17,8 @@ module Faraday
17
17
  end
18
18
  end
19
19
 
20
+ module_function
21
+
20
22
  def build_nested_query(value, prefix = nil, encoder = nil)
21
23
  case value
22
24
  when Array
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Github
4
+ class Mash < ::Hashie::Mash
5
+ disable_warnings
6
+ end
7
+ end
@@ -1,11 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'github_api/response'
4
- require 'github_api/response/mashify'
5
- require 'github_api/response/jsonize'
6
- require 'github_api/response/atom_parser'
7
- require 'github_api/response/raise_error'
8
- require 'github_api/response/header'
3
+ require_relative 'response'
4
+ require_relative 'response/mashify'
5
+ require_relative 'response/jsonize'
6
+ require_relative 'response/atom_parser'
7
+ require_relative 'response/raise_error'
8
+ require_relative 'response/header'
9
+ require_relative 'response/follow_redirects'
9
10
 
10
11
  module Github
11
12
  class Middleware
@@ -18,6 +19,7 @@ module Github
18
19
  builder.use Github::Request::OAuth2, api.oauth_token if api.oauth_token?
19
20
  builder.use Github::Request::BasicAuth, api.authentication if api.basic_authed?
20
21
 
22
+ builder.use Github::Response::FollowRedirects if api.follow_redirects
21
23
  builder.use Faraday::Response::Logger if ENV['DEBUG']
22
24
  unless options[:raw]
23
25
  builder.use Github::Response::Mashify
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
2
3
 
3
4
  module Github
4
- # Deals with normalazing client supplied parameter keys.
5
+ # Normalize client-supplied parameter keys.
5
6
  module Normalizer
6
7
  # Turns any keys from nested hashes including nested arrays into strings
7
- #
8
8
  def normalize!(params)
9
9
  case params
10
10
  when Hash
@@ -16,10 +16,8 @@ module Github
16
16
  params.map! do |el|
17
17
  normalize!(el)
18
18
  end
19
- else
20
- params.to_s
21
19
  end
22
- return params
20
+ params
23
21
  end
24
22
  end # Normalizer
25
23
  end # Github
@@ -1,8 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'github_api/utils/url'
4
3
  require 'uri'
5
4
 
5
+ require_relative 'constants'
6
+ require_relative 'paged_request'
7
+ require_relative 'utils/url'
8
+
6
9
  module Github
7
10
  # A class responsible for requesting resources through page links
8
11
  #
@@ -1,3 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'constants'
4
+
1
5
  module Github
2
6
  # Determines the links in the current response link header to be used
3
7
  # to find the links to other pages of request responses. These will
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require_relative 'constants'
4
+
3
5
  module Github
4
6
 
5
7
  # A module that adds http get request to response pagination
@@ -1,7 +1,10 @@
1
1
  # encoding: utf-8
2
2
 
3
- module Github
3
+ require_relative 'constants'
4
+ require_relative 'page_links'
5
+ require_relative 'page_iterator'
4
6
 
7
+ module Github
5
8
  # A module that decorates response with pagination helpers
6
9
  module Pagination
7
10
  include Github::Constants
@@ -11,7 +14,7 @@ module Github
11
14
  @links = Github::PageLinks.new(env[:response_headers])
12
15
  end
13
16
 
14
- # Retrive number of total pages base on current :per_page parameter
17
+ # Retrieve number of total pages base on current :per_page parameter
15
18
  def count_pages
16
19
  page_iterator.count.to_i
17
20
  end
@@ -40,7 +43,7 @@ module Github
40
43
  end
41
44
  end
42
45
 
43
- # Retrives the result of the first page. Returns <tt>nil</tt> if there is
46
+ # Retrieves the result of the first page. Returns <tt>nil</tt> if there is
44
47
  # no first page - either because you are already on the first page
45
48
  # or there are no pages at all in the result.
46
49
  def first_page
@@ -49,7 +52,7 @@ module Github
49
52
  first_request
50
53
  end
51
54
 
52
- # Retrives the result of the next page. Returns <tt>nil</tt> if there is
55
+ # Retrieves the result of the next page. Returns <tt>nil</tt> if there is
53
56
  # no next page or no pages at all.
54
57
  def next_page
55
58
  next_request = page_iterator.next
@@ -57,7 +60,7 @@ module Github
57
60
  next_request
58
61
  end
59
62
 
60
- # Retrives the result of the previous page. Returns <tt>nil</tt> if there is
63
+ # Retrieves the result of the previous page. Returns <tt>nil</tt> if there is
61
64
  # no previous page or no pages at all.
62
65
  def prev_page
63
66
  prev_request = page_iterator.prev
@@ -66,7 +69,7 @@ module Github
66
69
  end
67
70
  alias :previous_page :prev_page
68
71
 
69
- # Retrives the result of the last page. Returns <tt>nil</tt> if there is
72
+ # Retrieves the result of the last page. Returns <tt>nil</tt> if there is
70
73
  # no last page - either because you are already on the last page,
71
74
  # there is only one page or there are no pages at all in the result.
72
75
  def last_page
@@ -75,7 +78,7 @@ module Github
75
78
  last_request
76
79
  end
77
80
 
78
- # Retrives a specific result for a page given page number.
81
+ # Retrieves a specific result for a page given page number.
79
82
  # The <tt>page_number</tt> parameter is not validate, hitting a page
80
83
  # that does not exist will return Github API error. Consequently, if
81
84
  # there is only one page, this method returns nil
@@ -1,4 +1,7 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
+
3
+ require_relative 'params_hash'
4
+ require_relative 'validations'
2
5
 
3
6
  module Github
4
7
  # Allows you to specify parameters keys which will be preserved
@@ -3,13 +3,16 @@
3
3
  require 'delegate'
4
4
  require 'base64'
5
5
 
6
+ require_relative 'normalizer'
7
+ require_relative 'mime_type'
8
+
6
9
  module Github
7
10
  # Class responsible for holding request parameters
8
11
  class ParamsHash < DelegateClass(Hash)
9
12
  include Normalizer
10
13
  include MimeType
11
14
 
12
- REQUEST_PARAMS = [:accept, :media, :data, :raw, :content_type, :headers]
15
+ REQUEST_PARAMS = [:accept, :media, :data, :raw, :headers]
13
16
 
14
17
  def initialize(hash)
15
18
  super(normalize!(Hash[hash]))
@@ -71,9 +74,6 @@ module Github
71
74
  if value = accept
72
75
  headers[:accept] = value
73
76
  end
74
- if self['content_type']
75
- headers[:content_type] = self['content_type']
76
- end
77
77
  opts[:raw] = key?('raw') ? self['raw'] : false
78
78
  opts[:headers] = headers unless headers.empty?
79
79
  opts