gitlab-akerl 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.prospectus +11 -0
  4. data/.travis.yml +8 -0
  5. data/CHANGELOG.md +229 -0
  6. data/CONTRIBUTING.md +195 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +24 -0
  9. data/README.md +192 -0
  10. data/Rakefile +9 -0
  11. data/bin/console +10 -0
  12. data/bin/setup +6 -0
  13. data/exe/gitlab +7 -0
  14. data/gitlab-akerl.gemspec +31 -0
  15. data/lib/gitlab.rb +45 -0
  16. data/lib/gitlab/api.rb +19 -0
  17. data/lib/gitlab/cli.rb +89 -0
  18. data/lib/gitlab/cli_helpers.rb +241 -0
  19. data/lib/gitlab/client.rb +48 -0
  20. data/lib/gitlab/client/branches.rb +91 -0
  21. data/lib/gitlab/client/build_triggers.rb +51 -0
  22. data/lib/gitlab/client/build_variables.rb +66 -0
  23. data/lib/gitlab/client/builds.rb +106 -0
  24. data/lib/gitlab/client/commits.rb +121 -0
  25. data/lib/gitlab/client/groups.rb +144 -0
  26. data/lib/gitlab/client/issues.rb +113 -0
  27. data/lib/gitlab/client/labels.rb +57 -0
  28. data/lib/gitlab/client/merge_requests.rb +168 -0
  29. data/lib/gitlab/client/milestones.rb +78 -0
  30. data/lib/gitlab/client/namespaces.rb +20 -0
  31. data/lib/gitlab/client/notes.rb +161 -0
  32. data/lib/gitlab/client/pipelines.rb +68 -0
  33. data/lib/gitlab/client/projects.rb +471 -0
  34. data/lib/gitlab/client/repositories.rb +78 -0
  35. data/lib/gitlab/client/repository_files.rb +88 -0
  36. data/lib/gitlab/client/runners.rb +115 -0
  37. data/lib/gitlab/client/services.rb +50 -0
  38. data/lib/gitlab/client/snippets.rb +91 -0
  39. data/lib/gitlab/client/system_hooks.rb +59 -0
  40. data/lib/gitlab/client/tags.rb +96 -0
  41. data/lib/gitlab/client/users.rb +250 -0
  42. data/lib/gitlab/configuration.rb +55 -0
  43. data/lib/gitlab/error.rb +85 -0
  44. data/lib/gitlab/file_response.rb +46 -0
  45. data/lib/gitlab/help.rb +95 -0
  46. data/lib/gitlab/objectified_hash.rb +34 -0
  47. data/lib/gitlab/page_links.rb +33 -0
  48. data/lib/gitlab/paginated_response.rb +97 -0
  49. data/lib/gitlab/request.rb +117 -0
  50. data/lib/gitlab/shell.rb +84 -0
  51. data/lib/gitlab/shell_history.rb +59 -0
  52. data/lib/gitlab/version.rb +3 -0
  53. data/spec/fixtures/branch.json +1 -0
  54. data/spec/fixtures/branch_delete.json +3 -0
  55. data/spec/fixtures/branches.json +1 -0
  56. data/spec/fixtures/build.json +38 -0
  57. data/spec/fixtures/build_artifacts.json +0 -0
  58. data/spec/fixtures/build_cancel.json +24 -0
  59. data/spec/fixtures/build_erase.json +24 -0
  60. data/spec/fixtures/build_retry.json +24 -0
  61. data/spec/fixtures/builds.json +78 -0
  62. data/spec/fixtures/builds_commits.json +64 -0
  63. data/spec/fixtures/compare_merge_request_diff.json +31 -0
  64. data/spec/fixtures/error_already_exists.json +1 -0
  65. data/spec/fixtures/error_project_not_found.json +1 -0
  66. data/spec/fixtures/get_repository_file.json +1 -0
  67. data/spec/fixtures/git_hook.json +1 -0
  68. data/spec/fixtures/group.json +60 -0
  69. data/spec/fixtures/group_create.json +1 -0
  70. data/spec/fixtures/group_create_with_description.json +1 -0
  71. data/spec/fixtures/group_delete.json +1 -0
  72. data/spec/fixtures/group_member.json +1 -0
  73. data/spec/fixtures/group_member_delete.json +1 -0
  74. data/spec/fixtures/group_member_edit.json +1 -0
  75. data/spec/fixtures/group_members.json +1 -0
  76. data/spec/fixtures/group_projects.json +44 -0
  77. data/spec/fixtures/group_search.json +2 -0
  78. data/spec/fixtures/groups.json +2 -0
  79. data/spec/fixtures/issue.json +1 -0
  80. data/spec/fixtures/issues.json +1 -0
  81. data/spec/fixtures/key.json +1 -0
  82. data/spec/fixtures/keys.json +1 -0
  83. data/spec/fixtures/label.json +1 -0
  84. data/spec/fixtures/labels.json +1 -0
  85. data/spec/fixtures/merge_request.json +1 -0
  86. data/spec/fixtures/merge_request_changes.json +1 -0
  87. data/spec/fixtures/merge_request_comment.json +1 -0
  88. data/spec/fixtures/merge_request_comments.json +1 -0
  89. data/spec/fixtures/merge_request_commits.json +1 -0
  90. data/spec/fixtures/merge_requests.json +1 -0
  91. data/spec/fixtures/milestone.json +1 -0
  92. data/spec/fixtures/milestone_issues.json +1 -0
  93. data/spec/fixtures/milestones.json +1 -0
  94. data/spec/fixtures/namespaces.json +1 -0
  95. data/spec/fixtures/note.json +1 -0
  96. data/spec/fixtures/notes.json +1 -0
  97. data/spec/fixtures/pipeline.json +23 -0
  98. data/spec/fixtures/pipeline_cancel.json +23 -0
  99. data/spec/fixtures/pipeline_create.json +23 -0
  100. data/spec/fixtures/pipeline_retry.json +23 -0
  101. data/spec/fixtures/pipelines.json +48 -0
  102. data/spec/fixtures/project.json +1 -0
  103. data/spec/fixtures/project_commit.json +13 -0
  104. data/spec/fixtures/project_commit_comment.json +1 -0
  105. data/spec/fixtures/project_commit_comments.json +1 -0
  106. data/spec/fixtures/project_commit_diff.json +10 -0
  107. data/spec/fixtures/project_commit_status.json +42 -0
  108. data/spec/fixtures/project_commits.json +1 -0
  109. data/spec/fixtures/project_edit.json +21 -0
  110. data/spec/fixtures/project_events.json +1 -0
  111. data/spec/fixtures/project_for_user.json +1 -0
  112. data/spec/fixtures/project_fork.json +50 -0
  113. data/spec/fixtures/project_fork_link.json +1 -0
  114. data/spec/fixtures/project_forked_for_user.json +50 -0
  115. data/spec/fixtures/project_hook.json +1 -0
  116. data/spec/fixtures/project_hooks.json +1 -0
  117. data/spec/fixtures/project_issues.json +1 -0
  118. data/spec/fixtures/project_key.json +6 -0
  119. data/spec/fixtures/project_keys.json +6 -0
  120. data/spec/fixtures/project_runner_enable.json +7 -0
  121. data/spec/fixtures/project_runners.json +16 -0
  122. data/spec/fixtures/project_search.json +1 -0
  123. data/spec/fixtures/project_star.json +44 -0
  124. data/spec/fixtures/project_tag_annotated.json +1 -0
  125. data/spec/fixtures/project_tag_lightweight.json +1 -0
  126. data/spec/fixtures/project_tags.json +1 -0
  127. data/spec/fixtures/project_unstar.json +44 -0
  128. data/spec/fixtures/project_update_commit_status.json +20 -0
  129. data/spec/fixtures/projects.json +1 -0
  130. data/spec/fixtures/raw_file.json +2 -0
  131. data/spec/fixtures/release_create.json +1 -0
  132. data/spec/fixtures/release_update.json +1 -0
  133. data/spec/fixtures/repository_file.json +1 -0
  134. data/spec/fixtures/runner.json +26 -0
  135. data/spec/fixtures/runner_delete.json +7 -0
  136. data/spec/fixtures/runner_edit.json +26 -0
  137. data/spec/fixtures/runners.json +16 -0
  138. data/spec/fixtures/runners_all.json +30 -0
  139. data/spec/fixtures/service.json +1 -0
  140. data/spec/fixtures/session.json +1 -0
  141. data/spec/fixtures/shell_history.json +2 -0
  142. data/spec/fixtures/snippet.json +1 -0
  143. data/spec/fixtures/snippet_content.json +3 -0
  144. data/spec/fixtures/snippets.json +1 -0
  145. data/spec/fixtures/system_hook.json +1 -0
  146. data/spec/fixtures/system_hooks.json +1 -0
  147. data/spec/fixtures/tag.json +1 -0
  148. data/spec/fixtures/tag_create.json +1 -0
  149. data/spec/fixtures/tag_create_with_description.json +1 -0
  150. data/spec/fixtures/tag_delete.json +1 -0
  151. data/spec/fixtures/tags.json +1 -0
  152. data/spec/fixtures/team_member.json +1 -0
  153. data/spec/fixtures/team_members.json +1 -0
  154. data/spec/fixtures/tree.json +1 -0
  155. data/spec/fixtures/trigger.json +7 -0
  156. data/spec/fixtures/triggers.json +16 -0
  157. data/spec/fixtures/user.json +1 -0
  158. data/spec/fixtures/user_block_unblock.json +1 -0
  159. data/spec/fixtures/user_email.json +1 -0
  160. data/spec/fixtures/user_emails.json +1 -0
  161. data/spec/fixtures/user_search.json +1 -0
  162. data/spec/fixtures/users.json +1 -0
  163. data/spec/fixtures/variable.json +4 -0
  164. data/spec/fixtures/variables.json +10 -0
  165. data/spec/gitlab/cli_helpers_spec.rb +57 -0
  166. data/spec/gitlab/cli_spec.rb +110 -0
  167. data/spec/gitlab/client/branches_spec.rb +99 -0
  168. data/spec/gitlab/client/build_triggers_spec.rb +67 -0
  169. data/spec/gitlab/client/build_variables_spec.rb +86 -0
  170. data/spec/gitlab/client/builds_spec.rb +148 -0
  171. data/spec/gitlab/client/client_spec.rb +11 -0
  172. data/spec/gitlab/client/commits_spec.rb +137 -0
  173. data/spec/gitlab/client/groups_spec.rb +197 -0
  174. data/spec/gitlab/client/issues_spec.rb +138 -0
  175. data/spec/gitlab/client/labels_spec.rb +68 -0
  176. data/spec/gitlab/client/merge_requests_spec.rb +177 -0
  177. data/spec/gitlab/client/milestones_spec.rb +82 -0
  178. data/spec/gitlab/client/namespaces_spec.rb +22 -0
  179. data/spec/gitlab/client/notes_spec.rb +205 -0
  180. data/spec/gitlab/client/pipelines_spec.rb +95 -0
  181. data/spec/gitlab/client/projects_spec.rb +603 -0
  182. data/spec/gitlab/client/repositories_spec.rb +109 -0
  183. data/spec/gitlab/client/repository_files_spec.rb +62 -0
  184. data/spec/gitlab/client/runners_spec.rb +185 -0
  185. data/spec/gitlab/client/services_spec.rb +55 -0
  186. data/spec/gitlab/client/snippets_spec.rb +100 -0
  187. data/spec/gitlab/client/system_hooks_spec.rb +69 -0
  188. data/spec/gitlab/client/tags_spec.rb +109 -0
  189. data/spec/gitlab/client/users_spec.rb +418 -0
  190. data/spec/gitlab/error_spec.rb +45 -0
  191. data/spec/gitlab/file_response_spec.rb +33 -0
  192. data/spec/gitlab/help_spec.rb +46 -0
  193. data/spec/gitlab/objectified_hash_spec.rb +48 -0
  194. data/spec/gitlab/page_links_spec.rb +16 -0
  195. data/spec/gitlab/paginated_response_spec.rb +60 -0
  196. data/spec/gitlab/request_spec.rb +73 -0
  197. data/spec/gitlab/shell_history_spec.rb +53 -0
  198. data/spec/gitlab/shell_spec.rb +80 -0
  199. data/spec/gitlab_spec.rb +97 -0
  200. data/spec/spec_helper.rb +74 -0
  201. metadata +476 -0
