lingfennan-github_api 0.18.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +741 -0
  4. data/lib/github_api.rb +93 -0
  5. data/lib/github_api/api.rb +398 -0
  6. data/lib/github_api/api/actions.rb +60 -0
  7. data/lib/github_api/api/arguments.rb +253 -0
  8. data/lib/github_api/api/config.rb +105 -0
  9. data/lib/github_api/api/config/property.rb +30 -0
  10. data/lib/github_api/api/config/property_set.rb +120 -0
  11. data/lib/github_api/api/factory.rb +33 -0
  12. data/lib/github_api/authorization.rb +75 -0
  13. data/lib/github_api/client.rb +77 -0
  14. data/lib/github_api/client/activity.rb +31 -0
  15. data/lib/github_api/client/activity/events.rb +233 -0
  16. data/lib/github_api/client/activity/feeds.rb +50 -0
  17. data/lib/github_api/client/activity/notifications.rb +181 -0
  18. data/lib/github_api/client/activity/starring.rb +130 -0
  19. data/lib/github_api/client/activity/watching.rb +176 -0
  20. data/lib/github_api/client/authorizations.rb +142 -0
  21. data/lib/github_api/client/authorizations/app.rb +98 -0
  22. data/lib/github_api/client/emojis.rb +19 -0
  23. data/lib/github_api/client/gists.rb +289 -0
  24. data/lib/github_api/client/gists/comments.rb +100 -0
  25. data/lib/github_api/client/git_data.rb +31 -0
  26. data/lib/github_api/client/git_data/blobs.rb +51 -0
  27. data/lib/github_api/client/git_data/commits.rb +101 -0
  28. data/lib/github_api/client/git_data/references.rb +150 -0
  29. data/lib/github_api/client/git_data/tags.rb +95 -0
  30. data/lib/github_api/client/git_data/trees.rb +113 -0
  31. data/lib/github_api/client/gitignore.rb +57 -0
  32. data/lib/github_api/client/issues.rb +248 -0
  33. data/lib/github_api/client/issues/assignees.rb +77 -0
  34. data/lib/github_api/client/issues/comments.rb +146 -0
  35. data/lib/github_api/client/issues/events.rb +50 -0
  36. data/lib/github_api/client/issues/labels.rb +189 -0
  37. data/lib/github_api/client/issues/milestones.rb +146 -0
  38. data/lib/github_api/client/markdown.rb +62 -0
  39. data/lib/github_api/client/meta.rb +19 -0
  40. data/lib/github_api/client/orgs.rb +127 -0
  41. data/lib/github_api/client/orgs/hooks.rb +182 -0
  42. data/lib/github_api/client/orgs/members.rb +142 -0
  43. data/lib/github_api/client/orgs/memberships.rb +131 -0
  44. data/lib/github_api/client/orgs/projects.rb +57 -0
  45. data/lib/github_api/client/orgs/teams.rb +407 -0
  46. data/lib/github_api/client/projects.rb +83 -0
  47. data/lib/github_api/client/projects/cards.rb +158 -0
  48. data/lib/github_api/client/projects/columns.rb +146 -0
  49. data/lib/github_api/client/pull_requests.rb +195 -0
  50. data/lib/github_api/client/pull_requests/comments.rb +140 -0
  51. data/lib/github_api/client/pull_requests/reviews.rb +158 -0
  52. data/lib/github_api/client/repos.rb +468 -0
  53. data/lib/github_api/client/repos/branches.rb +48 -0
  54. data/lib/github_api/client/repos/branches/protections.rb +75 -0
  55. data/lib/github_api/client/repos/collaborators.rb +84 -0
  56. data/lib/github_api/client/repos/comments.rb +125 -0
  57. data/lib/github_api/client/repos/commits.rb +80 -0
  58. data/lib/github_api/client/repos/contents.rb +246 -0
  59. data/lib/github_api/client/repos/deployments.rb +138 -0
  60. data/lib/github_api/client/repos/downloads.rb +62 -0
  61. data/lib/github_api/client/repos/forks.rb +48 -0
  62. data/lib/github_api/client/repos/hooks.rb +214 -0
  63. data/lib/github_api/client/repos/keys.rb +104 -0
  64. data/lib/github_api/client/repos/merging.rb +47 -0
  65. data/lib/github_api/client/repos/pages.rb +48 -0
  66. data/lib/github_api/client/repos/projects.rb +62 -0
  67. data/lib/github_api/client/repos/pub_sub_hubbub.rb +133 -0
  68. data/lib/github_api/client/repos/releases.rb +189 -0
  69. data/lib/github_api/client/repos/releases/assets.rb +136 -0
  70. data/lib/github_api/client/repos/releases/tags.rb +24 -0
  71. data/lib/github_api/client/repos/statistics.rb +89 -0
  72. data/lib/github_api/client/repos/statuses.rb +91 -0
  73. data/lib/github_api/client/say.rb +25 -0
  74. data/lib/github_api/client/scopes.rb +46 -0
  75. data/lib/github_api/client/search.rb +133 -0
  76. data/lib/github_api/client/search/legacy.rb +111 -0
  77. data/lib/github_api/client/users.rb +117 -0
  78. data/lib/github_api/client/users/emails.rb +65 -0
  79. data/lib/github_api/client/users/followers.rb +115 -0
  80. data/lib/github_api/client/users/keys.rb +104 -0
  81. data/lib/github_api/configuration.rb +70 -0
  82. data/lib/github_api/connection.rb +82 -0
  83. data/lib/github_api/constants.rb +61 -0
  84. data/lib/github_api/core_ext/array.rb +25 -0
  85. data/lib/github_api/core_ext/hash.rb +91 -0
  86. data/lib/github_api/core_ext/ordered_hash.rb +107 -0
  87. data/lib/github_api/deprecation.rb +39 -0
  88. data/lib/github_api/error.rb +32 -0
  89. data/lib/github_api/error/client_error.rb +89 -0
  90. data/lib/github_api/error/service_error.rb +223 -0
  91. data/lib/github_api/ext/faraday.rb +38 -0
  92. data/lib/github_api/mash.rb +7 -0
  93. data/lib/github_api/middleware.rb +37 -0
  94. data/lib/github_api/mime_type.rb +33 -0
  95. data/lib/github_api/normalizer.rb +23 -0
  96. data/lib/github_api/null_encoder.rb +25 -0
  97. data/lib/github_api/page_iterator.rb +138 -0
  98. data/lib/github_api/page_links.rb +63 -0
  99. data/lib/github_api/paged_request.rb +42 -0
  100. data/lib/github_api/pagination.rb +115 -0
  101. data/lib/github_api/parameter_filter.rb +35 -0
  102. data/lib/github_api/params_hash.rb +115 -0
  103. data/lib/github_api/rate_limit.rb +25 -0
  104. data/lib/github_api/request.rb +85 -0
  105. data/lib/github_api/request/basic_auth.rb +36 -0
  106. data/lib/github_api/request/jsonize.rb +54 -0
  107. data/lib/github_api/request/oauth2.rb +44 -0
  108. data/lib/github_api/request/verbs.rb +63 -0
  109. data/lib/github_api/response.rb +48 -0
  110. data/lib/github_api/response/atom_parser.rb +22 -0
  111. data/lib/github_api/response/follow_redirects.rb +140 -0
  112. data/lib/github_api/response/header.rb +87 -0
  113. data/lib/github_api/response/jsonize.rb +28 -0
  114. data/lib/github_api/response/mashify.rb +24 -0
  115. data/lib/github_api/response/raise_error.rb +22 -0
  116. data/lib/github_api/response/xmlize.rb +27 -0
  117. data/lib/github_api/response_wrapper.rb +161 -0
  118. data/lib/github_api/ssl_certs/cacerts.pem +2183 -0
  119. data/lib/github_api/utils/url.rb +63 -0
  120. data/lib/github_api/validations.rb +22 -0
  121. data/lib/github_api/validations/format.rb +26 -0
  122. data/lib/github_api/validations/presence.rb +32 -0
  123. data/lib/github_api/validations/required.rb +21 -0
  124. data/lib/github_api/validations/token.rb +41 -0
  125. data/lib/github_api/version.rb +5 -0
  126. metadata +338 -0
