gitlab 4.2.0 → 4.3.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 (84) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +33 -0
  3. data/.travis.yml +8 -3
  4. data/README.md +7 -7
  5. data/Rakefile +11 -3
  6. data/gitlab.gemspec +11 -11
  7. data/lib/gitlab.rb +2 -2
  8. data/lib/gitlab/api.rb +2 -1
  9. data/lib/gitlab/cli.rb +2 -6
  10. data/lib/gitlab/cli_helpers.rb +18 -20
  11. data/lib/gitlab/client.rb +8 -5
  12. data/lib/gitlab/client/branches.rb +4 -4
  13. data/lib/gitlab/client/build_variables.rb +64 -2
  14. data/lib/gitlab/client/deployments.rb +32 -0
  15. data/lib/gitlab/client/groups.rb +49 -0
  16. data/lib/gitlab/client/issues.rb +71 -0
  17. data/lib/gitlab/client/merge_requests.rb +1 -0
  18. data/lib/gitlab/client/pipeline_schedules.rb +133 -0
  19. data/lib/gitlab/client/pipeline_triggers.rb +2 -2
  20. data/lib/gitlab/client/projects.rb +1 -1
  21. data/lib/gitlab/client/repository_files.rb +2 -2
  22. data/lib/gitlab/client/users.rb +5 -5
  23. data/lib/gitlab/configuration.rb +2 -2
  24. data/lib/gitlab/error.rb +10 -2
  25. data/lib/gitlab/file_response.rb +1 -1
  26. data/lib/gitlab/help.rb +5 -6
  27. data/lib/gitlab/page_links.rb +2 -2
  28. data/lib/gitlab/request.rb +34 -50
  29. data/lib/gitlab/shell.rb +5 -8
  30. data/lib/gitlab/version.rb +1 -1
  31. data/spec/fixtures/deployment.json +57 -0
  32. data/spec/fixtures/deployments.json +116 -0
  33. data/spec/fixtures/group_edit.json +14 -0
  34. data/spec/fixtures/group_subgroups.json +16 -0
  35. data/spec/fixtures/pipeline_schedule.json +32 -0
  36. data/spec/fixtures/pipeline_schedule_create.json +21 -0
  37. data/spec/fixtures/pipeline_schedule_update.json +26 -0
  38. data/spec/fixtures/pipeline_schedule_variable.json +5 -0
  39. data/spec/fixtures/pipeline_schedule_variable_update.json +5 -0
  40. data/spec/fixtures/pipeline_schedules.json +22 -0
  41. data/spec/gitlab/api_spec.rb +11 -0
  42. data/spec/gitlab/cli_helpers_spec.rb +14 -15
  43. data/spec/gitlab/cli_spec.rb +11 -11
  44. data/spec/gitlab/client/award_emojis_spec.rb +55 -55
  45. data/spec/gitlab/client/boards_spec.rb +12 -12
  46. data/spec/gitlab/client/branches_spec.rb +22 -22
  47. data/spec/gitlab/client/build_variables_spec.rb +93 -10
  48. data/spec/gitlab/client/builds_spec.rb +36 -36
  49. data/spec/gitlab/client/commits_spec.rb +21 -21
  50. data/spec/gitlab/client/deployments_spec.rb +38 -0
  51. data/spec/gitlab/client/environments_spec.rb +18 -18
  52. data/spec/gitlab/client/groups_spec.rb +73 -22
  53. data/spec/gitlab/client/issues_spec.rb +121 -22
  54. data/spec/gitlab/client/jobs_spec.rb +13 -13
  55. data/spec/gitlab/client/keys_spec.rb +2 -2
  56. data/spec/gitlab/client/labels_spec.rb +12 -12
  57. data/spec/gitlab/client/merge_requests_spec.rb +23 -23
  58. data/spec/gitlab/client/milestones_spec.rb +12 -12
  59. data/spec/gitlab/client/namespaces_spec.rb +3 -3
  60. data/spec/gitlab/client/notes_spec.rb +40 -40
  61. data/spec/gitlab/client/pipeline_schedules_spec.rb +158 -0
  62. data/spec/gitlab/client/pipeline_triggers_spec.rb +17 -17
  63. data/spec/gitlab/client/pipelines_spec.rb +22 -22
  64. data/spec/gitlab/client/projects_spec.rb +75 -75
  65. data/spec/gitlab/client/repositories_spec.rb +16 -16
  66. data/spec/gitlab/client/repository_files_spec.rb +10 -10
  67. data/spec/gitlab/client/runners_spec.rb +20 -22
  68. data/spec/gitlab/client/services_spec.rb +6 -6
  69. data/spec/gitlab/client/snippets_spec.rb +12 -12
  70. data/spec/gitlab/client/system_hooks_spec.rb +12 -12
  71. data/spec/gitlab/client/tags_spec.rb +19 -20
  72. data/spec/gitlab/client/todos_spec.rb +12 -12
  73. data/spec/gitlab/client/users_spec.rb +49 -49
  74. data/spec/gitlab/error_spec.rb +50 -23
  75. data/spec/gitlab/file_response_spec.rb +6 -6
  76. data/spec/gitlab/help_spec.rb +5 -5
  77. data/spec/gitlab/objectified_hash_spec.rb +8 -8
  78. data/spec/gitlab/page_links_spec.rb +1 -1
  79. data/spec/gitlab/paginated_response_spec.rb +4 -4
  80. data/spec/gitlab/request_spec.rb +19 -19
  81. data/spec/gitlab/shell_spec.rb +12 -12
  82. data/spec/gitlab_spec.rb +13 -14
  83. data/spec/spec_helper.rb +10 -45
  84. metadata +46 -3