@@ -0,0 +1,78 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to repositories.
3
+ # @see https://docs.gitlab.com/ce/api/repositories.html
4
+ module Repositories
5
+ # Get the contents of a file
6
+ #
7
+ # @example
8
+ # Gitlab.file_contents(42, 'Gemfile')
9
+ # Gitlab.repo_file_contents(3, 'Gemfile', 'ed899a2f4b50b4370feeea94676502b42383c746')
10
+ #
11
+ # @param [Integer] project The ID of a project.
12
+ # @param [String] filepath The relative path of the file in the repository
13
+ # @param [String] ref The name of a repository branch or tag or if not given the default branch.
14
+ # @return [String]
15
+ def file_contents(project, filepath, ref='master')
16
+ ref = URI.encode(ref, /\W/)
17
+ get "/projects/#{project}/repository/blobs/#{ref}?filepath=#{filepath}",
18
+ format: nil,
19
+ headers: { Accept: 'text/plain' },
20
+ parser: ::Gitlab::Request::Parser
21
+ end
22
+ alias_method :repo_file_contents, :file_contents
23
+
24
+ # Get file tree project (root level).
25
+ #
26
+ # @example
27
+ # Gitlab.tree(42)
28
+ # Gitlab.tree(42, { path: 'Gemfile' })
29
+ #
30
+ # @param [Integer] project The ID of a project.
31
+ # @param [Hash] options A customizable set of options.
32
+ # @option options [String] :path The path inside repository.
33
+ # @option options [String] :ref_name The name of a repository branch or tag.
34
+ # @return [Gitlab::ObjectifiedHash]
35
+ def tree(project, options={})
36
+ get("/projects/#{project}/repository/tree", query: options)
37
+ end
38
+ alias_method :repo_tree, :tree
39
+
40
+ # Get project repository archive
41
+ #
42
+ # @example
43
+ # Gitlab.repo_archive(42)
44
+ # Gitlab.repo_archive(42, 'deadbeef')
45
+ #
46
+ # @param [Integer] project The ID of a project.
47
+ # @param [String] ref The commit sha, branch, or tag to download.
48
+ # @return [Gitlab::FileResponse]
49
+ def repo_archive(project, ref = 'master')
50
+ get("/projects/#{project}/repository/archive",
51
+ format: nil,
52
+ headers: { Accept: 'application/octet-stream' },
53
+ query: { sha: ref },
54
+ parser: proc { |body, _|
55
+ if body.encoding == Encoding::ASCII_8BIT # binary response
56
+ ::Gitlab::FileResponse.new StringIO.new(body, 'rb+')
57
+ else # error with json response
58
+ ::Gitlab::Request.parse(body)
59
+ end
60
+ })
61
+ end
62
+
63
+ # Compares branches, tags or commits.
64
+ #
65
+ # @example
66
+ # Gitlab.compare(42, 'master', 'feature/branch')
67
+ # Gitlab.repo_compare(42, 'master', 'feature/branch')
68
+ #
69
+ # @param [Integer] project The ID of a project.
70
+ # @param [String] from The commit SHA or branch name of from branch.
71
+ # @param [String] to The commit SHA or branch name of to branch.
72
+ # @return [Gitlab::ObjectifiedHash]
73
+ def compare(project, from, to)
74
+ get("/projects/#{project}/repository/compare", query: { from: from, to: to })
75
+ end
76
+ alias_method :repo_compare, :compare
77
+ end
78
+ end
@@ -0,0 +1,88 @@
1
+ require 'base64'
2
+
3
+ class Gitlab::Client
4
+ # Defines methods related to repository files.
5
+ # @see https://docs.gitlab.com/ce/api/repository_files.html
6
+ module RepositoryFiles
7
+ # Gets a repository file.
8
+ #
9
+ # @example
10
+ # Gitlab.get_file(42, "README.md", "master")
11
+ #
12
+ # @param [Integer] project The ID of a project.
13
+ # @param [String] file_path The full path of the file.
14
+ # @param [String] ref The name of branch, tag or commit.
15
+ # @return [Gitlab::ObjectifiedHash]
16
+ def get_file(project, file_path, ref)
17
+ get("/projects/#{project}/repository/files", query: {
18
+ file_path: file_path,
19
+ ref: ref
20
+ })
21
+ end
22
+
23
+ # Creates a new repository file.
24
+ #
25
+ # @example
26
+ # Gitlab.create_file(42, "path", "branch", "content", "commit message")
27
+ #
28
+ # @param [Integer] project The ID of a project.
29
+ # @param [String] full path to new file.
30
+ # @param [String] the name of the branch.
31
+ # @param [String] file content.
32
+ # @param [String] commit message.
33
+ # @return [Gitlab::ObjectifiedHash]
34
+ def create_file(project, path, branch, content, commit_message)
35
+ post("/projects/#{project}/repository/files", body: {
36
+ file_path: path,
37
+ branch_name: branch,
38
+ commit_message: commit_message
39
+ }.merge(encoded_content_attributes(content)))
40
+ end
41
+
42
+ # Edits an existing repository file.
43
+ #
44
+ # @example
45
+ # Gitlab.edit_file(42, "path", "branch", "content", "commit message")
46
+ #
47
+ # @param [Integer] project The ID of a project.
48
+ # @param [String] full path to new file.
49
+ # @param [String] the name of the branch.
50
+ # @param [String] file content.
51
+ # @param [String] commit message.
52
+ # @return [Gitlab::ObjectifiedHash]
53
+ def edit_file(project, path, branch, content, commit_message)
54
+ put("/projects/#{project}/repository/files", body: {
55
+ file_path: path,
56
+ branch_name: branch,
57
+ commit_message: commit_message
58
+ }.merge(encoded_content_attributes(content)))
59
+ end
60
+
61
+ # Removes an existing repository file.
62
+ #
63
+ # @example
64
+ # Gitlab.remove_file(42, "path", "branch", "commit message")
65
+ #
66
+ # @param [Integer] project The ID of a project.
67
+ # @param [String] full path to new file.
68
+ # @param [String] the name of the branch.
69
+ # @param [String] commit message.
70
+ # @return [Gitlab::ObjectifiedHash]
71
+ def remove_file(project, path, branch, commit_message)
72
+ delete("/projects/#{project}/repository/files", body: {
73
+ file_path: path,
74
+ branch_name: branch,
75
+ commit_message: commit_message
76
+ })
77
+ end
78
+
79
+ private
80
+
81
+ def encoded_content_attributes(content)
82
+ {
83
+ encoding: 'base64',
84
+ content: Base64.encode64(content)
85
+ }
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,115 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to runners.
3
+ # @see https://docs.gitlab.com/ce/api/runners.html
4
+ module Runners
5
+
6
+ # Get a list of specific runners available to the user.
7
+ # @see https://docs.gitlab.com/ce/api/runners.html#list-owned-runners
8
+ #
9
+ # @example
10
+ # Gitlab.runners
11
+ # Gitlab.runners(:active)
12
+ # Gitlab.runners(:paused)
13
+ #
14
+ # @param [Hash] options A customizable set of options.
15
+ # @option options [String] :scope The scope of specific runners to show, one of: active, paused, online; showing all runners if none provided
16
+ # @return [Array<Gitlab::ObjectifiedHash>]
17
+ def runners(options = {})
18
+ get("/runners", query: options)
19
+ end
20
+
21
+ # Get a list of all runners in the GitLab instance (specific and shared). Access is restricted to users with admin privileges.
22
+ # @see https://docs.gitlab.com/ce/api/runners.html#list-all-runners
23
+ #
24
+ # @example
25
+ # Gitlab.all_runners
26
+ #
27
+ # @param [Hash] options A customizable set of options.
28
+ # @option options [String] :scope The scope of runners to show, one of: specific, shared, active, paused, online; showing all runners if none provided
29
+ # @return [Array<Gitlab::ObjectifiedHash>]
30
+ def all_runners(options = {})
31
+ get("/runners/all", query: options)
32
+ end
33
+
34
+ # Get details of a runner..
35
+ # @see https://docs.gitlab.com/ce/api/runners.html#get-runners-details
36
+ #
37
+ # @example
38
+ # Gitlab.runner(42)
39
+ #
40
+ # @param [Integer, String] id The ID of a runner
41
+ # @return <Gitlab::ObjectifiedHash>
42
+ def runner(id)
43
+ get("/runners/#{id}")
44
+ end
45
+
46
+ # Update details of a runner.
47
+ # @see https://docs.gitlab.com/ce/api/runners.html#update-runners-details
48
+ #
49
+ # @example
50
+ # Gitlab.update_runner(42, { description: 'Awesome runner' })
51
+ # Gitlab.update_runner(42, { active: false })
52
+ # Gitlab.update_runner(42, { tag_list: [ 'awesome', 'runner' ] })
53
+ #
54
+ # @param [Integer, String] id The ID of a runner
55
+ # @param [Hash] options A customizable set of options.
56
+ # @option options [String] :active The state of a runner; can be set to true or false.
57
+ # @option options [String] :tag_list The list of tags for a runner; put array of tags, that should be finally assigned to a runner
58
+ # @return <Gitlab::ObjectifiedHash>
59
+ def update_runner(id, options={})
60
+ put("/runners/#{id}", query: options)
61
+ end
62
+
63
+ # Remove a runner.
64
+ # @see https://docs.gitlab.com/ce/api/runners.html#remove-a-runner
65
+ #
66
+ # @example
67
+ # Gitlab.delete_runner(42)
68
+ #
69
+ # @param [Integer, String] id The ID of a runner
70
+ # @return <Gitlab::ObjectifiedHash>
71
+ def delete_runner(id)
72
+ delete("/runners/#{id}")
73
+ end
74
+
75
+ # List all runners (specific and shared) available in the project. Shared runners are listed if at least one shared runner is defined and shared runners usage is enabled in the project's settings.
76
+ # @see https://docs.gitlab.com/ce/api/runners.html#list-projects-runners
77
+ #
78
+ # @example
79
+ # Gitlab.project_runners(42)
80
+ #
81
+ # @param [Integer, String] id The ID of a project.
82
+ # @return [Array<Gitlab::ObjectifiedHash>]
83
+ def project_runners(project_id)
84
+ get("/projects/#{project_id}/runners")
85
+ end
86
+
87
+ # Enable an available specific runner in the project.
88
+ # @see https://docs.gitlab.com/ce/api/runners.html#enable-a-runner-in-project
89
+ #
90
+ # @example
91
+ # Gitlab.project_enable_runner(2, 42)
92
+ #
93
+ # @param [Integer, String] id The ID of a project.
94
+ # @param [Integer, String] id The ID of a runner.
95
+ # @return <Gitlab::ObjectifiedHash>
96
+ def project_enable_runner(project_id, id)
97
+ body = { runner_id: id }
98
+ post("/projects/#{project_id}/runners", body: body)
99
+ end
100
+
101
+ # Disable a specific runner from the project. It works only if the project isn't the only project associated with the specified runner.
102
+ # @see https://docs.gitlab.com/ce/api/runners.html#disable-a-runner-from-project
103
+ #
104
+ # @example
105
+ # Gitlab.project_disable_runner(2, 42)
106
+ #
107
+ # @param [Integer, String] id The ID of a project.
108
+ # @param [Integer, String] runner_id The ID of a runner.
109
+ # @return <Gitlab::ObjectifiedHash>
110
+ def project_disable_runner(id, runner_id)
111
+ delete("/projects/#{id}/runners/#{runner_id}")
112
+ end
113
+
114
+ end
115
+ end
@@ -0,0 +1,50 @@
1
+ class Gitlab::Client
2
+ # Third party services connected to a project.
3
+ # @see https://docs.gitlab.com/ce/api/services.html
4
+ module Services
5
+ # Create/Edit service
6
+ # Full service params documentation: https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/services.md
7
+ #
8
+ # @example
9
+ # Gitlab.change_service(42, :redmine, { new_issue_url: 'https://example.com/projects/test_project/issues/new',
10
+ # project_url: 'https://example.com/projects/test_project/issues',
11
+ # issues_url: 'https://example.com/issues/:id' })
12
+ #
13
+ # @param [Integer] project The ID of a project.
14
+ # @param [String] service A service code name.
15
+ # @param [Hash] params A service parameters.
16
+ # @return [Boolean]
17
+ def change_service(project, service, params)
18
+ put("/projects/#{project}/services/#{correct_service_name(service)}", body: params)
19
+ end
20
+
21
+ # Delete service
22
+ #
23
+ # @example
24
+ # Gitlab.delete_service(42, :redmine)
25
+ #
26
+ # @param [Integer] project The ID of a project.
27
+ # @param [String] service A service code name.
28
+ # @return [Boolean]
29
+ def delete_service(project, service)
30
+ delete("/projects/#{project}/services/#{correct_service_name(service)}")
31
+ end
32
+
33
+ # Get service
34
+ #
35
+ # @example
36
+ # Gitlab.service(42, :redmine)
37
+ #
38
+ # @param [Integer] project The ID of a project.
39
+ # @param [String] service A service code name.
40
+ # @return [Gitlab::ObjectifiedHash]
41
+ def service(project, service)
42
+ get("/projects/#{project}/services/#{correct_service_name(service)}")
43
+ end
44
+
45
+ private
46
+ def correct_service_name(service)
47
+ service.to_s.gsub('_', '-')
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,91 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to snippets.
3
+ # @see https://docs.gitlab.com/ce/api/project_snippets.html
4
+ module Snippets
5
+ # Gets a list of project's snippets.
6
+ #
7
+ # @example
8
+ # Gitlab.snippets(42)
9
+ #
10
+ # @param [Integer] project The ID of a project.
11
+ # @param [Hash] options A customizable set of options.
12
+ # @option options [Integer] :page The page number.
13
+ # @option options [Integer] :per_page The number of results per page.
14
+ # @return [Gitlab::ObjectifiedHash]
15
+ def snippets(project, options={})
16
+ get("/projects/#{project}/snippets", query: options)
17
+ end
18
+
19
+ # Gets information about a snippet.
20
+ #
21
+ # @example
22
+ # Gitlab.snippet(2, 14)
23
+ #
24
+ # @param [Integer] project The ID of a project.
25
+ # @param [Integer] id The ID of a snippet.
26
+ # @return [Gitlab::ObjectifiedHash]
27
+ def snippet(project, id)
28
+ get("/projects/#{project}/snippets/#{id}")
29
+ end
30
+
31
+ # Creates a new snippet.
32
+ #
33
+ # @example
34
+ # Gitlab.create_snippet(42, { title: 'REST', file_name: 'api.rb', code: 'some code' })
35
+ #
36
+ # @param [Integer] project The ID of a project.
37
+ # @param [Hash] options A customizable set of options.
38
+ # @option options [String] :title (required) The title of a snippet.
39
+ # @option options [String] :file_name (required) The name of a snippet file.
40
+ # @option options [String] :code (required) The content of a snippet.
41
+ # @option options [String] :lifetime (optional) The expiration date of a snippet.
42
+ # @return [Gitlab::ObjectifiedHash] Information about created snippet.
43
+ def create_snippet(project, options={})
44
+ post("/projects/#{project}/snippets", body: options)
45
+ end
46
+
47
+ # Updates a snippet.
48
+ #
49
+ # @example
50
+ # Gitlab.edit_snippet(42, 34, { file_name: 'README.txt' })
51
+ #
52
+ # @param [Integer] project The ID of a project.
53
+ # @param [Integer] id The ID of a snippet.
54
+ # @param [Hash] options A customizable set of options.
55
+ # @option options [String] :title The title of a snippet.
56
+ # @option options [String] :file_name The name of a snippet file.
57
+ # @option options [String] :code The content of a snippet.
58
+ # @option options [String] :lifetime The expiration date of a snippet.
59
+ # @return [Gitlab::ObjectifiedHash] Information about updated snippet.
60
+ def edit_snippet(project, id, options={})
61
+ put("/projects/#{project}/snippets/#{id}", body: options)
62
+ end
63
+
64
+ # Deletes a snippet.
65
+ #
66
+ # @example
67
+ # Gitlab.delete_snippet(2, 14)
68
+ #
69
+ # @param [Integer] project The ID of a project.
70
+ # @param [Integer] id The ID of a snippet.
71
+ # @return [Gitlab::ObjectifiedHash] Information about deleted snippet.
72
+ def delete_snippet(project, id)
73
+ delete("/projects/#{project}/snippets/#{id}")
74
+ end
75
+
76
+ # Returns raw project snippet content as plain text.
77
+ #
78
+ # @example
79
+ # Gitlab.snippet_content(2, 14)
80
+ #
81
+ # @param [Integer] project The ID of a project.
82
+ # @param [Integer] id The ID of a snippet.
83
+ # @return [Gitlab::ObjectifiedHash] Information about deleted snippet.
84
+ def snippet_content(project, id)
85
+ get("/projects/#{project}/snippets/#{id}/raw",
86
+ format: nil,
87
+ headers: { Accept: 'text/plain' },
88
+ parser: ::Gitlab::Request::Parser)
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,59 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to system hooks.
3
+ # @see https://docs.gitlab.com/ce/api/system_hooks.html
4
+ module SystemHooks
5
+ # Gets a list of system hooks.
6
+ #
7
+ # @example
8
+ # Gitlab.hooks
9
+ # Gitlab.system_hooks
10
+ #
11
+ # @param [Hash] options A customizable set of options.
12
+ # @option options [Integer] :page The page number.
13
+ # @option options [Integer] :per_page The number of results per page.
14
+ # @return [Array<Gitlab::ObjectifiedHash>]
15
+ def hooks(options={})
16
+ get("/hooks", query: options)
17
+ end
18
+ alias_method :system_hooks, :hooks
19
+
20
+ # Adds a new system hook.
21
+ #
22
+ # @example
23
+ # Gitlab.add_hook('http://example.com/hook')
24
+ # Gitlab.add_system_hook('https://api.example.net/v1/hook')
25
+ #
26
+ # @param [String] url The hook URL.
27
+ # @return [Gitlab::ObjectifiedHash]
28
+ def add_hook(url)
29
+ post("/hooks", body: { url: url })
30
+ end
31
+ alias_method :add_system_hook, :add_hook
32
+
33
+ # Tests a system hook.
34
+ #
35
+ # @example
36
+ # Gitlab.hook(3)
37
+ # Gitlab.system_hook(12)
38
+ #
39
+ # @param [Integer] id The ID of a system hook.
40
+ # @return [Array<Gitlab::ObjectifiedHash>]
41
+ def hook(id)
42
+ get("/hooks/#{id}")
43
+ end
44
+ alias_method :system_hook, :hook
45
+
46
+ # Deletes a new system hook.
47
+ #
48
+ # @example
49
+ # Gitlab.delete_hook(3)
50
+ # Gitlab.delete_system_hook(12)
51
+ #
52
+ # @param [Integer] id The ID of a system hook.
53
+ # @return [Gitlab::ObjectifiedHash]
54
+ def delete_hook(id)
55
+ delete("/hooks/#{id}")
56
+ end
57
+ alias_method :delete_system_hook, :delete_hook
58
+ end
59
+ end