labclient 0.1.2 → 0.1.3

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/labclient.rb +7 -4
  3. data/lib/labclient/branches/branch.rb +25 -0
  4. data/lib/labclient/branches/create.rb +33 -0
  5. data/lib/labclient/client.rb +2 -2
  6. data/lib/labclient/epics/epic.rb +13 -0
  7. data/lib/labclient/error.rb +1 -0
  8. data/lib/labclient/files/create.rb +14 -8
  9. data/lib/labclient/generator/generator.rb +2 -14
  10. data/lib/labclient/generator/names.rb +17 -3
  11. data/lib/labclient/generator/template_helper.rb +82 -0
  12. data/lib/labclient/generator/templates/environments.rb +98 -0
  13. data/lib/labclient/generator/templates/pages.rb +24 -30
  14. data/lib/labclient/generator/templates/pipeline_trigger.rb +82 -0
  15. data/lib/labclient/generator/wizard.rb +23 -7
  16. data/lib/labclient/http.rb +2 -1
  17. data/lib/labclient/issues/issue.rb +6 -1
  18. data/lib/labclient/klass.rb +3 -2
  19. data/lib/labclient/lab_struct.rb +17 -0
  20. data/lib/labclient/license/list.rb +2 -2
  21. data/lib/labclient/merge_requests/accept.rb +15 -6
  22. data/lib/labclient/merge_requests/create.rb +12 -0
  23. data/lib/labclient/merge_requests/merge_request.rb +49 -4
  24. data/lib/labclient/notes/epics/create.rb +4 -4
  25. data/lib/labclient/notes/epics/delete.rb +3 -3
  26. data/lib/labclient/notes/epics/list.rb +21 -4
  27. data/lib/labclient/notes/epics/show.rb +4 -4
  28. data/lib/labclient/notes/epics/update.rb +4 -4
  29. data/lib/labclient/notes/issues/create.rb +3 -1
  30. data/lib/labclient/notes/issues/list.rb +18 -3
  31. data/lib/labclient/notes/issues/show.rb +1 -1
  32. data/lib/labclient/notes/merge_requests/list.rb +20 -2
  33. data/lib/labclient/notes/snippets/create.rb +1 -1
  34. data/lib/labclient/notes/snippets/list.rb +20 -3
  35. data/lib/labclient/notes/snippets/show.rb +1 -1
  36. data/lib/labclient/notifications/update.rb +1 -1
  37. data/lib/labclient/paginated_response.rb +1 -1
  38. data/lib/labclient/pipelines/pipeline.rb +41 -0
  39. data/lib/labclient/projects/methods.rb +30 -2
  40. data/lib/labclient/projects/reference.rb +5 -0
  41. data/lib/labclient/projects/snippets/project_snippet.rb +12 -0
  42. data/lib/labclient/snippets/snippet.rb +2 -2
  43. data/lib/labclient/users/user.rb +6 -0
  44. data/lib/labclient/version.rb +1 -1
  45. metadata +10 -7
  46. data/lib/labclient/generator/templates/template.rb +0 -23
  47. data/lib/labclient/open_struct.rb +0 -14
@@ -4,7 +4,7 @@ module LabClient
4
4
  class EpicNotes < Common
5
5
  doc 'Epics' do
6
6
  title 'Create'
7
- desc 'Creates a new note for a single merge request [Project, Epic IID]'
7
+ desc 'Creates a new note for a single epic [Project, Epic IID]'
8
8
  example 'client.notes.epics.create(16, 2, body: "Hello!")'
9
9
  result <<~DOC
10
10
  => #<Note id: 44, type: Epic>
@@ -20,13 +20,13 @@ module LabClient
20
20
  DOC
21
21
  end
22
22
 
23
- def create(project_id, epic_id, query = {})
24
- project_id = format_id(project_id)
23
+ def create(group_id, epic_id, query = {})
24
+ group_id = format_id(group_id)
25
25
  epic_id = format_id(epic_id)