@@ -0,0 +1,32 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to deployments.
3
+ # @see https://docs.gitlab.com/ce/api/deployments.html
4
+ module Deployments
5
+ # Gets a list of project deployments.
6
+ #
7
+ # @example
8
+ # Gitlab.deployments(5)
9
+ # Gitlab.deployments(5, { per_page: 10, page: 2 })
10
+ #
11
+ # @param [Integer, String] project The ID or name of a project.
12
+ # @param [Hash] options A customizable set of options.
13
+ # @option options [Integer] :page The page number.
14
+ # @option options [Integer] :per_page The number of results per page.
15
+ # @return [Array<Gitlab::ObjectifiedHash>]
16
+ def deployments(project, options={})
17
+ get("/projects/#{url_encode project}/deployments", query: options)
18
+ end
19
+
20
+ # Gets a single deployment.
21
+ #
22
+ # @example
23
+ # Gitlab.deployment(5, 36)
24
+ #
25
+ # @param [Integer, String] project The ID or name of a project.
26
+ # @param [Integer] id The ID of an deployment.
27
+ # @return [Gitlab::ObjectifiedHash]
28
+ def deployment(project, id)
29
+ get("/projects/#{url_encode project}/deployments/#{id}")
30
+ end
31
+ end
32
+ end
@@ -66,6 +66,18 @@ class Gitlab::Client
66
66
  get("/groups/#{id}/members", query: options)
67
67
  end
68
68
 
69
+ # Get details of a single group member.
70
+ #
71
+ # @example
72
+ # Gitlab.group_member(1, 10)
73
+ #
74
+ # @param [Integer] team_id The ID of the group to find a member in.
75
+ # @param [Integer] user_id The user id of the member to find.
76
+ # @return [Gitlab::ObjectifiedHash] (id, username, name, email, state, access_level ...)
77
+ def group_member(team_id, user_id)
78
+ get("/groups/#{team_id}/members/#{user_id}")
79
+ end
80
+
69
81
  # Adds a user to group.
70
82
  #
71
83
  # @example
@@ -140,5 +152,42 @@ class Gitlab::Client
140
152
  def group_projects(id, options={})
141
153
  get("/groups/#{id}/projects", query: options)
142
154
  end
