gitlab 4.2.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
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