@@ -0,0 +1,83 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../api'
5
+
6
+ module Github
7
+ # Projects API
8
+ class Client::Projects < API
9
+ PREVIEW_MEDIA = "application/vnd.github.inertia-preview+json" # :nodoc:
10
+
11
+ require_all 'github_api/client/projects',
12
+ 'columns',
13
+ 'cards'
14
+
15
+ # Access to Projects::Columns API
16
+ namespace :columns
17
+
18
+ # Access to Projects::Cards API
19
+ namespace :cards
20
+
21
+ # Get properties for a single project
22
+ #
23
+ # @see https://developer.github.com/v3/projects/#get-a-project
24
+ #
25
+ # @example
26
+ # github = Github.new
27
+ # github.projects.get 1002604
28
+ #
29
+ # @api public
30
+ def get(*args)
31
+ arguments(args, required: [:id])
32
+ params = arguments.params
33
+
34
+ params["accept"] ||= PREVIEW_MEDIA
35
+
36
+ get_request("/projects/#{arguments.id}", params)
37
+ end
38
+ alias find get
39
+
40
+ # Edit a project
41
+ #
42
+ # @param [Hash] params
43
+ # @option params [String] :name
44
+ # Optional string
45
+ # @option params [String] :body
46
+ # Optional string
47
+ # @option params [String] :state
48
+ # Optional string
49
+ #
50
+ # @example
51
+ # github = Github.new
52
+ # github.projects.edit 1002604,
53
+ # name: "Outcomes Tracker",
54
+ # body: "The board to track work for the Outcomes application."
55
+ #
56
+ # @api public
57
+ def edit(*args)
58
+ arguments(args, required: [:id])
59
+ params = arguments.params
60
+
61
+ params["accept"] ||= PREVIEW_MEDIA
62
+
63
+ patch_request("/projects/#{arguments.id}", params)
64
+ end
65
+
66
+ # Delete a project
67
+ #
68
+ # @example
69
+ # github = Github.new
70
+ # github.projects.delete 1002604
71
+ #
72
+ # @api public
73
+ def delete(*args)
74
+ arguments(args, required: [:id])
75
+ params = arguments.params
76
+
77
+ params["accept"] ||= PREVIEW_MEDIA
78
+
79
+ delete_request("/projects/#{arguments.id}", arguments.params)
80
+ end
81
+ alias remove delete
82
+ end # Projects
83
+ end # Github
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require_relative '../../api'
5
+
6
+ module Github
7
+ class Client::Projects::Cards < API
8
+ REQUIRED_MOVE_CARD_PARAMS = %w(position).freeze
9
+
10
+ # List project cards for a column
11
+ #
12
+ # @example
13
+ # github = Github.new
14
+ # github.projects.cards.list :column_id
15
+ #
16
+ # @see https://developer.github.com/v3/projects/cards/#list-project-cards
17
+ #
18
+ # @api public
19
+ def list(*args)
20
+ arguments(args, required: [:column_id])
21
+ params = arguments.params
22
+
23
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
24
+
25
+ response = get_request("/projects/columns/#{arguments.column_id}/cards", params)
26
+
27
+ return response unless block_given?
28
+ response.each { |el| yield el }
29
+ end
30
+ alias all list
31
+
32
+ # Get a project card
33
+ #
34
+ # @example
35
+ # github = Github.new
36
+ # github.projects.cards.get :card_id
37
+ #
38
+ # @see https://developer.github.com/v3/projects/cards/#get-a-project-card
39
+ #
40
+ # @api public
41
+ def get(*args)
42
+ arguments(args, required: [:card_id])
43
+ params = arguments.params
44
+
45
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
46
+
47
+ get_request("/projects/columns/cards/#{arguments.card_id}", params)
48
+ end
49
+ alias find get
50
+
51
+ # Create a project card for a column
52
+ #
53
+ # @param [Hash] params
54
+ # @option params [String] :note
55
+ # The card's note content. Only valid for cards without another type of
56
+ # content, so this must be omitted if content_id and content_type are
57
+ # specified.
58
+ # @option params [Integer] :content_id
59
+ # The id of the Issue to associate with this card.
60
+ # @option params [String] :content_type
61
+ # The type of content to associate with this card. Can only be "Issue" at
62
+ # this time.
63
+ #
64
+ # @example
65
+ # github = Github.new
66
+ # github.projects.cards.create :column_id, note: 'Card Note'
67
+ #
68
+ # @example
69
+ # github = Github.new
70
+ # github.projects.cards.create :column_id, content_id: <content-id>, content_type: 'content-type'
71
+ #
72
+ # @see https://developer.github.com/v3/projects/cards/#create-a-project-card
73
+ #
74
+ # @api public
75
+ def create(*args)
76
+ arguments(args, required: [:column_id])
77
+ params = arguments.params
78
+
79
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
80
+
81
+ post_request("/projects/columns/#{arguments.column_id}/cards", params)
82
+ end
83
+
84
+ # Update a project card
85
+ #
86
+ # @param [Hash] params
87
+ # @option params [String] :note
88
+ # The card's note content. Only valid for cards without another type of
89
+ # content, so this cannot be specified if the card already has a
90
+ # content_id and content_type.
91
+ #
92
+ # @example
93
+ # github = Github.new
94
+ # github.projects.cards.update :card_id, note: 'New card note'
95
+ #
96
+ # @see https://developer.github.com/v3/projects/cards/#update-a-project-card
97
+ #
98
+ # @api public
99
+ def update(*args)
100
+ arguments(args, required: [:card_id])
101
+ params = arguments.params
102
+
103
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
104
+
105
+ patch_request("/projects/columns/cards/#{arguments.card_id}", params)
106
+ end
107
+ alias edit update
108
+
109
+ # Delete a project card
110
+ #
111
+ # @example
112
+ # github = Github.new
113
+ # github.projects.cards.delete :card_id
114
+ #
115
+ # @see https://developer.github.com/v3/projects/cards/#delete-a-project-card
116
+ #
117
+ # @api public
118
+ def delete(*args)
119
+ arguments(args, required: [:card_id])
120
+ params = arguments.params
121
+
122
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
123
+
124
+ delete_request("/projects/columns/cards/#{arguments.card_id}", params)
125
+ end
126
+ alias remove delete
127
+
128
+ # Move a project card
129
+ #
130
+ # @param [Hash] params
131
+ # @option params [String] :position
132
+ # Required. Required. Can be one of 'first', 'last', or
133
+ # 'after:<column-id>', where <column-id> is the id value of a column in
134
+ # the same project.
135
+ #
136
+ # @example
137
+ # github = Github.new
138
+ # github.projects.cards.move :card_id, position: 'bottom'
139
+ #
140
+ # @example
141
+ # github = Github.new
142
+ # github.projects.cards.move :card_id, position: 'after:<card-id>', column_id: <column-id>
143
+ #
144
+ # @see https://developer.github.com/v3/projects/cards/#move-a-project-card
145
+ #
146
+ # @api public
147
+ def move(*args)
148
+ arguments(args, required: [:card_id]) do
149
+ assert_required REQUIRED_MOVE_CARD_PARAMS
150
+ end
151
+ params = arguments.params
152
+
153
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
154
+
155
+ post_request("/projects/columns/cards/#{arguments.card_id}/moves", params)
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,146 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require_relative '../../api'
5
+
6
+ module Github
7
+ class Client::Projects::Columns < API
8
+ REQUIRED_COLUMN_PARAMS = %w(name).freeze
9
+ REQUIRED_MOVE_COLUMN_PARAMS = %w(position).freeze
10
+
11
+ # List a project's columns
12
+ #
13
+ # @example
14
+ # github = Github.new
15
+ # github.projects.columns.list :project_id
16
+ #
17
+ # @see https://developer.github.com/v3/projects/columns/#list-project-columns
18
+ #
19
+ # @api public
20
+ def list(*args)
21
+ arguments(args, required: [:project_id])
22
+ params = arguments.params
23
+
24
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
25
+
26
+ response = get_request("/projects/#{arguments.project_id}/columns", params)
27
+
28
+ return response unless block_given?
29
+ response.each { |el| yield el }
30
+ end
31
+ alias all list
32
+
33
+ # Get a project columns
34
+ #
35
+ # @example
36
+ # github = Github.new
37
+ # github.projects.columns.get :column_id
38
+ #
39
+ # @see https://developer.github.com/v3/projects/columns/#get-a-project-column
40
+ #
41
+ # @api public
42
+ def get(*args)
43
+ arguments(args, required: [:column_id])
44
+ params = arguments.params
45
+
46
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
47
+
48
+ get_request("/projects/columns/#{arguments.column_id}", params)
49
+ end
50
+ alias find get
51
+
52
+ # Create a project column
53
+ #
54
+ # @param [Hash] params
55
+ # @option params [String] :name
56
+ # Required. The name of the column.
57
+ #
58
+ # @example
59
+ # github = Github.new
60
+ # github.projects.columns.create :project_id, name: 'column-name'
61
+ #
62
+ # @see https://developer.github.com/v3/projects/columns/#create-a-project-column
63
+ #
64
+ # @api public
65
+ def create(*args)
66
+ arguments(args, required: [:project_id]) do
67
+ assert_required REQUIRED_COLUMN_PARAMS
68
+ end
69
+ params = arguments.params
70
+
71
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
72
+
73
+ post_request("/projects/#{arguments.project_id}/columns", params)
74
+ end
75
+
76
+ # Update a project column
77
+ #
78
+ # @param [Hash] params
79
+ # @option params [String] :name
80
+ # Required. The name of the column.
81
+ #
82
+ # @example
83
+ # github = Github.new
84
+ # github.repos.projects.update :column_id, name: 'new-column-name'
85
+ #
86
+ # @see https://developer.github.com/v3/projects/columns/#update-a-project-column
87
+ #
88
+ # @api public
89
+ def update(*args)
90
+ arguments(args, required: [:column_id]) do
91
+ assert_required REQUIRED_COLUMN_PARAMS
92
+ end
93
+ params = arguments.params
94
+
95
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
96
+
97
+ patch_request("/projects/columns/#{arguments.column_id}", params)
98
+ end
99
+ alias edit update
100
+
101
+ # Delete a project column
102
+ #
103
+ # @example
104
+ # github = Github.new
105
+ # github.projects.columns.delete :column_id
106
+ #
107
+ # @see https://developer.github.com/v3/projects/columns/#delete-a-project-column
108
+ #
109
+ # @api public
110
+ def delete(*args)
111
+ arguments(args, required: [:column_id])
112
+ params = arguments.params
113
+
114
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
115
+
116
+ delete_request("/projects/columns/#{arguments.column_id}", params)
117
+ end
118
+ alias remove delete
119
+
120
+ # Move a project column
121
+ #
122
+ # @param [Hash] params
123
+ # @option params [String] :position
124
+ # Required. Required. Can be one of 'first', 'last', or
125
+ # 'after:<column-id>', where <column-id> is the id value of a column in
126
+ # the same project.
127
+ #
128
+ # @example
129
+ # github = Github.new
130
+ # github.projects.columns.move :column_id, position: 'first'
131
+ #
132
+ # @see https://developer.github.com/v3/projects/columns/#move-a-project-column
133
+ #
134
+ # @api public
135
+ def move(*args)
136
+ arguments(args, required: [:column_id]) do
137
+ assert_required REQUIRED_MOVE_COLUMN_PARAMS
138
+ end
139
+ params = arguments.params
140
+
141
+ params["accept"] ||= ::Github::Client::Projects::PREVIEW_MEDIA
142
+
143
+ post_request("/projects/columns/#{arguments.column_id}/moves", params)
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,195 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../api'
4
+
5
+ module Github
6
+ class Client::PullRequests < API
7
+
8
+ require_all 'github_api/client/pull_requests', 'comments', 'reviews'
9
+
10
+ # Access to PullRequests::Comments API
11
+ namespace :comments
12
+ # Access to PullRequests::Reviews API
13
+ namespace :reviews
14
+
15
+ # List pull requests
16
+ #
17
+ # @example
18
+ # github = Github.new user: 'user-name', repo: 'repo-name'
19
+ # github.pull_requests.list
20
+ # github.pull_requests.list { |req| ... }
21
+ #
22
+ # @example
23
+ # pulls = Github::PullRequests.new
24
+ # pulls.pull_requests.list 'user-name', 'repo-name'
25
+ #
26
+ # @api public
27
+ def list(*args)
28
+ arguments(args, required: [:user, :repo])
29
+
30
+ response = get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls",
31
+ arguments.params)
32
+ return response unless block_given?
33
+ response.each { |el| yield el }
34
+ end
35
+ alias_method :all, :list
36
+
37
+ # Get a single pull request
38
+ #
39
+ # = Examples
40
+ # github = Github.new
41
+ # github.pull_requests.get 'user-name', 'repo-name', 'number'
42
+ #
43
+ # pulls = Github::PullRequests.new
44
+ # pulls.get 'user-name', 'repo-name', 'number'
45
+ #
46
+ def get(*args)
47
+ arguments(args, required: [:user, :repo, :number])
48
+
49
+ get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}", arguments.params)
50
+ end
51
+ alias_method :find, :get
52
+
53
+ # Create a pull request
54
+ #
55
+ # @param [Hash] params
56
+ # @option params [String] :title
57
+ # Required string
58
+ # @option params [String] :body
59
+ # Optional string
60
+ # @option params [String] :base
61
+ # Required string - The branch you want your changes pulled into.
62
+ # @option params [String] :head
63
+ # Required string - The branch where your changes are implemented.
64
+ #
65
+ # @note: head and base can be either a sha or a branch name.
66
+ # Typically you would namespace head with a user like this: username:branch.
67
+ #
68
+ # Alternative Input
69
+ # You can also create a Pull Request from an existing Issue by passing
70
+ # an Issue number instead of <tt>title</tt> and <tt>body</tt>.
71
+ # @option params [Numeric] :issue
72
+ # Required number - Issue number in this repository to turn into a Pull Request.
73
+ #
74
+ # @example
75
+ # github = Github.new oauth_token: '...'
76
+ # github.pull_requests.create 'user-name', 'repo-name',
77
+ # title: "Amazing new feature",
78
+ # body: "Please pull this in!",
79
+ # head: "octocat:new-feature",
80
+ # base: "master"
81
+ #
82
+ # @example
83
+ # github.pull_requests.create 'user-name', 'repo-name',
84
+ # issue: "5",
85
+ # head: "octocat:new-feature",
86
+ # base: "master"
87
+ #
88
+ # @api public
89
+ def create(*args)
90
+ arguments(args, required: [:user, :repo])
91
+
92
+ post_request("/repos/#{arguments.user}/#{arguments.repo}/pulls",
93
+ arguments.params)
94
+ end
95
+
96
+ # Update a pull request
97
+ #
98
+ # @param [Hash] params
99
+ # @option params [String] :title
100
+ # Optional string
101
+ # @optoin params [String] :body
102
+ # Optional string
103
+ # @option params [String] :state
104
+ # Optional string - State of this Pull Request.
105
+ # Valid values are open and closed.
106
+ #
107
+ # @example
108
+ # github = Github.new oauth_token: '...'
109
+ # github.pull_requests.update 'user-name', 'repo-name', 'number'
110
+ # title: "Amazing new title",
111
+ # body: "Update body",
112
+ # state: "open"
113
+ #
114
+ # @api public
115
+ def update(*args)
116
+ arguments(args, required: [:user, :repo, :number])
117
+
118
+ patch_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}", arguments.params)
119
+ end
120
+
121
+ # List commits on a pull request
122
+ #
123
+ # @example
124
+ # github = Github.new
125
+ # github.pull_requests.commits 'user-name', 'repo-name', 'number'
126
+ #
127
+ # @api public
128
+ def commits(*args)
129
+ arguments(args, required: [:user, :repo, :number])
130
+
131
+ response = get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/commits", arguments.params)
132
+ return response unless block_given?
133
+ response.each { |el| yield el }
134
+ end
135
+
136
+ # List pull requests files
137
+ #
138
+ # @example
139
+ # github = Github.new
140
+ # github.pull_requests.files 'user-name', 'repo-name', 'number'
141
+ #
142
+ # @api public
143
+ def files(*args)
144
+ arguments(args, required: [:user, :repo, :number])
145
+
146
+ response = get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/files", arguments.params)
147
+ return response unless block_given?
148
+ response.each { |el| yield el }
149
+ end
150
+
151
+ # Check if pull request has been merged
152
+ #
153
+ # @example
154
+ # github = Github.new
155
+ # github.pull_requests.merged? 'user-name', 'repo-name', 'number'
156
+ #
157
+ # @api public
158
+ def merged?(*args)
159
+ arguments(args, required: [:user, :repo, :number])
160
+
161
+ get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/merge", arguments.params)
162
+ true
163
+ rescue Github::Error::NotFound
164
+ false
165
+ end
166
+
167
+ PREVIEW_MEDIA = 'application/vnd.github.polaris-preview+json'.freeze # :nodoc:
168
+
169
+ # Merge a pull request(Merge Button)
170
+ #
171
+ # @param [Hash] params
172
+ # @option params [String] :commit_title
173
+ # Optional string - The first line of the message that will be used for the merge commit
174
+ # @option params [String] :commit_message
175
+ # Optional string - The message that will be used for the merge commit
176
+ # @option params [String] :sha
177
+ # Optional string - The SHA that pull request head must match to allow merge
178
+ # @option params [String] :merge_method
179
+ # Optional string - Merge method to use.
180
+ # Valid values are merge, squash, and rebase. Default is merge.
181
+ #
182
+ # @example
183
+ # github = Github.new
184
+ # github.pull_requests.merge 'user-name', 'repo-name', 'number'
185
+ #
186
+ # @api public
187
+ def merge(*args)
188
+ arguments(args, required: [:user, :repo, :number])
189
+ params = arguments.params
190
+ params['accept'] ||= PREVIEW_MEDIA
191
+
192
+ put_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/merge", params)
193
+ end
194
+ end # PullRequests
195
+ end # Github