155
+
156
+ # Get a list of subgroups under a group
157
+ # @example
158
+ # Gitlab.group_subgroups(1)
159
+ #
160
+ # @param [Integer] id the ID of a group
161
+ # @param [Hash] options A customizable set of options.
162
+ # @option options [String] :skip_groups Skip the group IDs passed.
163
+ # @option options [String] :all_available Show all the groups you have access to (defaults to false for authenticated users).
164
+ # @option options [String] :search Return the list of authorized groups matching the search criteria.
165
+ # @option options [String] :order_by Order groups by name or path. Default is name.
166
+ # @option options [String] :sort Order groups in asc or desc order. Default is asc.
167
+ # @option options [String] :statistics Include group statistics (admins only).
168
+ # @option options [String] :owned Limit to groups owned by the current user.
169
+ # @return [Array<Gitlab::ObjectifiedHash>] List of subgroups under a group
170
+ def group_subgroups(id, options={})
171
+ get("/groups/#{id}/subgroups", query: options)
172
+ end
173
+
174
+ # Updates an existing group.
175
+ #
176
+ # @example
177
+ # Gitlab.edit_group(42)
178
+ # Gitlab.edit_group(42, { name: 'Group Name' })
179
+ #
180
+ # @param [Integer] group The ID.
181
+ # @param [Hash] options A customizable set of options
182
+ # @option options [String] :name The name of the group.
183
+ # @option options [String] :path The path of the group.
184
+ # @option options [String] :description The description of the group.
185
+ # @option options [String] :visibility The visibility level of the group. Can be private, internal, or public
186
+ # @option options [String] :lfs_enabled Enable/disable Large File Storage (LFS) for the projects in this groupr.
187
+ # @option options [String] :request_access_enabled Allow users to request member access.
188
+ # @return [Gitlab::ObjectifiedHash] Information about the edited group.
189
+ def edit_group(id, options={})
190
+ put("/groups/#{id}", body: options)
191
+ end
143
192
  end
144
193
  end
@@ -133,5 +133,76 @@ class Gitlab::Client
133
133
  def delete_issue(project, id)
134
134
  delete("/projects/#{url_encode project}/issues/#{id}")
135
135
  end
136
+
137
+ # Move an issue.
138
+ #
139
+ # @example
140
+ # Gitlab.move_issue(3, 42, { to_project_id: '4' })
141
+ #
142
+ # @param [Integer, String] project The ID or name of a project.
143
+ # @param [Integer] id The ID of an issue.
144
+ # @option options [String] :to_project_id The ID of the new project.
145
+ # @return [Gitlab::ObjectifiedHash] Information about moved issue.
146
+ def move_issue(project, id, options={})
147
+ post("/projects/#{url_encode project}/issues/#{id}/move", body: options)
148
+ end
149
+
150
+ # Sets an estimated time of work for an issue.
151
+ #
152
+ # @example
153
+ # Gitlab.estimate_time_of_issue(3, 42, '3h30m')
154
+ #
155
+ # @param [Integer, String] project The ID or name of a project.
156
+ # @param [Integer] id The ID of an issue.
157
+ # @param [String] duration The duration in human format. e.g: 3h30m
158
+ def estimate_time_of_issue(project, id, duration)
159
+ post("/projects/#{url_encode project}/issues/#{id}/time_estimate", body: { duration: url_encode(duration) })
160
+ end
161
+
162
+ # Resets the estimated time for an issue to 0 seconds.
163
+ #
164
+ # @example
165
+ # Gitlab.reset_time_estimate_of_issue(3, 42)
166
+ #
167
+ # @param [Integer, String] project The ID or name of a project.
168
+ # @param [Integer] id The ID of an issue.
169
+ def reset_time_estimate_of_issue(project, id)
170
+ post("/projects/#{url_encode project}/issues/#{id}/reset_time_estimate")
171
+ end
172
+
173
+ # Adds spent time for an issue
174
+ #
175
+ # @example
176
+ # Gitlab.estimate_time_of_issue(3, 42, '3h30m')
177
+ #
178
+ # @param [Integer, String] project The ID or name of a project.
179
+ # @param [Integer] id The ID of an issue.
180
+ # @param [String] duration The time spent in human format. e.g: 3h30m
181
+ def add_time_spent_on_issue(project, id, duration)
182
+ post("/projects/#{url_encode project}/issues/#{id}/add_spent_time", body: { duration: url_encode(duration) })
183
+ end
184
+
185
+ # Resets the total spent time for this issue to 0 seconds.
186
+ #
187
+ # @example
188
+ # Gitlab.reset_time_spent_on_issue(3, 42)
189
+ #
190
+ # @param [Integer, String] project The ID or name of a project.
191
+ # @param [Integer] id The ID of an issue.
192
+ def reset_time_spent_on_issue(project, id)
193
+ post("/projects/#{url_encode project}/issues/#{id}/reset_spent_time")
194
+ end
195
+
196
+ # Get time tracking stats for an issue
197
+ #
198
+ # @example
199
+ # @gitlab.time_stats_for_issue(3, 42)
200
+ #
201
+ # @param [Integer, String] project The ID or name of a project.
202
+ # @param [Integer] id The ID of an issue.
203
+ def time_stats_for_issue(project, id)
204
+ get("/projects/#{url_encode project}/issues/#{id}/time_stats")
205
+ end
206
+
136
207
  end
