labclient 0.1.0 → 0.1.5

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 (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}