gitlab-akerl 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gitlab.gemspec
4
+ gemspec
@@ -0,0 +1,24 @@
1
+ Copyright (c) 2012-2015 Nihad Abbasov <mail@narkoz.me>
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24
+ POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,192 @@
1
+ ## Fork info
2
+
3
+ This is a fork of the upstream gitlab gem to cut a new release, as the latest upstream release doesn't support Ruby 2.4.0. The only changes I've made:
4
+
5
+ * Settings Gitlab::VERSION to 4.0.0
6
+ * Updating badge icons to not point to upstream project
7
+ * Set gemspec name to "gitlab-akerl"
8
+ * Added a .prospectus file to track deps
9
+
10
+ # Gitlab
11
+
12
+ [![Gem Version](https://img.shields.io/gem/v/basiccache.svg)](https://rubygems.org/gems/basiccache)
13
+ [![Dependency Status](https://img.shields.io/gemnasium/akerl/basiccache.svg)](https://gemnasium.com/akerl/basiccache)
14
+ [![License](https://img.shields.io/badge/license-BSD-green.svg)](https://github.com/akerl/gitlab/blob/master/LICENSE.txt)
15
+
16
+ [website](http://narkoz.github.io/gitlab) |
17
+ [documentation](http://rubydoc.info/gems/gitlab/frames) |
18
+ [gitlab-live](https://github.com/NARKOZ/gitlab-live)
19
+
20
+ Gitlab is a Ruby wrapper and CLI for the [GitLab API](https://docs.gitlab.com/ce/api/README.html) for Ruby 2.0+.
21
+
22
+ ## Installation
23
+
24
+ Install it from rubygems:
25
+
26
+ ```sh
27
+ gem install gitlab
28
+ ```
29
+
30
+ Or add to a Gemfile:
31
+
32
+ ```ruby
33
+ gem 'gitlab'
34
+ # gem 'gitlab', github: 'NARKOZ/gitlab'
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ Configuration example:
40
+
41
+ ```ruby
42
+ Gitlab.configure do |config|
43
+ config.endpoint = 'https://example.net/api/v3' # API endpoint URL, default: ENV['GITLAB_API_ENDPOINT']
44
+ config.private_token = 'qEsq1pt6HJPaNciie3MG' # user's private token or OAuth2 access token, default: ENV['GITLAB_API_PRIVATE_TOKEN']
45
+ # Optional
46
+ # config.user_agent = 'Custom User Agent' # user agent, default: 'Gitlab Ruby Gem [version]'
47
+ # config.sudo = 'user' # username for sudo mode, default: nil
48
+ end
49
+ ```
50
+
51
+ (Note: If you are using GitLab.com's hosted service, your endpoint will be `https://gitlab.com/api/v3`)
52
+
53
+ Usage examples:
54
+
55
+ ```ruby
56
+ # set an API endpoint
57
+ Gitlab.endpoint = 'http://example.net/api/v3'
58
+ # => "http://example.net/api/v3"
59
+
60
+ # set a user private token
61
+ Gitlab.private_token = 'qEsq1pt6HJPaNciie3MG'
62
+ # => "qEsq1pt6HJPaNciie3MG"
63
+
64
+ # configure a proxy server
65
+ Gitlab.http_proxy('proxyhost', 8888)
66
+ # proxy server w/ basic auth
67
+ Gitlab.http_proxy('proxyhost', 8888, 'proxyuser', 'strongpasswordhere')
68
+
69
+ # list projects
70
+ Gitlab.projects(per_page: 5)
71
+ # => [#<Gitlab::ObjectifiedHash:0x000000023326e0 @data={"id"=>1, "code"=>"brute", "name"=>"Brute", "description"=>nil, "path"=>"brute", "default_branch"=>nil, "owner"=>#<Gitlab::ObjectifiedHash:0x00000002331600 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>, "private"=>true, "issues_enabled"=>true, "merge_requests_enabled"=>true, "wall_enabled"=>true, "wiki_enabled"=>true, "created_at"=>"2012-09-17T09:41:56Z"}>, #<Gitlab::ObjectifiedHash:0x000000023450d8 @data={"id"=>2, "code"=>"mozart", "name"=>"Mozart", "description"=>nil, "path"=>"mozart", "default_branch"=>nil, "owner"=>#<Gitlab::ObjectifiedHash:0x00000002344ca0 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>, "private"=>true, "issues_enabled"=>true, "merge_requests_enabled"=>true, "wall_enabled"=>true, "wiki_enabled"=>true, "created_at"=>"2012-09-17T09:41:57Z"}>, #<Gitlab::ObjectifiedHash:0x00000002344958 @data={"id"=>3, "code"=>"gitlab", "name"=>"Gitlab", "description"=>nil, "path"=>"gitlab", "default_branch"=>nil, "owner"=>#<Gitlab::ObjectifiedHash:0x000000023447a0 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>, "private"=>true, "issues_enabled"=>true, "merge_requests_enabled"=>true, "wall_enabled"=>true, "wiki_enabled"=>true, "created_at"=>"2012-09-17T09:41:58Z"}>]
72
+
73
+ # initialize a new client
74
+ g = Gitlab.client(endpoint: 'https://api.example.com', private_token: 'qEsq1pt6HJPaNciie3MG')
75
+ # => #<Gitlab::Client:0x00000001e62408 @endpoint="https://api.example.com", @private_token="qEsq1pt6HJPaNciie3MG", @user_agent="Gitlab Ruby Gem 2.0.0">
76
+
77
+ # get a user
78
+ user = g.user
79
+ # => #<Gitlab::ObjectifiedHash:0x00000002217990 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "bio"=>nil, "skype"=>"", "linkedin"=>"", "twitter"=>"john", "dark_scheme"=>false, "theme_id"=>1, "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>
80
+
81
+ # get a user's email
82
+ user.email
83
+ # => "john@example.com"
84
+
85
+ # set a sudo mode to perform API calls as another user
86
+ Gitlab.sudo = 'other_user'
87
+ # => "other_user"
88
+
89
+ # disable a sudo mode
90
+ Gitlab.sudo = nil
91
+ # => nil
92
+
93
+ # a paginated response
94
+ projects = Gitlab.projects(per_page: 5)
95
+
96
+ # check existence of the next page
97
+ projects.has_next_page?
98
+
99
+ # retrieve the next page
100
+ projects.next_page
101
+
102
+ # iterate all projects
103
+ projects.auto_paginate do |project|
104
+ # do something
105
+ end
106
+
107
+ # retrieve all projects as an array
108
+ projects.auto_paginate
109
+ ```
110
+
111
+ For more information, refer to [documentation](http://rubydoc.info/gems/gitlab/frames).
112
+
113
+ ## CLI
114
+
115
+ It is possible to use this gem as a command line interface to gitlab. In order to make that work you need to set a few environment variables:
116
+ ```sh
117
+ export GITLAB_API_ENDPOINT=https://gitlab.yourcompany.com/api/v3
118
+ export GITLAB_API_PRIVATE_TOKEN=<your private token from /profile/account>
119
+ # This one is optional and can be used to set any HTTParty option you may need
120
+ # using YAML hash syntax. For example, this is how you would disable SSL
121
+ # verification (useful if using a self-signed cert).
122
+ export GITLAB_API_HTTPARTY_OPTIONS="{verify: false}"
123
+ ```
124
+
125
+ Usage:
126
+
127
+ When you want to know which CLI commands are supported, take a look at the client [commands implemented in this gem](http://www.rubydoc.info/gems/gitlab/3.4.0/Gitlab/Client). Any of those methods can be called as a command by passing the parameters of the commands as parameters of the CLI.
128
+
129
+ Usage examples:
130
+
131
+ ```sh
132
+ # list users
133
+ # see: http://www.rubydoc.info/gems/gitlab/3.4.0/Gitlab/Client/Users#users-instance_method
134
+ gitlab users
135
+
136
+ # get current user
137
+ # see: http://www.rubydoc.info/gems/gitlab/3.4.0/Gitlab/Client/Users#user-instance_method
138
+ gitlab user
139
+
140
+ # get a user
141
+ # see: http://www.rubydoc.info/gems/gitlab/3.4.0/Gitlab/Client/Users#user-instance_method
142
+ gitlab user 2
143
+
144
+ # filter output
145
+ gitlab user --only=id,username
146
+
147
+ gitlab user --except=email,bio
148
+
149
+ # get a user and render result as json
150
+ gitlab user 2 --json
151
+
152
+ # passing options hash to a command (use YAML)
153
+ # see: http://www.rubydoc.info/gems/gitlab/3.4.0/Gitlab/Client/MergeRequests#create_merge_request-instance_method
154
+ gitlab create_merge_request 4 "New merge request" "{source_branch: 'new_branch', target_branch: 'master', assignee_id: 42}"
155
+
156
+ ```
157
+
158
+ ## CLI Shell
159
+
160
+ Usage examples:
161
+
162
+ ```sh
163
+ # start shell session
164
+ gitlab shell
165
+
166
+ # list available commands
167
+ gitlab> help
168
+
169
+ # list groups
170
+ gitlab> groups
171
+
172
+ # protect a branch
173
+ gitlab> protect_branch 1 master
174
+
175
+ # passing options hash to a command (use YAML)
176
+ gitlab> create_merge_request 4 "New merge request" "{source_branch: 'new_branch', target_branch: 'master', assignee_id: 42}"
177
+ ```
178
+
179
+ Web version is available at https://gitlab-live.herokuapp.com
180
+ For more information, refer to [website](http://narkoz.github.io/gitlab).
181
+
182
+ ## Development
183
+
184
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
185
+ `rake spec` to run the tests. You can also run `bin/console` for an interactive
186
+ prompt that will allow you to experiment.
187
+
188
+ For more information see [CONTRIBUTING.md](https://github.com/NARKOZ/gitlab/blob/master/CONTRIBUTING.md).
189
+
190
+ ## License
191
+
192
+ Released under the BSD 2-clause license. See LICENSE.txt for details.
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec) do |spec|
5
+ spec.pattern = FileList['spec/**/*_spec.rb']
6
+ spec.rspec_opts = ['--color', '--format d']
7
+ end
8
+
9
+ task default: :spec
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # ENV['GITLAB_API_ENDPOINT'] = ''
4
+ # ENV['GITLAB_API_PRIVATE_TOKEN'] = ''
5
+
6
+ require 'bundler/setup'
7
+ require 'gitlab'
8
+ require 'pry'
9
+
10
+ Pry.start
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install &&
6
+ echo 'NOTE: You may need to set GITLAB_API_ENDPOINT and GITLAB_API_PRIVATE_TOKEN environment variables.'
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
+
5
+ require 'gitlab/cli'
6
+
7
+ Gitlab::CLI.start(ARGV)
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gitlab/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "gitlab-akerl"
8
+ gem.version = Gitlab::VERSION
9
+ gem.authors = ["Nihad Abbasov"]
10
+ gem.email = ["mail@narkoz.me"]
11
+ gem.description = %q{Ruby client and CLI for GitLab API}
12
+ gem.summary = %q{A Ruby wrapper and CLI for the GitLab API}
13
+ gem.homepage = "https://github.com/narkoz/gitlab"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.bindir = "exe"
17
+ gem.executables = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+ gem.license = "BSD"
21
+
22
+ gem.required_ruby_version = ">= 2.0.0"
23
+
24
+ gem.add_runtime_dependency 'httparty', '~> 0.14.0'
25
+ gem.add_runtime_dependency 'terminal-table', '1.7.1'
26
+
27
+ gem.add_development_dependency 'pry'
28
+ gem.add_development_dependency 'rake'
29
+ gem.add_development_dependency 'rspec'
30
+ gem.add_development_dependency 'webmock'
31
+ end
@@ -0,0 +1,45 @@
1
+ require 'gitlab/version'
2
+ require 'gitlab/objectified_hash'
3
+ require 'gitlab/configuration'
4
+ require 'gitlab/error'
5
+ require 'gitlab/page_links'
6
+ require 'gitlab/paginated_response'
7
+ require 'gitlab/file_response'
8
+ require 'gitlab/request'
9
+ require 'gitlab/api'
10
+ require 'gitlab/client'
11
+
12
+ module Gitlab
13
+ extend Configuration
14
+
15
+ # Alias for Gitlab::Client.new
16
+ #
17
+ # @return [Gitlab::Client]
18
+ def self.client(options={})
19
+ Gitlab::Client.new(options)
20
+ end
21
+
22
+ # Delegate to Gitlab::Client
23
+ def self.method_missing(method, *args, &block)
24
+ return super unless client.respond_to?(method)
25
+ client.send(method, *args, &block)
26
+ end
27
+
28
+ # Delegate to Gitlab::Client
29
+ def respond_to_missing?(method_name, include_private = false)
30
+ client.respond_to?(method_name) || super
31
+ end
32
+
33
+ # Delegate to HTTParty.http_proxy
34
+ def self.http_proxy(address=nil, port=nil, username=nil, password=nil)
35
+ Gitlab::Request.http_proxy(address, port, username, password)
36
+ end
37
+
38
+ # Returns an unsorted array of available client methods.
39
+ #
40
+ # @return [Array<Symbol>]
41
+ def self.actions
42
+ hidden = /endpoint|private_token|auth_token|user_agent|sudo|get|post|put|\Adelete\z|validate|set_request_defaults|httparty/
43
+ (Gitlab::Client.instance_methods - Object.methods).reject { |e| e[hidden] }
44
+ end
45
+ end
@@ -0,0 +1,19 @@
1
+ module Gitlab
2
+ # @private
3
+ class API < Request
4
+ # @private
5
+ attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
6
+ # @private
7
+ alias_method :auth_token=, :private_token=
8
+
9
+ # Creates a new API.
10
+ # @raise [Error:MissingCredentials]
11
+ def initialize(options={})
12
+ options = Gitlab.options.merge(options)
13
+ (Configuration::VALID_OPTIONS_KEYS + [:auth_token]).each do |key|
14
+ send("#{key}=", options[key]) if options[key]
15
+ end
16
+ set_request_defaults(@sudo)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,89 @@
1
+ require 'gitlab'
2
+ require 'terminal-table/import'
3
+ require_relative 'cli_helpers'
4
+ require_relative 'shell'
5
+
6
+ class Gitlab::CLI
7
+ extend Helpers
8
+
9
+ # If set to true, JSON will be rendered as output
10
+ @render_json = false
11
+
12
+ # Starts a new CLI session.
13
+ #
14
+ # @example
15
+ # Gitlab::CLI.start(['help'])
16
+ # Gitlab::CLI.start(['help', 'issues'])
17
+ #
18
+ # @param [Array] args The command and it's optional arguments.
19
+ def self.start(args)
20
+ command = args.shift.strip rescue 'help'
21
+ run(command, args)
22
+ end
23
+
24
+ # Processes a CLI command and outputs a result to the stream (stdout).
25
+ #
26
+ # @example
27
+ # Gitlab::CLI.run('help')
28
+ # Gitlab::CLI.run('help', ['issues'])
29
+ #
30
+ # @param [String] cmd The name of a command.
31
+ # @param [Array] args The optional arguments for a command.
32
+ # @return [nil]
33
+ def self.run(cmd, args=[])
34
+ case cmd
35
+ when 'help'
36
+ puts help(args.shift) { |out| out.gsub!(/Gitlab\./, 'gitlab ') }
37
+ when 'info'
38
+ endpoint = Gitlab.endpoint ? Gitlab.endpoint : 'not set'
39
+ private_token = Gitlab.private_token ? Gitlab.private_token : 'not set'
40
+ puts "Gitlab endpoint is #{endpoint}"
41
+ puts "Gitlab private token is #{private_token}"
42
+ puts "Ruby Version is #{RUBY_VERSION}"
43
+ puts "Gitlab Ruby Gem #{Gitlab::VERSION}"
44
+ when '-v', '--version'
45
+ puts "Gitlab Ruby Gem #{Gitlab::VERSION}"
46
+ when 'shell'
47
+ Gitlab::Shell.start
48
+ else
49
+ if args.include? '--json'
50
+ @json_output = true
51
+ args.delete '--json'
52
+ end
53
+
54
+ unless valid_command?(cmd)
55
+ puts "Unknown command. Run `gitlab help` for a list of available commands."
56
+ exit(1)
57
+ end
58
+
59
+ if args.any? && (args.last.start_with?('--only=') || args.last.start_with?('--except='))
60
+ command_args = args[0..-2]
61
+ else
62
+ command_args = args
63
+ end
64
+
65
+ begin
66
+ command_args.map! { |arg| symbolize_keys(yaml_load(arg)) }
67
+ rescue => e
68
+ puts e.message
69
+ exit 1
70
+ end
71
+
72
+ confirm_command(cmd)
73
+
74
+ data = gitlab_helper(cmd, command_args) { exit(1) }
75
+
76
+ render_output(cmd, args, data)
77
+ end
78
+ end
79
+
80
+ # Helper method that checks whether we want to get the output as json
81
+ # @return [nil]
82
+ def self.render_output(cmd, args, data)
83
+ if @json_output
84
+ output_json(cmd, args, data)
85
+ else
86
+ output_table(cmd, args, data)
87
+ end
88
+ end
89
+ end