137
208
  end
@@ -44,6 +44,7 @@ class Gitlab::Client
44
44
  # @option options [String] :target_branch (required) The target branch name.
45
45
  # @option options [Integer] :assignee_id (optional) The ID of a user to assign merge request.
46
46
  # @option options [Integer] :target_project_id (optional) The target project ID.
47
+ # @option options [String] :labels (optional) Labels as a comma-separated list.
47
48
  # @return [Gitlab::ObjectifiedHash] Information about created merge request.
48
49
  def create_merge_request(project, title, options={})
49
50
  body = { title: title }.merge(options)
@@ -0,0 +1,133 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to pipeline schedules.
3
+ # @see https://docs.gitlab.com/ce/api/pipeline_schedules.html
4
+ module PipelineSchedules
5
+ # Gets a list of project pipeline schedules.
6
+ #
7
+ # @example
8
+ # Gitlab.pipeline_schedules(5)
9
+ # Gitlab.pipeline_schedules(5, { scope: 'active' })
10
+ #
11
+ # @param [Integer, String] project the ID or name of a project.
12
+ # @param [Hash] options A customizable set of options.
13
+ # @options options [String] :scope The scope of pipeline schedules, one of a 'active' or 'inactive'.
14
+ # @return [Array<Gitlab::ObjectifiedHash>]
15
+ def pipeline_schedules(project, options={})
16
+ get("/projects/#{url_encode project}/pipeline_schedules", query: options)
17
+ end
18
+
19
+ # Gets a single pipeline schedule.
20
+ #
21
+ # @example
22
+ # Gitlab.pipeline_schedule(5, 3)
23
+ #
24
+ # @param [Integer, String] project The ID or name of a project.
25
+ # @param [Integer] id The ID of the pipeline schedule.
26
+ # @return [Gitlab::ObjectifiedHash]
27
+ def pipeline_schedule(project, id)
28
+ get("/projects/#{url_encode project}/pipeline_schedules/#{id}")
29
+ end
30
+
31
+ # Create a pipeline schedule.
32
+ #
33
+ # @example
34
+ # Gitlab.create_pipeline_schedule(5, { description: 'example' })
35
+ #
36
+ # @param [Integer, String] project The ID or name of a project.
37
+ # @param [Hash] options A customizable set of options.
38
+ # @option options [String] :description The description of pipeline scehdule.
39
+ # @option options [String] :ref The branch/tag name will be triggered.
40
+ # @option options [String] :cron The cron (e.g. 0 1 * * *).
41
+ # @option options [String] :cron_timezone The timezone supproted by ActiveSupport::TimeZone (e.g. Pacific Time (US & Canada)) (default: 'UTC').
42
+ # @option options [Boolean] :active The activation of pipeline schedule. If false is set, the pipeline schedule will deactivated initially (default: true).
43
+ # @return [Array<Gitlab::ObjectifiedHash>]
44
+ def create_pipeline_schedule(project, options={})
45
+ post("/projects/#{url_encode project}/pipeline_schedules", query: options)
46
+ end
47
+
48
+ # Updates the pipeline schedule of a project.
49
+ #
50
+ # @example
51
+ # Gitlab.edit_pipeline_schedule(3, 2, { description: 'example2' })
52
+ #
53
+ # @param [Integer, String] project The ID or name of a project.
54
+ # @param [Integer] The pipeline schedule ID.
55
+ # @param [Hash] options A customizable set of options.
56
+ # @option options [String] :description The description of pipeline scehdule.
57
+ # @option options [String] :ref The branch/tag name will be triggered.
58
+ # @option options [String] :cron The cron (e.g. 0 1 * * *).
59
+ # @option options [String] :cron_timezone The timezone supproted by ActiveSupport::TimeZone (e.g. Pacific Time (US & Canada)) (default: 'UTC').
60
+ # @option options [Boolean] :active The activation of pipeline schedule. If false is set, the pipeline schedule will deactivated initially (default: true).
61
+ # @return [Array<Gitlab::ObjectifiedHash>] The updated pipeline schedule.
62
+ def edit_pipeline_schedule(project, pipeline_schedule_id, options={})
63
+ put("/projects/#{url_encode project}/pipeline_schedules/#{pipeline_schedule_id}", query: options)
64
+ end
65
+
66
+ # Take ownership of a pipeline schedule.
67
+ #
68
+ # @example
69
+ # Gitlab.pipeline_schedule_take_ownership(5, 1)
70
+ #
71
+ # @param [Integer, String] project The ID or name of a project.
72
+ # @param [Integer] trigger_id The pipeline schedule ID.
73
+ # @return [Gitlab::ObjectifiedHash] The updated pipeline schedule.
74
+ def pipeline_schedule_take_ownership(project, pipeline_schedule_id)
75
+ post("/projects/#{url_encode project}/pipeline_schedules/#{pipeline_schedule_id}/take_ownership")
76
+ end
77
+
78
+ # Delete a pipeline schedule.
79
+ #
80
+ # @example
81
+ # Gitlab.delete_pipeline_schedule(5, 1)
82
+ #
83
+ # @param [Integer, String] project The ID or name of a project.
84
+ # @param [Integer] trigger_id The pipeline schedule ID.
85
+ # @return [Gitlab::ObjectifiedHash] The deleted pipeline schedule.
86
+ def delete_pipeline_schedule(project, pipeline_schedule_id)
87
+ delete("/projects/#{url_encode project}/pipeline_schedules/#{pipeline_schedule_id}")
88
+ end
89
+
90
+ # Create a pipeline schedule variable.
91
+ #
92
+ # @example
93
+ # Gitlab.create_pipeline_schedule_variable(5, 1, { key: 'foo', value: 'bar' })
94
+ #
95
+ # @param [Integer, String] project The ID or name of a project.
96
+ # @param [Integer] trigger_id The pipeline schedule ID.
97
+ # @param [Hash] options A customizable set of options.
98
+ # @option options [String] :key The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed.
99
+ # @option options [String] :value The value of a variable
100
+ # @return [Array<Gitlab::ObjectifiedHash>] The created pipeline schedule variable.
101
+ def create_pipeline_schedule_variable(project, pipeline_schedule_id, options={})
102
+ post("/projects/#{url_encode project}/pipeline_schedules/#{pipeline_schedule_id}/variables", query: options)
103
+ end
104
+
105
+ # Updates the variable of a pipeline schedule.
106
+ #
107
+ # @example
108
+ # Gitlab.edit_pipeline_schedule_variable(3, 2, "foo" { value: 'bar' })
109
+ #
110
+ # @param [Integer, String] project The ID or name of a project.
111
+ # @param [Integer] The pipeline schedule ID.
112
+ # @param [String] The key of a variable.
113
+ # @param [Hash] options A customizable set of options.
114
+ # @option options [String] :value The value of a variable.
115
+ # @return [Array<Gitlab::ObjectifiedHash>] The updated pipeline schedule variable.
116
+ def edit_pipeline_schedule_variable(project, pipeline_schedule_id, key, options={})
117
+ put("/projects/#{url_encode project}/pipeline_schedules/#{pipeline_schedule_id}/variables/#{url_encode key}", query: options)
118
+ end
119
+
120
+ # Delete the variable of a pipeline schedule
121
+ #
122
+ # @example
123
+ # Gitlab.delete_pipeline_schedule_variable(3, 2, "foo")
124
+ #
125
+ # @param [Integer, String] project The ID or name of a project.
126
+ # @param [Integer] The pipeline schedule ID.
127
+ # @param [String] The key of a variable.
128
+ # @return [Array<Gitlab::ObjectifiedHash>] The deleted pipeline schedule variable.
129
+ def delete_pipeline_schedule_variable(project, pipeline_schedule_id, key, options={})
130
+ delete("/projects/#{url_encode project}/pipeline_schedules/#{pipeline_schedule_id}/variables/#{url_encode key}")
131
+ end
132
+ end
133
+ end
@@ -80,8 +80,8 @@ class Gitlab::Client
80
80
  # Run the given project pipeline trigger.
