labclient 0.1.0 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/lib/labclient.rb +65 -42
  3. data/lib/labclient/branches/branch.rb +25 -0
  4. data/lib/labclient/branches/create.rb +33 -0
  5. data/lib/labclient/client.rb +45 -5
  6. data/lib/labclient/common.rb +5 -0
  7. data/lib/labclient/docs.rb +5 -1
  8. data/lib/labclient/epics/epic.rb +13 -0
  9. data/lib/labclient/error.rb +1 -0
  10. data/lib/labclient/files/create.rb +14 -8
  11. data/lib/labclient/generator/generator.rb +70 -0
  12. data/lib/labclient/generator/names.rb +68 -0
  13. data/lib/labclient/generator/template_helper.rb +82 -0
  14. data/lib/labclient/generator/templates/environments.rb +98 -0
  15. data/lib/labclient/generator/templates/pages.rb +67 -0
  16. data/lib/labclient/generator/templates/pipeline_trigger.rb +82 -0
  17. data/lib/labclient/generator/wizard.rb +142 -0
  18. data/lib/labclient/groups/group.rb +17 -0
  19. data/lib/labclient/groups/stub.rb +8 -0
  20. data/lib/labclient/http.rb +8 -3
  21. data/lib/labclient/issues/agent_detail.rb +1 -1
  22. data/lib/labclient/issues/closed_by.rb +1 -1
  23. data/lib/labclient/issues/create.rb +17 -5
  24. data/lib/labclient/issues/delete.rb +1 -1
  25. data/lib/labclient/issues/issue.rb +21 -1
  26. data/lib/labclient/issues/move.rb +1 -1
  27. data/lib/labclient/issues/participants.rb +1 -1
  28. data/lib/labclient/issues/related_merge_requests.rb +1 -1
  29. data/lib/labclient/issues/show.rb +1 -1
  30. data/lib/labclient/issues/subscribe.rb +1 -1
  31. data/lib/labclient/issues/time_stats.rb +5 -5
  32. data/lib/labclient/issues/todo.rb +1 -1
  33. data/lib/labclient/issues/unsubscribe.rb +1 -1
  34. data/lib/labclient/issues/update.rb +1 -1
  35. data/lib/labclient/klass.rb +35 -3
  36. data/lib/labclient/lab_struct.rb +17 -0
  37. data/lib/labclient/license/list.rb +2 -2
  38. data/lib/labclient/members/member.rb +1 -0
  39. data/lib/labclient/merge_requests/accept.rb +16 -7
  40. data/lib/labclient/merge_requests/cancel_auto_merge.rb +1 -1
  41. data/lib/labclient/merge_requests/changes.rb +1 -1
  42. data/lib/labclient/merge_requests/closes_issues.rb +1 -1
  43. data/lib/labclient/merge_requests/commits.rb +1 -1
  44. data/lib/labclient/merge_requests/create.rb +12 -0
  45. data/lib/labclient/merge_requests/delete.rb +1 -1
  46. data/lib/labclient/merge_requests/diff_versions.rb +1 -1
  47. data/lib/labclient/merge_requests/merge_request.rb +49 -4
  48. data/lib/labclient/merge_requests/participants.rb +1 -1
  49. data/lib/labclient/merge_requests/pipelines.rb +2 -2
  50. data/lib/labclient/merge_requests/rebase.rb +1 -1
  51. data/lib/labclient/merge_requests/show.rb +1 -1
  52. data/lib/labclient/merge_requests/subscribe.rb +1 -1
  53. data/lib/labclient/merge_requests/time_stats.rb +5 -5
  54. data/lib/labclient/merge_requests/todo.rb +1 -1
  55. data/lib/labclient/merge_requests/unsubscribe.rb +1 -1
  56. data/lib/labclient/merge_requests/update.rb +1 -1
  57. data/lib/labclient/notes/epics/create.rb +12 -4
  58. data/lib/labclient/notes/epics/delete.rb +3 -3
  59. data/lib/labclient/notes/epics/list.rb +21 -4
  60. data/lib/labclient/notes/epics/show.rb +4 -4
  61. data/lib/labclient/notes/epics/update.rb +4 -4
  62. data/lib/labclient/notes/issues/create.rb +11 -1
  63. data/lib/labclient/notes/issues/list.rb +18 -3
  64. data/lib/labclient/notes/issues/show.rb +1 -1
  65. data/lib/labclient/notes/merge_requests/create.rb +8 -0
  66. data/lib/labclient/notes/merge_requests/list.rb +20 -2
  67. data/lib/labclient/notes/snippets/create.rb +1 -1
  68. data/lib/labclient/notes/snippets/list.rb +20 -3
  69. data/lib/labclient/notes/snippets/show.rb +1 -1
  70. data/lib/labclient/notifications/update.rb +1 -1
  71. data/lib/labclient/overview.rb +117 -16
  72. data/lib/labclient/paginated_response.rb +6 -1
  73. data/lib/labclient/pipelines/pipeline.rb +41 -0
  74. data/lib/labclient/projects/access_requests/access_request.rb +0 -1
  75. data/lib/labclient/projects/badges/project_badge.rb +0 -1
  76. data/lib/labclient/projects/clusters/project_cluster.rb +0 -1
  77. data/lib/labclient/projects/create.rb +13 -0
  78. data/lib/labclient/projects/deployments/project_deployment.rb +1 -3
  79. data/lib/labclient/projects/environments/project_environment.rb +0 -1
  80. data/lib/labclient/projects/forks/existing.rb +0 -2
  81. data/lib/labclient/projects/forks/fork.rb +1 -1
  82. data/lib/labclient/projects/forks/list.rb +0 -1
  83. data/lib/labclient/projects/forks/remove.rb +0 -1
  84. data/lib/labclient/projects/hooks/project_hook.rb +0 -1
  85. data/lib/labclient/projects/labels/project_label.rb +0 -1
  86. data/lib/labclient/projects/methods.rb +76 -2
  87. data/lib/labclient/projects/mirrors/project_mirror.rb +0 -1
  88. data/lib/labclient/projects/reference.rb +17 -0
  89. data/lib/labclient/projects/release_links/project_release_link.rb +0 -1
  90. data/lib/labclient/projects/releases/project_release.rb +0 -1
  91. data/lib/labclient/projects/services/project_service.rb +0 -1
  92. data/lib/labclient/projects/snippets/project_snippet.rb +12 -0
  93. data/lib/labclient/projects/stars/star.rb +0 -2
  94. data/lib/labclient/projects/stars/starred_projects.rb +0 -2
  95. data/lib/labclient/projects/stars/starrers.rb +1 -1
  96. data/lib/labclient/projects/triggers/project_trigger.rb +0 -1
  97. data/lib/labclient/projects/variables/project_variable.rb +0 -1
  98. data/lib/labclient/protected_branches/protect.rb +6 -5
  99. data/lib/labclient/protected_environments/list.rb +29 -0
  100. data/lib/labclient/protected_environments/protect.rb +53 -0
  101. data/lib/labclient/protected_environments/protected_environment.rb +22 -0
  102. data/lib/labclient/protected_environments/show.rb +24 -0
  103. data/lib/labclient/protected_environments/unprotect.rb +31 -0
  104. data/lib/labclient/snippets/snippet.rb +2 -2
  105. data/lib/labclient/users/membership.rb +62 -0
  106. data/lib/labclient/users/memberships.rb +8 -3
  107. data/lib/labclient/users/user.rb +13 -1
  108. data/lib/labclient/version.rb +1 -1
  109. metadata +38 -9
  110. data/lib/labclient/open_struct.rb +0 -14