26
26
 
27
27
  query[:created_at] = query[:created_at].to_time.iso8601 if format_time?(query[:created_at])
28
28
 
29
- client.request(:post, "projects/#{project_id}/epics/#{epic_id}/notes", Note, query)
29
+ client.request(:post, "groups/#{group_id}/epics/#{epic_id}/notes", Note, query)
30
30
  end
31
31
  end
32
32
  end
@@ -9,12 +9,12 @@ module LabClient
9
9
  end
10
10
 
11
11
  # Delete
12
- def delete(project_id, epic_id, note_id)
13
- project_id = format_id(project_id)
12
+ def delete(group_id, epic_id, note_id)
13
+ group_id = format_id(group_id)
14
14
  epic_id = format_id(epic_id)
15
15
  note_id = format_id(note_id)
16
16
 
17
- client.request(:delete, "projects/#{project_id}/epics/#{epic_id}/notes/#{note_id}")
17
+ client.request(:delete, "groups/#{group_id}/epics/#{epic_id}/notes/#{note_id}")
18
18
  end
19
19
  end
20
20
  end
@@ -5,18 +5,35 @@ module LabClient
5
5
  @group_name = 'Notes'
6
6
  doc 'Epics' do
7
7
  title 'List'
8
- desc 'Gets a list of all notes for a single merge request. [Project ID, Epic IID]'
8
+ desc 'Gets a list of all notes for a single epic. [Project ID, Epic IID]'
9
+ markdown <<~DOC
10
+ | Attribute | Type | Required | Description |
11
+ | --------- | ------ | -------- | ------------------------------------------------------------------------------------ |
12
+ | sort | string | no | Return epic notes sorted in asc or desc order. Default is desc |
13
+ | order_by | string | no | Return epic notes ordered by created_at or updated_at fields. Default is created_at |
14
+ DOC
15
+ end
16
+
17
+ doc 'Epics' do
9
18
  example 'client.notes.epics.list(16, 1)'
10
19
  result <<~DOC