81
81
  #
82
82
  # @example
83
- # Gitlab.trigger_build(5, '7b9148c158980bbd9bcea92c17522d', 'master')
84
- # Gitlab.trigger_build(5, '7b9148c158980bbd9bcea92c17522d', 'master', { variable1: "value", variable2: "value2" })
83
+ # Gitlab.run_trigger(5, '7b9148c158980bbd9bcea92c17522d', 'master')
84
+ # Gitlab.run_trigger(5, '7b9148c158980bbd9bcea92c17522d', 'master', { variable1: "value", variable2: "value2" })
85
85
  #
86
86
  # @see https://docs.gitlab.com/ce/ci/triggers/README.html
87
87
  #
@@ -298,7 +298,7 @@ class Gitlab::Client
298
298
  #
299
299
  # @param [Integer] id The ID of a project.
300
300
  # @return [Gitlab::ObjectifiedHash] Information about deleted push rule.
301
- def delete_push_rule(id, options={})
301
+ def delete_push_rule(id)
302
302
  delete("/projects/#{url_encode id}/push_rule")
303
303
  end
304
304
 
@@ -15,7 +15,6 @@ class Gitlab::Client
15
15
  # @param [String] ref The name of a repository branch or tag or if not given the default branch.
16
16
  # @return [String]