@@ -0,0 +1,142 @@
1
+ module LabClient
2
+ # Generator Namespace
3
+ module Generator
4
+ # Helper to Generate Data / Populate GitLab
5
+ class Wizard
6
+ include Generator::Names # Name Generator
7
+ attr_reader :client
8
+ attr_accessor :count, :random, :password, :templates, :domain, :skip_confirmation
9
+
10
+ def inspect
11
+ "#<Wizard count=#{count}, random=#{random}, domain=#{domain}> templates=#{templates}"
12
+ end
13
+
14
+ def templates_default
15
+ %i[pages pipeline_trigger environments]
16
+ end
17
+
18
+ def templates_all
19
+ LabClient::Generator::TemplateHelper.descendants
20
+ end
21
+
22
+ def initialize(client)
23
+ require 'faker' # Ensure Faker is Available
24
+
25
+ @client = client
26
+ self.random = true # Populate Random or use only Templates
27
+ self.count = default_count
28
+ self.password = SecureRandom.uuid
29
+ puts "Default Password: #{password}"
30
+
31
+ self.skip_confirmation = true
32
+ self.domain = URI.parse(client.settings[:url]).hostname
33
+
34
+ # Default Templates
35
+ self.templates ||= templates_default
36
+ end
37
+
38
+ def template(name, opts = {})
39
+ template_klass = templates_all.find { |x| x.template_name == name.to_sym }
40
+
41
+ raise "Invalid Template! Available Templates: #{templates_all.map(&:template_name).join(', ')}" unless template_klass
42
+
43
+ template_klass.new(client, opts)
44
+ end
45
+
46
+ # Random Counters
47
+ def default_count
48
+ {
49
+ users: 20,
50
+ projects: 5,
51
+ groups: 5,
52
+ issues: 2
53
+ }
54
+ end
55
+
56
+ def generate_users
57
+ puts 'Generating Users'
58
+ @users = @user_names.map do |name|
59
+ username = name.downcase.gsub(/[^0-9A-Za-z]/, '')
60
+ email = "#{username}@#{domain}"
61
+ puts "User -- Name: #{name}, UserName: #{username}, Email: #{email}"
62
+
63
+ client.users.create(
64
+ name: name,
65
+ email: email,
66
+ password: password,
67
+ username: username,
68
+ skip_confirmation: skip_confirmation
69
+ )
70
+ end
71
+ end
72
+
73
+ def generate_groups
74
+ puts 'Generating Groups'
75
+ @groups = @group_names.map do |name|
76
+ path = name.downcase.gsub(/[^0-9A-Za-z]/, '')
77
+ puts "Group -- #{name}/#{path}"
78
+ client.groups.create(name: name, path: path)
79
+ end
80
+ end
81
+
82
+ def generate_group_membership
83
+ puts 'Adding Group members'
84
+ ## Group Access Level
85
+ @groups.each do |group|
86
+ @users.sample(rand(1..@users.count)).each do |user|
87
+ level = group.valid_group_project_levels.sample
88
+ puts "Group Add: #{group.name}: #{user.name} - #{level}"
89
+ group.member_add(user, access_level: level)
90
+ # :nocov:
91
+ rescue StandardError => e
92
+ puts e.message
93
+ next
94
+ # :nocov:
95
+ end
96
+ end
97
+ end
98
+
99
+ def generate_projects(group)
100
+ puts 'Generating Projects'
101
+ # Collect Group Members
102
+ members = group.members
103
+
104
+ # Loop through project names, create project add issues
105
+ @project_names.uniq.map do |project_name|
106
+ puts "Project: #{project_name}"
107
+ project = group.project_create(name: project_name, description: gen_description)
108
+
109
+ rand(count[:issues]).times do
110
+ project.issue_create(generate_issue_data(members.sample))
111
+ end
112
+ end
113
+ end
114
+
115
+ def generate_issue_data(member)
116
+ {
117
+ assignee_id: member.id,
118
+ description: Faker::Hacker.say_something_smart,
119
+ title: Faker::Company.catch_phrase
120
+ }
121
+ end
122
+
123
+ # Execute Generation
124
+ def run!
125
+ # Collect Names
126
+ generate_names
127
+ generate_users
128
+ generate_groups
129
+ generate_group_membership
130
+
131
+ @groups.map do |group|
132
+ generate_projects(group)
133
+ end
134
+
135
+ # Run Templates
136
+ templates.each { |template_klass| template(template_klass).run! }
137
+
138
+ nil
139
+ end
140
+ end
141
+ end
142
+ end
@@ -49,10 +49,17 @@ module LabClient
49
49
  end
