lingfennan-github_api 0.18.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 (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,104 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../api'
4
+
5
+ module Github
6
+ class Client::Repos::Keys < API
7
+ # List deploy keys
8
+ #
9
+ # @see https://developer.github.com/v3/repos/keys/#list
10
+ #
11
+ # @param [String] :user
12
+ # @param [String :repo
13
+ #
14
+ # @example
15
+ # github = Github.new
16
+ # github.repos.keys.list 'user-name', 'repo-name'
17
+ # github.repos.keys.list 'user-name', 'repo-name' { |key| ... }
18
+ #
19
+ # @example
20
+ # keys = Github::Repos::Keys.new user: 'user-name', repo: 'repo-name'
21
+ # keys.list
22
+ #
23
+ # @api public
24
+ def list(*args)
25
+ arguments(args, required: [:user, :repo])
26
+
27
+ response = get_request("/repos/#{arguments.user}/#{arguments.repo}/keys",
28
+ arguments.params)
29
+ return response unless block_given?
30
+ response.each { |el| yield el }
31
+ end
32
+ alias_method :all, :list
33
+
34
+ # Get a key
35
+ #
36
+ # @see https://developer.github.com/v3/repos/keys/#get
37
+ #
38
+ # @param [String] :user
39
+ # @param [String] :repo
40
+ # @param [Integer] :id
41
+ #
42
+ # @example
43
+ # github = Github.new
44
+ # github.repos.keys.get 'user-name', 'repo-name', 'key-id'
45
+ #
46
+ # @api public
47
+ def get(*args)
48
+ arguments(args, required: [:user, :repo, :id])
49
+
50
+ get_request("/repos/#{arguments.user}/#{arguments.repo}/keys/#{arguments.id}", arguments.params)
51
+ end
52
+ alias_method :find, :get
53
+
54
+ # Create a key
55
+ #
56
+ # @see https://developer.github.com/v3/repos/keys/#create
57
+ #
58
+ # @param [String] :user
59
+ # @param [String] :repo
60
+ # @param [Hash] params
61
+ # @option params [String] :title
62
+ # Required string.
63
+ # @option params [String] :key
64
+ # Required string.
65
+ # @option params [String] :read_only
66
+ # If true, the key will only be able to read repository contents.
67
+ # Otherwise, the key will be able to read and write.
68
+ #
69
+ # @example
70
+ # github = Github.new
71
+ # github.repos.keys.create 'user-name', 'repo-name',
72
+ # title: "octocat@octomac",
73
+ # key: "ssh-rsa AAA..."
74
+ #
75
+ # @api public
76
+ def create(*args)
77
+ arguments(args, required: [:user, :repo])
78
+
79
+ post_request("/repos/#{arguments.user}/#{arguments.repo}/keys",
80
+ arguments.params)
81
+ end
82
+ alias_method :add, :create
83
+
84
+ # Delete key
85
+ #
86
+ # @see https://developer.github.com/v3/repos/keys/#delete
87
+ #
88
+ # @param [String] :user
89
+ # @param [String] :repo
90
+ # @param [Integer] :id
91
+ #
92
+ # @example
93
+ # github = Github.new
94
+ # github.repos.keys.delete 'user-name', 'repo-name', 'key-id'
95
+ #
96
+ # @api public
97
+ def delete(*args)
98
+ arguments(args, required: [:user, :repo, :id])
99
+
100
+ delete_request("/repos/#{arguments.user}/#{arguments.repo}/keys/#{arguments.id}", arguments.params)
101
+ end
102
+ alias_method :remove, :delete
103
+ end # Client::Repos::Keys
104
+ end # Github
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../api'
4
+
5
+ module Github
6
+ # The Repo Merging API supports merging branches in a repository. This
7
+ # accomplishes essentially the same thing as merging one branch into another
8
+ # in a local repository and then pushing to GitHub.
9
+ class Client::Repos::Merging < API
10
+
11
+ VALID_MERGE_PARAM_NAMES = %w[
12
+ base
13
+ head
14
+ commit_message
15
+ ].freeze # :nodoc:
16
+
17
+ REQUIRED_MERGE_PARAMS = %w[ base head ].freeze # :nodoc:
18
+
19
+ # Perform a merge
20
+ #
21
+ # @param [Hash] params
22
+ # @input params [String] :base
23
+ # Required. The name of the base branch that the head will be merged into.
24
+ # @input params [String] :head
25
+ # Required. The head to merge. This can be a branch name or a commit SHA1.
26
+ # @input params [String] :commit_message
27
+ # Commit message to use for the merge commit.
28
+ # If omitted, a default message will be used.
29
+ #
30
+ # @example
31
+ # github = Github.new
32
+ # github.repos.merging.merge 'user', 'repo',
33
+ # base: "master",
34
+ # head: "cool_feature",
35
+ # commit_message: "Shipped cool_feature!"
36
+ #
37
+ # @api public
38
+ def merge(*args)
39
+ arguments(args, required: [:user, :repo]) do
40
+ permit VALID_MERGE_PARAM_NAMES
41
+ assert_required REQUIRED_MERGE_PARAMS
42
+ end
43
+
44
+ post_request("/repos/#{arguments.user}/#{arguments.repo}/merges", arguments.params)
45
+ end
46
+ end # Client::Repos::Merging
47
+ end # Github
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../api'
4
+
5
+ module Github
6
+ # The Pages API retrieves information about your GitHub Pages configuration,
7
+ # and the statuses of your builds. Information about the site and the builds
8
+ # can only be accessed by authenticated owners, even though the websites
9
+ # are public.
10
+ class Client::Repos::Pages < API
11
+
12
+ # List Pages builds
13
+ #
14
+ # @example
15
+ # github = Github.new
16
+ # github.repos.pages.list owner: 'owner-name', repo: 'repo-name'
17
+ #
18
+ # github = Github.new
19
+ # github.repos.pages.list :latest, owner: 'owner-name', repo: 'repo-name'
20
+ # @api public
21
+ def list(*args)
22
+ arguments(args, required: [:owner, :repo])
23
+
24
+ response = if args.map(&:to_s).include?('latest')
25
+ get_request("/repos/#{arguments.owner}/#{arguments.repo}/pages/builds/latest", arguments.params)
26
+ else
27
+ get_request("/repos/#{arguments.owner}/#{arguments.repo}/pages/builds", arguments.params)
28
+ end
29
+ return response unless block_given?
30
+ response.each { |el| yield el }
31
+ end
32
+ alias :all :list
33
+
34
+ # Get information about a Pages site
35
+ #
36
+ # @example
37
+ # github = Github.new
38
+ # github.repos.pages.get owner: 'owner-name', repo: 'repo-name'
39
+ #
40
+ # @api public
41
+ def get(*args)
42
+ arguments(args, required: [:owner, :repo])
43
+
44
+ get_request("/repos/#{arguments.owner}/#{arguments.repo}/pages", arguments.params)
45
+ end
46
+ alias :find :get
47
+ end # Client::Repos::Pages
48
+ end # Github
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../api'
4
+
5
+ module Github
6
+ class Client::Repos::Projects < API
7
+ PREVIEW_MEDIA = "application/vnd.github.inertia-preview+json".freeze # :nodoc:
8
+
9
+ # List a repo's projects
10
+ #
11
+ # @example
12
+ # github = Github.new
13
+ # github.repos.projects.list owner: 'owner-name', repo: 'repo-name'
14
+ #
15
+ # @example
16
+ # github = Github.new
17
+ # github.repos.projects.list state: 'open', owner: 'owner-name', repo: 'repo-name'
18
+ #
19
+ # @example
20
+ # github.repos.projects.list owner: 'owner-name', repo: 'repo-name' { |cbr| .. }
21
+ #
22
+ # @return [Array]
23
+ #
24
+ # @api public
25
+ def list(*args)
26
+ arguments(args, required: [:owner, :repo])
27
+ params = arguments.params
28
+
29
+ params["accept"] ||= PREVIEW_MEDIA
30
+
31
+ response = get_request("/repos/#{arguments.owner}/#{arguments.repo}/projects", params)
32
+ return response unless block_given?
33
+ response.each { |el| yield el }
34
+ end
35
+ alias :all :list
36
+
37
+ # Create a new project for the specified repo
38
+ #
39
+ # @param [Hash] params
40
+ # @option params [String] :name
41
+ # Required string - The name of the project.
42
+ # @option params [String] :body
43
+ # Optional string - The body of the project.
44
+ #
45
+ # @example
46
+ # github = Github.new
47
+ # github.repos.projects.create 'owner-name', 'repo-name', name: 'project-name'
48
+ # github.repos.projects.create name: 'project-name', body: 'project-body', owner: 'owner-name', repo: 'repo-name'
49
+ #
50
+ # @api public
51
+ def create(*args)
52
+ arguments(args, required: [:owner, :repo]) do
53
+ assert_required %w[ name ]
54
+ end
55
+ params = arguments.params
56
+
57
+ params["accept"] ||= PREVIEW_MEDIA
58
+
59
+ post_request("/repos/#{arguments.owner}/#{arguments.repo}/projects", params)
60
+ end
61
+ end # Projects
62
+ end # Github
@@ -0,0 +1,133 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../api'
4
+
5
+ module Github
6
+ class Client::Repos::PubSubHubbub < API
7
+ HEADERS = {
8
+ CONTENT_TYPE => 'application/x-www-form-urlencoded'
9
+ }
10
+
11
+ # Subscribe to existing topic/event through pubsubhubbub
12
+ #
13
+ # @param [Hash] params
14
+ # @input params [String] :topic
15
+ # Required string. The URI of the GitHub repository to subscribe to.
16
+ # The path must be in the format of /:user/:repo/events/:event.
17
+ # @input params [String] :callback
18
+ # Required string - The URI to receive the updates to the topic.
19
+ #
20
+ # @example
21
+ # github = Github.new oauth_token: 'token'
22
+ # github.repos.pubsubhubbub.subscribe
23
+ # 'https://github.com/:user/:repo/events/push',
24
+ # 'github://Email?address=peter-murach@gmail.com',
25
+ # verify: 'sync',
26
+ # secret: '...'
27
+ #
28
+ # @api public
29
+ def subscribe(*args)
30
+ params = arguments(args, required: [:topic, :callback]).params
31
+ _merge_action!("subscribe", arguments.topic, arguments.callback, params)
32
+ params['headers'] = HEADERS
33
+
34
+ post_request("/hub", params)
35
+ end
36
+
37
+ # Unsubscribe from existing topic/event through pubsubhubbub
38
+ #
39
+ # @param [Hash] params
40
+ # @input params [String] :topic
41
+ # Required string. The URI of the GitHub repository to
42
+ # unsubscribe from. The path must be in the format of
43
+ # /:user/:repo/events/:event.
44
+ # @input params [String] :callback
45
+ # Required string. The URI to unsubscribe the topic from.
46
+ #
47
+ # @example
48
+ # github = Github.new oauth_token: 'token'
49
+ # github.repos.pubsubhubbub.unsubscribe
50
+ # 'https://github.com/:user/:repo/events/push',
51
+ # 'github://Email?address=peter-murach@gmail.com',
52
+ # verify: 'sync',
53
+ # secret: '...'
54
+ #
55
+ # @api public
56
+ def unsubscribe(*args)
57
+ params = arguments(args, required: [:topic, :callback]).params
58
+ _merge_action!("unsubscribe", arguments.topic, arguments.callback, params)
59
+ params['headers'] = HEADERS
60
+
61
+ post_request("/hub", params)
62
+ end
63
+
64
+ # Subscribe repository to service hook through pubsubhubbub
65
+ #
66
+ # @param [Hash] params
67
+ # @input params [String] :event
68
+ # Required hash key for the type of event. The default event is push.
69
+ #
70
+ # @example
71
+ # github = Github.new oauth_token: '...'
72
+ # github.repos.pubsubhubbub.subscribe_service 'user-name', 'repo-name',
73
+ # 'campfire',
74
+ # subdomain: 'github',
75
+ # room: 'Commits',
76
+ # token: 'abc123',
77
+ # event: 'watch'
78
+ #
79
+ # @api public
80
+ def subscribe_service(*args)
81
+ params = arguments(args, required: [:user, :repo, :service]).params
82
+ event = params.delete('event') || 'push'
83
+ topic = "#{site}/#{arguments.user}/#{arguments.repo}/events/#{event}"
84
+ callback = "github://#{arguments.service}?#{params.serialize}"
85
+
86
+ subscribe(topic, callback)
87
+ end
88
+ alias :subscribe_repository :subscribe_service
89
+ alias :subscribe_repo :subscribe_service
90
+
91
+ # Subscribe repository to service hook through pubsubhubbub
92
+ #
93
+ # @param [Hash] params
94
+ # @input params [String] :event
95
+ # Optional hash key for the type of event. The default event is push.
96
+ #
97
+ # @example
98
+ # github = Github.new oauth_token: '...'
99
+ # github.repos.pubsubhubbub.unsubscribe_service 'user-name', 'repo-name',
100
+ # 'campfire'
101
+ #
102
+ # @example
103
+ # github.repos.pubsubhubbub.unsubscribe_service
104
+ # user: 'user-name',
105
+ # repo: 'repo-name',
106
+ # service: 'service-name'
107
+ #
108
+ # @api public
109
+ def unsubscribe_service(*args)
110
+ params = arguments(args, required: [:user, :repo, :service]).params
111
+ event = params.delete('event') || 'push'
112
+ topic = "#{site}/#{arguments.user}/#{arguments.repo}/events/#{event}"
113
+ callback = "github://#{arguments.service}"
114
+
115
+ unsubscribe(topic, callback)
116
+ end
117
+ alias :unsubscribe_repository :unsubscribe_service
118
+ alias :unsubscribe_repo :unsubscribe_service
119
+
120
+ private
121
+
122
+ def _merge_action!(action, topic, callback, params) # :nodoc:
123
+ options = {
124
+ "hub.mode" => action.to_s,
125
+ "hub.topic" => topic.to_s,
126
+ "hub.callback" => callback,
127
+ "hub.verify" => params.delete('verify') || 'sync',
128
+ "hub.secret" => params.delete('secret') || ''
129
+ }
130
+ params.merge! options
131
+ end
132
+ end # Client::Repos::PubSubHubbub
133
+ end # Github
@@ -0,0 +1,189 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../api'
4
+
5
+ module Github
6
+ # The Releases API
7
+ class Client::Repos::Releases < API
8
+
9
+ require_all 'github_api/client/repos/releases', 'assets', 'tags'
10
+
11
+ # Access to Repos::Releases::Assets API
12
+ namespace :assets
13
+
14
+ # Access to Repos::Releases::Tags API
15
+ namespace :tags
16
+
17
+ # List releases for a repository
18
+ #
19
+ # Users with push access to the repository will receive all releases
20
+ # (i.e., published releases and draft releases). Users with pull access
21
+ # will receive published releases only.
22
+ #
23
+ # @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository
24
+ #
25
+ # @example
26
+ # github = Github.new
27
+ # github.repos.releases.list 'owner', 'repo'
28
+ # github.repos.releases.list 'owner', 'repo' { |release| ... }
29
+ #
30
+ # @api public
31
+ def list(*args)
32
+ arguments(args, required: [:owner, :repo])
33
+
34
+ response = get_request("/repos/#{arguments.owner}/#{arguments.repo}/releases", arguments.params)
35
+ return response unless block_given?
36
+ response.each { |el| yield el }
37
+ end
38
+ alias_method :all, :list
39
+
40
+ # Get a single release
41
+ #
42
+ # @see https://developer.github.com/v3/repos/releases/#get-a-single-release
43
+ #
44
+ # @example
45
+ # github = Github.new
46
+ # github.repos.releases.get 'owner', 'repo', 'id'
47
+ #
48
+ # @api public
49
+ def get(*args)
50
+ arguments(args, required: [:owner, :repo, :id]).params
51
+
52
+ get_request("/repos/#{arguments.owner}/#{arguments.repo}/releases/#{arguments.id}" , arguments.params)
53
+ end
54
+ alias_method :find, :get
55
+
56
+ # Create a release
57
+ #
58
+ # Users with push access to the repository can create a release.
59
+ #
60
+ # @see https://developer.github.com/v3/repos/releases/#create-a-release
61
+ #
62
+ # @param [Hash] params
63
+ # @input params [String] :tag_name
64
+ # Required. The name of the tag.
65
+ # @input params [String] :target_commitish
66
+ # Specifies the commitish value that determines where the Git tag
67
+ # is created from. Can be any branch or commit SHA. Defaults to
68
+ # the repository's default branch (usually 'master').
69
+ # Unused if the Git tag already exists.
70
+ # @input params [String] :name
71
+ # The name of the release.
72
+ # @input params [String] :body
73
+ # Text describing the contents of the tag.
74
+ # @input params [Boolean] :draft
75
+ # true to create a draft (unpublished) release,
76
+ # false to create a published one. Default: false
77
+ # @input params [Boolean] :prerelease
78
+ # true to identify the release as a prerelease.
79
+ # false to identify the release as a full release. Default: false
80
+ #
81
+ # @example
82
+ # github = Github.new
83
+ # github.repos.releases.create 'owner', 'repo',
84
+ # tag_name: "v1.0.0",
85
+ # target_commitish: "master",
86
+ # name: "v1.0.0",
87
+ # body: "Description of the release",
88
+ # draft: false,
89
+ # prerelease: false
90
+ #
91
+ # @api public
92
+ def create(*args)
93
+ arguments(args, required: [:owner, :repo]) do
94
+ assert_required :tag_name
95
+ end
96
+
97
+ post_request("/repos/#{arguments.owner}/#{arguments.repo}/releases",
98
+ arguments.params)
99
+ end
100
+
101
+ # Edit a release
102
+ #
103
+ # Users with push access to the repository can edit a release.
104
+ #
105
+ # @see https://developer.github.com/v3/repos/releases/#edit-a-release
106
+ #
107
+ # @param [String] :owner
108
+ # @param [String] :repo
109
+ # @param [Integer] :id
110
+ # @param [Hash] params
111
+ # @input params [String] :tag_name
112
+ # Required. The name of the tag.
113
+ # @input params [String] :target_commitish
114
+ # Specifies the commitish value that determines where the Git tag
115
+ # is created from. Can be any branch or commit SHA. Defaults to
116
+ # the repository's default branch (usually 'master').
117
+ # Unused if the Git tag already exists.
118
+ # @input params [String] :name
119
+ # The name of the release.
120
+ # @input params [String] :body
121
+ # Text describing the contents of the tag.
122
+ # @input params [Boolean] :draft
123
+ # true to create a draft (unpublished) release,
124
+ # false to create a published one. Default: false
125
+ # @input params [Boolean] :prerelease
126
+ # true to identify the release as a prerelease.
127
+ # false to identify the release as a full release. Default: false
128
+ #
129
+ # @example
130
+ # github = Github.new
131
+ # github.repos.releases.edit 'owner', 'repo', 'id',
132
+ # tag_name: "v1.0.0",
133
+ # target_commitish: "master",
134
+ # name: "v1.0.0",
135
+ # body: "Description of the release",
136
+ # draft: false,
137
+ # prerelease: false
138
+ #
139
+ # @api public
140
+ def edit(*args)
141
+ arguments(args, required: [:owner, :repo, :id])
142
+
143
+ patch_request("/repos/#{arguments.owner}/#{arguments.repo}/releases/#{arguments.id}", arguments.params)
144
+ end
145
+ alias_method :update, :edit
146
+
147
+ # Delete a release
148
+ #
149
+ # Users with push access to the repository can delete a release.
150
+ #
151
+ # @see https://developer.github.com/v3/repos/releases/#delete-a-release
152
+ #
153
+ # @param [String] :owner
154
+ # @param [String] :repo
155
+ # @param [Integer] :id
156
+ #
157
+ # @example
158
+ # github = Github.new
159
+ # github.repos.releases.delete 'owner', 'repo', 'id'
160
+ #
161
+ # @api public
162
+ def delete(*args)
163
+ arguments(args, required: [:owner, :repo, :id]).params
164
+
165
+ delete_request("/repos/#{arguments.owner}/#{arguments.repo}/releases/#{arguments.id}", arguments.params)
166
+ end
167
+
168
+ # Get the latest release
169
+ #
170
+ # View the latest published full release for the repository.
171
+ # Draft releases and prereleases are not returned.
172
+ #
173
+ # @see https://developer.github.com/v3/repos/releases/#get-the-latest-release
174
+ #
175
+ # @param [String] :owner
176
+ # @param [String] :repo
177
+ #
178
+ # @example
179
+ # github = Github.new
180
+ # github.repos.releases.latest 'owner', 'repo'
181
+ #
182
+ # @api public
183
+ def latest(*args)
184
+ arguments(args, required: [:owner, :repo]).params
185
+
186
+ get_request("repos/#{arguments.owner}/#{arguments.repo}/releases/latest", arguments.params)
187
+ end
188
+ end # Client::Repos::Statuses
189
+ end # Github