17
17
  def file_contents(project, filepath, ref='master')
18
- ref = URI.encode(ref, /\W/)
19
18
  get "/projects/#{url_encode project}/repository/files/#{url_encode filepath}/raw",
20
19
  query: { ref: ref},
21
20
  format: nil,
@@ -95,7 +94,8 @@ class Gitlab::Client
95
94
  # @option options [String] :author_email Commit author's email address
96
95
  # @return [Gitlab::ObjectifiedHash]
97
96
  def remove_file(project, path, branch, commit_message, options = {})
98
- delete("/projects/#{url_encode project}/repository/files/#{url_encode path}", body: {
97
+ delete("/projects/#{url_encode project}/repository/files/#{url_encode path}",
98
+ body: {
99
99
  branch: branch,
100
100
  commit_message: commit_message
101
101
  }.merge(options))
@@ -49,11 +49,11 @@ class Gitlab::Client
49
49
  # @return [Gitlab::ObjectifiedHash] Information about created user.
50
50
  def create_user(*args)
51
51
  options = Hash === args.last ? args.pop : {}
52
- if args[2]
53
- body = { email: args[0], password: args[1], username: args[2] }
54
- else
55
- body = { email: args[0], password: args[1], name: args[0] }
56
- end
52
+ body = if args[2]
53
+ { email: args[0], password: args[1], username: args[2] }
54
+ else
55
+ { email: args[0], password: args[1], name: args[0] }
56
+ end
57
57
  body.merge!(options)
58
58
  post('/users', body: body)
59
59
  end
@@ -3,7 +3,7 @@ module Gitlab
3
3
  # Defines constants and methods related to configuration.
4
4
  module Configuration
5
5
  # An array of valid keys in the options hash when configuring a Gitlab::API.
6
- VALID_OPTIONS_KEYS = [:endpoint, :private_token, :user_agent, :sudo, :httparty].freeze
6
+ VALID_OPTIONS_KEYS = %i(endpoint private_token user_agent sudo httparty).freeze
7
7
 
8
8
  # The user agent that will be sent to the API endpoint if none is set.
9
9
  DEFAULT_USER_AGENT = "Gitlab Ruby Gem #{Gitlab::VERSION}".freeze
@@ -48,7 +48,7 @@ module Gitlab
48
48
 
49
49
  httparty = Gitlab::CLI::Helpers.yaml_load(options)
50
50
 
51
- raise ArgumentError, "HTTParty config should be a Hash." unless httparty.is_a? Hash
51
+ raise ArgumentError, 'HTTParty config should be a Hash.' unless httparty.is_a? Hash
52
52
  Gitlab::CLI::Helpers.symbolize_keys httparty
53
53
  end
54
54
  end
@@ -16,13 +16,20 @@ module Gitlab
16
16
  super(build_error_message)
17
17
  end
18
18
 
19
- # Status code returned in the http response.
19
+ # Status code returned in the HTTP response.
20
20
  #
21
21
  # @return [Integer]
22
22
  def response_status
23
23
  @response.code
24
24
  end
25
25
 
26
+ # Body content returned in the HTTP response
27
+ #
28
+ # @return [String]
29
+ def response_message
30
+ @response.parsed_response.message
31
+ end
32
+
26
33
  private
27
34
 
28
35
  # Human friendly message.
@@ -30,7 +37,8 @@ module Gitlab
30
37
  # @return [String]
31
38
  def build_error_message
32
39
  parsed_response = @response.parsed_response
33
- message = parsed_response.message || parsed_response.error
40
+ message = parsed_response.respond_to?(:message) ? parsed_response.message : parsed_response['message']
41
+ message = parsed_response.respond_to?(:error) ? parsed_response.error : parsed_response['error'] unless message
34
42
 
35
43
  "Server responded with code #{@response.code}, message: " \
36
44
  "#{handle_message(message)}. " \
@@ -39,7 +39,7 @@ module Gitlab
39
39
 
40
40
  # Parse filename from the 'Content Disposition' header.
41
41
  def parse_headers!(headers)
42
- @filename = headers[HEADER_CONTENT_DISPOSITION].split("filename=")[1]
42
+ @filename = headers[HEADER_CONTENT_DISPOSITION].split('filename=')[1]
43
43
  @filename = @filename[1...-1] if @filename[0] == '"' # Unquote filenames
44
44
  end
45
45
  end
@@ -33,7 +33,7 @@ module Gitlab::Help
33
33
  def ri_cmd
34
34
  which_ri = `which ri`.chomp
35
35
  if which_ri.empty?
36
- fail "'ri' tool not found in $PATH. Please install it to use the help."
36
+ raise "'ri' tool not found in $PATH. Please install it to use the help."
37
37
  end
38
38
 
39
39
  which_ri
@@ -61,7 +61,7 @@ module Gitlab::Help
61
61
  def actions_table(topic=nil)
62
62
  rows = topic ? help_map[topic] : help_map.keys
63
63
  table do |t|
64
- t.title = topic || "Help Topics"
64
+ t.title = topic || 'Help Topics'
65
65
 
66
66
  # add_row expects an array and we have strings hence the map.
67
67
  rows.sort.map { |r| [r] }.each_with_index do |row, index|
@@ -73,7 +73,7 @@ module Gitlab::Help
73
73
 
74
74
  # Returns full namespace of a command (e.g. Gitlab::Client::Branches.cmd)
75
75
  def namespace(cmd)
76
- method_owners.select { |method| method[:name] === cmd }.
76
+ method_owners.select { |method| method[:name] == cmd }.
77
77
  map { |method| method[:owner] + '.' + method[:name] }.
78
78
  shift
79
79
  end
@@ -82,14 +82,13 @@ module Gitlab::Help
82
82
  def change_help_output!(cmd, output_str)
83
83
  output_str.gsub!(/#{cmd}\((.*?)\)/m, cmd + ' \1')
84
84
  output_str.gsub!(/\,[\s]*/, ' ')
85
-
85
+
86
86
  # Ensure @option descriptions are on a single line
87
87
  output_str.gsub!(/\n\[/, " \[")
88
88
  output_str.gsub!(/\s(@)/, "\n@")
89
89
  output_str.gsub!(/(\])\n(\:)/, '\1 \2')
90
90
  output_str.gsub!(/(\:.*)(\n)(.*\.)/, '\1 \3')
91
91
  output_str.gsub!(/\{(.+)\}/, '"{\1}"')
92
-
93
92
  end
94
- end # class << self
93
+ end
95
94
  end