50
50
  end
51
51
 
52
+ def project_create(query)
53
+ query[:namespace_id] = id
54
+ client.projects.create(query)
55
+ end
56
+
52
57
  def ldap_list
53
58
  client.groups.ldap.list(id)
54
59
  end
55
60
 
61
+ alias ldap_links ldap_list
62
+
56
63
  def ldap_sync
57
64
  client.groups.ldap.sync(id)
58
65
  end
@@ -239,6 +246,11 @@ module LabClient
239
246
  client.groups.milestones.list(id, query)
240
247
  end
241
248
 
249
+ # Reload Helper
250
+ def reload
251
+ update_self client.groups.show(id)
252
+ end
253
+
242
254
  # rubocop:disable Metrics/BlockLength
243
255
  help do
244
256
  subtitle 'Group'
@@ -247,12 +259,14 @@ module LabClient
247
259
  option 'audit_events', "List this group's AuditEvents"
248
260
  option 'audit_event', 'Show a specific AuditEvents [Audit Event ID]'
249
261
  option 'projects', 'List direct Projects [Hash]'
262
+ option 'project_create', 'Create a project in this Group [Hash]'
250
263
  option 'details', 'Get all details [Hash]'
251
264
  option 'search', 'Search by scope within group [scope, search_string]'
252
265
  option 'delete', 'Delete this Group'