11
20
  => [#<Note id: 21, type: Epic>, #<Note id: 20, type: Epic> .. ]
12
21
  DOC
13
22
  end
14
23
 
15
- def list(project_id, epic_id)
16
- project_id = format_id(project_id)
24
+ doc 'Epics' do
25
+ desc 'Filter or Sort'
26
+ example 'client.notes.epics.list(16, 1, order_by: :created_at, sort: :asc)'
27
+ result <<~DOC
28
+ => [#<Note id: 21, type: Epic>, #<Note id: 20, type: Epic> .. ]
29
+ DOC
30
+ end
31
+
32
+ def list(group_id, epic_id, query = {})
33
+ group_id = format_id(group_id)
17
34
  epic_id = format_id(epic_id)
18
35
 
19
- client.request(:get, "projects/#{project_id}/epics/#{epic_id}/notes", Note)
36
+ client.request(:get, "groups/#{group_id}/epics/#{epic_id}/notes", Note, query)
20
37
  end
21
38
  end
22
39
  end
@@ -4,19 +4,19 @@ module LabClient
4
4
  class EpicNotes < Common
5
5
  doc 'Epics' do
6
6
  title 'Show'
7
- desc 'Returns a single note for a given merge request. [Project ID, Epic IID, Note ID]'
7
+ desc 'Returns a single note for a given epic. [Project ID, Epic IID, Note ID]'
8
8
  example 'client.notes.epics.show(16, 1, 43)'
9
9
  result <<~DOC
10
10
  => #<Note id: 21, type: Epic>
11
11
  DOC
12
12
  end
13
13
 
14
- def show(project_id, epic_id, note_id)
15
- project_id = format_id(project_id)
14
+ def show(group_id, epic_id, note_id)
15
+ group_id = format_id(group_id)
16
16
  epic_id = format_id(epic_id)
17
17
  note_id = format_id(note_id)
18
18
 
19
- client.request(:get, "projects/#{project_id}/epics/#{epic_id}/notes/#{note_id}", Note)
19
+ client.request(:get, "groups/#{group_id}/epics/#{epic_id}/notes/#{note_id}", Note)
20
20
  end
21
21
  end
22
22
  end
@@ -4,7 +4,7 @@ module LabClient
4
4
  class EpicNotes < Common
5
5
  doc 'Epics' do
6
6
  title 'Update'
7
- desc 'Get a single project epic. [Project ID, Epic IID, Note ID]'
7
+ desc 'Get a single group epic. [Project ID, Epic IID, Note ID]'
8
8
  example 'client.notes.epics.update(16, 1, 43, "Updaaate")'
9
9
  result <<~DOC
10
10
  => #<Note id: 43, type: Epic>
@@ -20,13 +20,13 @@ module LabClient
20
20
  end
21
21
 
22
22
  # Show
23
- def update(project_id, epic_id, note_id, body)
24
- project_id = format_id(project_id)
23
+ def update(group_id, epic_id, note_id, body)
24
+ group_id = format_id(group_id)
25
25
  epic_id = format_id(epic_id)
26
26
  note_id = format_id(note_id)
27
27
  query = { body: body }
28
28
 
29
- client.request(:put, "projects/#{project_id}/epics/#{epic_id}/notes/#{note_id}", Note, query)
29
+ client.request(:put, "groups/#{group_id}/epics/#{epic_id}/notes/#{note_id}", Note, query)
30
30
  end
31
31
  end
32
32
  end
@@ -4,7 +4,7 @@ module LabClient
4
4
  class IssueNotes < Common
5
5
  doc 'Issues' do
6
6
  title 'Create'
7
- desc 'Creates a new note for a single merge request [Project, Issue IID]'
7
+ desc 'Creates a new note for a single issue [Project, Issue IID]'
8
8
  example 'client.notes.issues.create(16, 2, body: "Hello!")'
9
9
  result <<~DOC
10
10
  => #<Note id: 44, type: Issue>
@@ -26,6 +26,8 @@ module LabClient
26
26
 
27
27
  query[:created_at] = query[:created_at].to_time.iso8601 if format_time?(query[:created_at])
28
28
 
29
+ # POST /projects/:id/issues/:issue_iid/notes
30
+
29
31
  client.request(:post, "projects/#{project_id}/issues/#{issue_id}/notes", Note, query)
30
32
  end
31
33
  end
@@ -3,20 +3,35 @@ module LabClient
3
3
  # Specifics
4
4
  class IssueNotes < Common
5
5
  @group_name = 'Notes'
6
+
6
7
  doc 'Issues' do
7
8
  title 'List'
8
- desc 'Gets a list of all notes for a single merge request. [Project ID, Issue IID]'
9
+ desc 'Gets a list of all notes for a single issue. [Project ID, Issue IID]'
10
+ markdown <<~DOC
11
+ | Attribute | Type | Required | Description |
12
+ | --------- | ------ | -------- | ------------------------------------------------------------------------------------ |
13
+ | sort | string | no | Return issue notes sorted in asc or desc order. Default is desc |
14
+ | order_by | string | no | Return issue notes ordered by created_at or updated_at fields. Default is created_at |
15
+ DOC
16
+ end
17
+
18
+ doc 'Issues' do
9
19
  example 'client.notes.issues.list(16, 1)'
10
20
  result <<~DOC
11
21
  => [#<Note id: 21, type: Issue>, #<Note id: 20, type: Issue> .. ]
12
22
  DOC
13
23
  end
14
24
 
15
- def list(project_id, issue_id)
25
+ doc 'Issues' do
26
+ desc 'Sort or Filter'
27
+ example 'client.notes.issues.list(16, 1, order_by: :created_at, sort: :asc)'
28
+ end
29
+
30
+ def list(project_id, issue_id, query = {})
16
31
  project_id = format_id(project_id)
17
32
  issue_id = format_id(issue_id)
18
33
 
19
- client.request(:get, "projects/#{project_id}/issues/#{issue_id}/notes", Note)
34
+ client.request(:get, "projects/#{project_id}/issues/#{issue_id}/notes", Note, query)
20
35
  end
21
36
  end
22
37
  end
@@ -4,7 +4,7 @@ module LabClient
4
4
  class IssueNotes < Common
5
5
  doc 'Issues' do
6
6
  title 'Show'
7
- desc 'Returns a single note for a given merge request. [Project ID, Issue IID, Note ID]'
7
+ desc 'Returns a single note for a given issue. [Project ID, Issue IID, Note ID]'
8
8
  example 'client.notes.issues.show(16, 1, 43)'
9
9
  result <<~DOC
10
10
  => #<Note id: 21, type: Issue>
@@ -6,17 +6,35 @@ module LabClient
6
6
  doc 'Merge Requests' do
7
7
  title 'List'
8
8
  desc 'Gets a list of all notes for a single merge request. [Project ID, Merge Request IID]'
9
+
10
+ markdown <<~DOC
11
+ | Attribute | Type | Required | Description |
12
+ | --------- | ------ | -------- | -------------------------------------------------------------------------------------------- |
13
+ | sort | string | no | Return merge request notes sorted in asc or desc order. Default is desc |
14
+ | order_by | string | no | Return merge request notes ordered by created_at or updated_at fields. Default is created_at |
15
+ DOC
16
+ end
17
+
18
+ doc 'Merge Requests' do
9
19
  example 'client.notes.merge_requests.list(16, 1)'
10
20
  result <<~DOC
11
21
  => [#<Note id: 21, type: MergeRequest>, #<Note id: 20, type: MergeRequest> .. ]
12
22
  DOC
13
23
  end
14
24
 
15
- def list(project_id, merge_request_id)
25
+ doc 'Merge Requests' do
26
+ desc 'Sort or Filter'
27
+ example 'client.notes.merge_requests.list(16, 1, order_by: :created_at, sort: :asc)'
28
+ result <<~DOC
29
+ => [#<Note id: 21, type: MergeRequest>, #<Note id: 20, type: MergeRequest> .. ]
30
+ DOC
31
+ end
32
+
33
+ def list(project_id, merge_request_id, query = {})
16
34
  project_id = format_id(project_id)
17
35
  merge_request_id = format_id(merge_request_id)
18
36
 
19
- client.request(:get, "projects/#{project_id}/merge_requests/#{merge_request_id}/notes", Note)
37
+ client.request(:get, "projects/#{project_id}/merge_requests/#{merge_request_id}/notes", Note, query)
20
38
  end
21
39
  end
22
40
  end
@@ -4,7 +4,7 @@ module LabClient
4
4
  class SnippetNotes < Common
5
5
  doc 'Snippets' do
6
6
  title 'Create'
7
- desc 'Creates a new note for a single merge request [Project, Snippet ID]'
7
+ desc 'Creates a new note for a single snippet [Project, Snippet ID]'
8
8
  example 'client.notes.snippets.create(16, 2, body: "Hello!")'
9
9
  result <<~DOC
10
10
  => #<Note id: 44, type: Snippet>
@@ -5,18 +5,35 @@ module LabClient
5
5
  @group_name = 'Notes'
6
6
  doc 'Snippets' do
7
7
  title 'List'
8
- desc 'Gets a list of all notes for a single merge request. [Project ID, Snippet ID]'
8
+ desc 'Gets a list of all notes for a single snippet. [Project ID, Snippet ID]'
9
+ markdown <<~DOC
10
+ | Attribute | Type | Required | Description |
11
+ | --------- | ------ | -------- | ------------------------------------------------------------------------------------ |
12
+ | sort | string | no | Return snippet notes sorted in asc or desc order. Default is desc |
13
+ | order_by | string | no | Return snippet notes ordered by created_at or updated_at fields. Default is created_at |
14
+ DOC
15
+ end
16
+
17
+ doc 'Snippets' do
9
18
  example 'client.notes.snippets.list(16, 1)'
10
19
  result <<~DOC
11
20
  => [#<Note id: 21, type: Snippet>, #<Note id: 20, type: Snippet> .. ]
12
21
  DOC
13
22
  end
14
23
 
15
- def list(project_id, snippet_id)
24
+ doc 'Snippets' do
25
+ desc 'Filter or Sort'
26
+ example 'client.notes.snippets.list(16, 1, order_by: :created_at, sort: :asc)'
27
+ result <<~DOC
28
+ => [#<Note id: 21, type: Snippet>, #<Note id: 20, type: Snippet> .. ]
29
+ DOC
30
+ end
31
+
32
+ def list(project_id, snippet_id, query = {})
16
33
  project_id = format_id(project_id)
17
34
  snippet_id = format_id(snippet_id)
18
35
 
19
- client.request(:get, "projects/#{project_id}/snippets/#{snippet_id}/notes", Note)
36
+ client.request(:get, "projects/#{project_id}/snippets/#{snippet_id}/notes", Note, query)
20
37
  end
21
38
  end
22
39
  end
@@ -4,7 +4,7 @@ module LabClient
4
4
  class SnippetNotes < Common
5
5
  doc 'Snippets' do
6
6
  title 'Show'
7
- desc 'Returns a single note for a given merge request. [Project ID, Snippet ID, Note ID]'
7
+ desc 'Returns a single note for a given snippet. [Project ID, Snippet ID, Note ID]'
8
8
  example 'client.notes.snippets.show(16, 1, 43)'
9
9
  result <<~DOC
10
10
  => #<Note id: 21, type: Snippet>
@@ -33,7 +33,7 @@ module LabClient
33
33
  result <<~DOC
34
34
  OpenStruct {
35
35
  :level => "custom",
36
- :events => OpenStruct {
36
+ :events => LabStruct {
37
37
  :new_release => nil,
38
38
  :new_note => nil,
39
39
  :new_issue => nil,
@@ -86,7 +86,7 @@ module LabClient
86
86
  end
87
87
 
88
88
  def link_regex
89
- /<([^>]+)>; rel=\"([^\"]+)\"/
89
+ /<([^>]+)>; rel="([^"]+)"/
90
90
  end
91
91
 
92
92
  def next_page
@@ -33,6 +33,45 @@ module LabClient
33
33
  client.jobs.pipeline(project_id, id, scope)
34
34
  end
35
35
 
36
+ def reload
37
+ project_id = collect_project_id
38
+ update_self client.pipelines.show(project_id, id)
39
+ end
40
+
41
+ # The status of pipelines, one of: running, pending, success, failed, canceled, skipped, created, manual
42
+
43
+ # Wait for Import / Set a Hard Limit
44
+ def wait_for_status(total_time = 300, sleep_time = 15)
45
+ # running
46
+ # pending
47
+ # success
48
+ # failed
49
+ # canceled
50
+ # skipped
51
+ # manual
52
+ # created
53
+
54
+ # Wait
55
+ # [running created pending]
56
+
57
+ # Success
58
+ # [skipped manual canceled success]
59
+
60
+ # Fail
61
+ # [failed]
62
+
63
+ Timeout.timeout(total_time) do
64
+ loop do
65
+ reload
66
+ puts "Waiting for Pipeline: #{status}"
67
+ break if %w[skipped manual canceled success].include? status
68
+ raise 'Pipeline failed' if status == 'failed'
69
+
70
+ sleep sleep_time
71
+ end
72
+ end
73
+ end
74
+
36
75
  # DateTime Fields
37
76
  date_time_attrs %i[created_at updated_at finished_at started_at]
38
77
  user_attrs %i[user]
@@ -43,6 +82,8 @@ module LabClient
43
82
  option 'retry', 'Retry jobs in this pipeline'
44
83
  option 'cancel', 'Cancel jobs in this pipeline'
45
84
  option 'delete', 'Delete this pipeline'
85
+ option 'reload', 'Reload this pipeline object (New API Call)'
86
+ option 'wait_for_status', 'Looping, wait for merge request status [Timeout, Interval]'
46
87
  end
47
88
  end
48
89
  end
@@ -7,8 +7,8 @@ module LabClient
7
7
  client.projects.users(id)
8
8
  end
9
9
 
10
- def events
11
- client.events.project(id)
10
+ def events(query = {})
11
+ client.events.project(id, query)
12
12
  end
13
13
 
14
14
  def delete
@@ -346,6 +346,10 @@ module LabClient
346
346
  client.branches.show(id, branch_id)
347
347
  end
348
348
 
349
+ def branch_create(query)
350
+ client.branches.create(id, query)
351
+ end
352
+
349
353
  def branch_delete(branch_id)
350
354
  client.branches.delete(id, branch_id)
351
355
  end
@@ -620,6 +624,10 @@ module LabClient
620
624
  client.merge_requests.list_project(id, query)
621
625
  end
622
626
 
627
+ def merge_request_create(query)
628
+ client.merge_requests.create(id, query)
629
+ end
630
+
623
631
  # Access Requests
624
632
  def request_access
625
633
  client.projects.access_requests.create(id)
@@ -687,6 +695,25 @@ module LabClient
687
695
  update_self client.projects.show(id)
688
696
  end
689
697
 
698
+ # Parent Helper
699
+ def parent
700
+ case namespace.kind
701
+ when 'user'
702
+ client.users.show(namespace.id)
703
+ when 'group'
704
+ client.groups.show(namespace.id)
705
+ end
706
+ end
707
+
708
+ # Snippets
709
+ def snippets
710
+ client.projects.snippets.list(id)
711
+ end
712
+
713
+ def snippet_create(query)
714
+ client.projects.snippets.create(id, query)
715
+ end
716
+
690
717
  # Wait for Import / Set a Hard Limit
691
718
  def wait_for_import(total_time = 300, sleep_time = 15)
692
719
  # none
@@ -698,6 +725,7 @@ module LabClient
698
725
  Timeout.timeout(total_time) do
699
726
  loop do
700
727
  reload
728
+ puts "Waiting for Import Status: #{import_status}"
701
729
  break if %w[none finished].include? import_status
702
730
  raise "Import Failed: #{import_error}" if import_status == 'failed'
703
731
 
@@ -204,6 +204,7 @@ module LabClient
204
204
  # Branches
205
205
  option 'branches', 'List repository branches [String]'
206
206
  option 'branch', 'Get a single repository branches [Branch Name]'
207
+ option 'branch_create', 'Create a repository branches [Hash]'
207
208
  option 'branch_delete', 'Delete a single repository branches [Branch Name]'
208
209
  option 'branch_delete_merged', 'Will delete all branches that are merged into the project’s default branch'
209
210
 
@@ -241,6 +242,7 @@ module LabClient
241
242
 
242
243
  # Merge Requests
243
244
  option 'merge_requests', 'List project merge requests, [Hash]'
245
+ option 'merge_request_create', 'Create new merge request [Hash]'
244
246
 
245
247
  # Access Requests
246
248
  option 'access_requests', 'List access requests for project'
@@ -254,6 +256,9 @@ module LabClient
254
256
 
255
257
  # Clusters
256
258
  option 'clusters', 'Returns a list of project clusters.'
259
+
260
+ option 'events', 'List project events [Hash]'
261
+ option 'parent', 'Show (API Call) Project Parent, returns either Group or User'
257
262
  end
258
263
  end
259
264
  # rubocop:enable Metrics/BlockLength, Metrics/ClassLength