253
266
  option 'restore', 'Restore if marked for deletion'
254
267
  option 'transfer', 'Transfer project to this group [Project ID]'
255
268
  option 'ldap_list', 'Lists LDAP group links'
269
+ option 'ldap_links', 'Alias for ldap_list'
256
270
  option 'ldap_sync', 'Syncs the group with its linked LDAP group'
257
271
  option 'ldap_create', 'Adds an LDAP group link. [Hash]'
258
272
  option 'ldap_delete', 'Deletes an LDAP group link. [CN, Provider(optional)]'
@@ -310,6 +324,9 @@ module LabClient
310
324
 
311
325
  # Registry
312
326
  option 'registry_repositories', 'Get a list of registry repositories [Hash]'
327
+
328
+ # Reload Helper
329
+ option 'reload', 'Reload this object (New API Call)'
313
330
  end
314
331
  # rubocop:enable Metrics/BlockLength
315
332
  end
@@ -0,0 +1,8 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Ugly Hack, but Makes Docs Easy
4
+ class Groups < Common
5
+ doc '' do
6
+ end
7
+ end
8
+ end
@@ -3,6 +3,7 @@ module LabClient
3
3
  # Request Helper
4
4
  class HTTP
5
5
  attr_accessor :settings
6
+
6
7
  def initialize(settings)
7
8
  self.settings = settings
8
9
  end
@@ -72,15 +73,19 @@ module Typhoeus
72
73
  def process_body
73
74
  if body.empty?
74
75
  nil
75
- elsif headers['content-type'] == 'text/plain'
76
+ elsif headers['content-type']&.include? 'text/plain'
76
77
  body
77
78
  else
78
- Oj.load(body, mode: :compat, object_class: OpenStruct)
79
+ Oj.load(body, mode: :compat, object_class: LabClient::LabStruct)
79
80
  end
80
81
  end
81
82
 
82
83
  def friendly_error
83
- message = data[:message] || data[:error] || data
84
+ message = if data
85
+ data[:message] || data[:error] || data
86
+ else
87
+ return_message
88
+ end
84
89
  "#{code} - #{message}"
85
90
  end
86
91
  end
@@ -4,7 +4,7 @@ module LabClient
4
4
  class Issues < Common
5
5
  doc 'Show' do
6
6
  title 'Agent Detail'
7
- desc 'Get user agent details [project id, issue iid]'
7
+ desc 'Get user agent details [Project ID, Issue IID]'
8
8
  example 'client.issues.agent_detail(30, 1)'
9
9
  result <<~DOC
10
10
  => {:user_agent=>"Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0", :ip_address=>"10.0.0.14", :akismet_submitted=>false}
@@ -4,7 +4,7 @@ module LabClient
4
4
  class Issues < Common
5
5
  doc 'Show' do
6
6
  subtitle 'Closed By'
7
- desc 'Get all the merge requests that will close issue when merged. [project id, issue iid]'
7
+ desc 'Get all the merge requests that will close issue when merged. [Project ID, Issue IID]'
8
8
  example 'client.issues.closed_by(5, 1)'
9
9
  result <<~DOC
10
10
  => [#<MergeRequest id: 5, title: Update README.md, state: opened>]
@@ -3,7 +3,7 @@ module LabClient
3
3
  # Specifics
4
4
  class Issues < Common
5
5
  doc 'Create' do
6
- desc 'Creates a new project issue. [project id]'
6
+ desc 'Creates a new project issue. [Project ID]'
7
7
  example 'client.issues.create(5, title: "Fancy!")'
8
8
  result <<~DOC
9
9
  => #<Issue id: 1, title: Fancy!, state: opened>
@@ -14,15 +14,27 @@ module LabClient
14
14
  markdown <<~DOC
15
15
  See [API docs here](https://docs.gitlab.com/ee/api/issues.html#new-issue) for full list of attributes
16
16
 
17
- | Attribute | Type | Required | Description |
18
- |-------------------------------------------|----------------|----------|--------------|
19
- | title | string | yes | The title of an issue |
20
- | description | string | no | The description of an issue. Limited to 1,048,576 characters. |
17
+ | Attribute | Type | Required | Description |
18
+ |-------------|----------------|----------|--------------|
19
+ | title | string | yes | The title of an issue |
20
+ | description | string | no | The description of an issue. Limited to 1,048,576 characters. |
21
+
22
+ &nbsp;
23
+ DOC
24
+ end
25
+
26
+ doc 'Create' do
27
+ desc 'Via Project [Hash]'
28
+ example <<~DOC
29
+ project = client.projects.show(16)
30
+ project.issue_create(title: "Fancy!")
21
31
  DOC
22
32
  end
23
33
 
24
34
  def create(project_id, query = {})
25
35
  project_id = format_id(project_id)
36
+ format_query_id(:assignee_id, query)
37
+
26
38
  client.request(:post, "projects/#{project_id}/issues", Issue, query)
27
39
  end
28
40
  end
@@ -3,7 +3,7 @@ module LabClient
3
3
  # Specifics
4
4
  class Issues < Common
5
5
  doc 'Delete' do
6
- desc 'Updates an existing project issue. This call is also used to mark an issue as closed. [project id, issue iid]'
6
+ desc 'Updates an existing project issue. This call is also used to mark an issue as closed. [Project ID, Issue IID]'
7
7
  example 'client.issues.delete(5, 1)'
8
8
  result <<~DOC
9
9
  => #<Issue id: 1, title: Moar Fancy!, state: opened>
@@ -66,6 +66,10 @@ module LabClient
66
66
  client.notes.issues.list(project_id, iid)
67
67
  end
68
68
 
69
+ def note_create(query)
70
+ client.notes.issues.create(project_id, iid, query)
71
+ end
72
+
69
73
  def agent_detail
70
74
  client.issues.agent_detail(project_id, iid)
71
75
  end
@@ -87,6 +91,18 @@ module LabClient
87
91
  client.resource_labels.issues.show(project_id, iid, resource_event_id)
88
92
  end
89
93
 
94
+ # Reload Helper
95
+ def reload
96
+ update_self client.issues.show(project_id, iid)
97
+ end
98
+
99
+ def project
100
+ # If from List Project ID isn't stored
101
+ project_id = collect_project_id if project_id.nil?
102
+
103
+ client.projects.show(project_id)
104
+ end
105
+
90
106
  help do
91
107
  subtitle 'Issue'
92
108
  option 'update', 'Update issue (accepts hash).'
@@ -95,7 +111,8 @@ module LabClient
95
111
  option 'subscribe', 'Subscribe to notifications'
96
112
  option 'unsubscribe', 'Unsubscribe to notifications'
97
113
  option 'participants', 'List participants in this issue.'
98
- option 'notes', 'List notes/comments.'
114
+ option 'notes', 'List notes/comments. [Hash]'
115
+ option 'note_create', 'Creates a new note for issue. [Hash]'
99
116
  option 'agent_detail', 'Get user agent details.'
100
117
  option 'related_merge_requests', 'Get all related Merge Requests.'
101
118
  option 'closed_by', 'Get all Merge Requests that will close this issue.'
@@ -109,6 +126,9 @@ module LabClient
109
126
  # Resource Labels
110
127
  option 'resource_labels', 'List of all label events'
111
128
  option 'resource_label', 'Show single label event [Resource Event ID]'
129
+
130
+ # Reload Helper
131
+ option 'reload', 'Reload this object (New API Call)'
112
132
  end
113
133
  end
114
134
  end
@@ -3,7 +3,7 @@ module LabClient
3
3
  # Specifics
4
4
  class Issues < Common
5
5
  doc 'Move' do
6
- desc 'Moves an issue to a different project. [project id, issue iid, target project id]'
6
+ desc 'Moves an issue to a different project. [Project ID, issue iid, target project id]'
7
7
  example 'client.issues.move(5, 1, 6)'
8
8
  result <<~DOC
9
9
  => #<Issue id: 1, title: Moar Fancy!, state: opened>
@@ -4,7 +4,7 @@ module LabClient
4
4
  class Issues < Common
5
5
  doc 'Show' do
6
6
  title 'Participants'
7
- desc 'Get a list of issue participants. [project id, issue iid]'
7
+ desc 'Get a list of issue participants. [Project ID, Issue IID]'
8
8
  example 'client.issues.participants(30,1)'
9
9
  result <<~DOC
10
10
  => [#<User id: 1, username: braum>, #<User id: 52, username: anivia>]
@@ -5,7 +5,7 @@ module LabClient
5
5
  doc 'Show' do
6
6
  title 'Merge Requests'
7
7
  subtitle 'Related'
8
- desc 'Get all the merge requests that are related to the issue. [project id, issue iid]'
8
+ desc 'Get all the merge requests that are related to the issue. [Project ID, Issue IID]'
9
9
  example 'client.issues.related_merge_requests(5, 1)'
10
10
  result <<~DOC
11
11
  => [#<MergeRequest id: 5, title: Update README.md, state: opened>]
@@ -3,7 +3,7 @@ module LabClient
3
3
  # Specifics
4
4
  class Issues < Common
5
5
  doc 'Show' do
6
- desc 'Get a single project issue. [project, issue iid]'
6
+ desc 'Get a single project issue. [project, Issue IID]'
7
7
  example 'client.issues.show(343, 1)'
8
8
  result <<~DOC
9
9
  => #<Issue id: 1, title: Front-line global approach, state: opened>
@@ -4,7 +4,7 @@ module LabClient
4
4
  class Issues < Common
5
5
  doc 'Update' do
6
6
  title 'Subscribe'
7
- desc 'Subscribes the authenticated user to an issue to receive notifications. [project id, issue iid]'
7
+ desc 'Subscribes the authenticated user to an issue to receive notifications. [Project ID, Issue IID]'
8
8
 
9
9
  example 'client.issues.subscribe(343, 7)'
10
10
 
@@ -4,7 +4,7 @@ module LabClient
4
4
  class Issues < Common
5
5
  doc 'Time Stats' do
6
6
  title 'Show'
7
- desc 'Get time tracking stats. [project id, issue iid]'
7
+ desc 'Get time tracking stats. [Project ID, Issue IID]'
8
8
  example 'client.issues.time_stats(30, 1)'
9
9
  result <<~DOC
10
10
  => {:time_estimate=>0, :total_time_spent=>0, :human_time_estimate=>nil, :human_total_time_spent=>nil}
@@ -28,7 +28,7 @@ module LabClient
28
28
 
29
29
  doc 'Time Stats' do
30
30
  title 'Add'
31
- desc 'Adds spent time for this merge request. [project id, issue iid, duration]'
31
+ desc 'Adds spent time for this merge request. [Project ID, issue iid, duration]'
32
32
  markdown 'Duration accepts Human Format, or ActiveSupport::Duration (e.g. 1.hour)'
33
33
  end
34
34
 
@@ -67,7 +67,7 @@ module LabClient
67
67
 
68
68
  doc 'Time Stats' do
69
69
  title 'Estimate'
70
- desc 'Sets an estimated time of work for this merge request. [project id, issue iid, duration]'
70
+ desc 'Sets an estimated time of work for this merge request. [Project ID, issue iid, duration]'
71
71
  markdown 'Duration accepts Human Format, or ActiveSupport::Duration (e.g. 1.hour)'
72
72
  end
73
73
 
@@ -108,7 +108,7 @@ module LabClient
108
108
  doc 'Time Stats' do
109
109
  title 'Reset'
110
110
  subtitle 'Estimate'
111
- desc 'Resets the estimated time for this merge request to 0 seconds. [project id, issue iid]'
111
+ desc 'Resets the estimated time for this merge request to 0 seconds. [Project ID, Issue IID]'
112
112
  example 'client.issues.reset_time_estimate(30, 1)'
113
113
  result <<~DOC
114
114
  => {:time_estimate=>0, :total_time_spent=>0, :human_time_estimate=>nil, :human_total_time_spent=>nil}
@@ -132,7 +132,7 @@ module LabClient
132
132
 
133
133
  doc 'Time Stats' do
134
134
  subtitle 'Time Spent'
135
- desc 'Resets the estimated time for this merge request to 0 seconds. [project id, issue iid]'
135
+ desc 'Resets the estimated time for this merge request to 0 seconds. [Project ID, Issue IID]'
136
136
  example 'client.issues.reset_spent_time(30, 1)'
137
137
  result <<~DOC
138
138
  => {:time_estimate=>0, :total_time_spent=>0, :human_time_estimate=>nil, :human_total_time_spent=>nil}