abt-cli 0.0.25 → 0.0.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/bin/abt +1 -1
  3. data/lib/abt.rb +1 -0
  4. data/lib/abt/cli.rb +32 -9
  5. data/lib/abt/directory_config.rb +43 -0
  6. data/lib/abt/docs.rb +10 -6
  7. data/lib/abt/providers/asana.rb +1 -0
  8. data/lib/abt/providers/asana/base_command.rb +33 -3
  9. data/lib/abt/providers/asana/commands/add.rb +0 -4
  10. data/lib/abt/providers/asana/commands/branch_name.rb +0 -13
  11. data/lib/abt/providers/asana/commands/current.rb +0 -18
  12. data/lib/abt/providers/asana/commands/finalize.rb +2 -4
  13. data/lib/abt/providers/asana/commands/pick.rb +11 -41
  14. data/lib/abt/providers/asana/commands/tasks.rb +2 -7
  15. data/lib/abt/providers/asana/commands/write_config.rb +73 -0
  16. data/lib/abt/providers/asana/configuration.rb +11 -3
  17. data/lib/abt/providers/asana/path.rb +2 -2
  18. data/lib/abt/providers/asana/services/project_picker.rb +54 -0
  19. data/lib/abt/providers/asana/services/task_picker.rb +83 -0
  20. data/lib/abt/providers/devops.rb +1 -0
  21. data/lib/abt/providers/devops/api.rb +27 -20
  22. data/lib/abt/providers/devops/base_command.rb +42 -25
  23. data/lib/abt/providers/devops/commands/branch_name.rb +8 -16
  24. data/lib/abt/providers/devops/commands/current.rb +2 -21
  25. data/lib/abt/providers/devops/commands/harvest_time_entry_data.rb +8 -16
  26. data/lib/abt/providers/devops/commands/pick.rb +11 -60
  27. data/lib/abt/providers/devops/commands/work_items.rb +3 -7
  28. data/lib/abt/providers/devops/commands/write_config.rb +47 -0
  29. data/lib/abt/providers/devops/configuration.rb +1 -1
  30. data/lib/abt/providers/devops/path.rb +24 -8
  31. data/lib/abt/providers/devops/services/board_picker.rb +69 -0
  32. data/lib/abt/providers/devops/services/project_picker.rb +73 -0
  33. data/lib/abt/providers/devops/services/work_item_picker.rb +99 -0
  34. data/lib/abt/providers/harvest.rb +1 -0
  35. data/lib/abt/providers/harvest/base_command.rb +45 -3
  36. data/lib/abt/providers/harvest/commands/current.rb +0 -28
  37. data/lib/abt/providers/harvest/commands/pick.rb +12 -27
  38. data/lib/abt/providers/harvest/commands/projects.rb +2 -9
  39. data/lib/abt/providers/harvest/commands/tasks.rb +2 -19
  40. data/lib/abt/providers/harvest/commands/write_config.rb +41 -0
  41. data/lib/abt/providers/harvest/configuration.rb +1 -1
  42. data/lib/abt/providers/harvest/path.rb +1 -1
  43. data/lib/abt/providers/harvest/services/project_picker.rb +53 -0
  44. data/lib/abt/providers/harvest/services/task_picker.rb +50 -0
  45. data/lib/abt/version.rb +1 -1
  46. metadata +13 -6
  47. data/lib/abt/providers/asana/commands/init.rb +0 -42
  48. data/lib/abt/providers/devops/commands/boards.rb +0 -34
  49. data/lib/abt/providers/devops/commands/init.rb +0 -79
  50. data/lib/abt/providers/harvest/commands/init.rb +0 -53
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Abt
4
- module Providers
5
- module Asana
6
- module Commands
7
- class Init < BaseCommand
8
- def self.usage
9
- "abt init asana"
10
- end
11
-
12
- def self.description
13
- "Pick Asana project for current git repository"
14
- end
15
-
16
- def perform
17
- require_local_config!
18
-
19
- projects # Load projects up front to make it obvious that searches are instant
20
- project = cli.prompt.search("Select a project", projects)
21
-
22
- config.path = Path.from_ids(project_gid: project["gid"])
23
-
24
- print_project(project)
25
- end
26
-
27
- private
28
-
29
- def projects
30
- @projects ||= begin
31
- warn("Fetching projects...")
32
- api.get_paged("projects",
33
- workspace: config.workspace_gid,
34
- archived: false,
35
- opt_fields: "name,permalink_url")
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Abt
4
- module Providers
5
- module Devops
6
- module Commands
7
- class Boards < BaseCommand
8
- def self.usage
9
- "abt boards devops"
10
- end
11
-
12
- def self.description
13
- "List all boards - useful for piping into grep etc"
14
- end
15
-
16
- def perform
17
- abort("No organization selected. Did you initialize DevOps?") if organization_name.nil?
18
- abort("No project selected. Did you initialize DevOps?") if project_name.nil?
19
-
20
- boards.map do |board|
21
- print_board(organization_name, project_name, board)
22
- end
23
- end
24
-
25
- private
26
-
27
- def boards
28
- @boards ||= api.get_paged("work/boards")
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Abt
4
- module Providers
5
- module Devops
6
- module Commands
7
- class Init < BaseCommand
8
- AZURE_DEV_URL_REGEX = %r{^https://dev\.azure\.com/(?<organization>[^/]+)/(?<project>[^/]+)}.freeze
9
- VS_URL_REGEX = %r{^https://(?<organization>[^.]+)\.visualstudio\.com/(?<project>[^/]+)}.freeze
10
-
11
- def self.usage
12
- "abt init devops"
13
- end
14
-
15
- def self.description
16
- "Pick DevOps board for current git repository"
17
- end
18
-
19
- def perform
20
- require_local_config!
21
- board = cli.prompt.choice("Select a project work board", boards)
22
-
23
- config.path = Path.from_ids(
24
- organization_name: organization_name,
25
- project_name: project_name,
26
- board_id: board["id"]
27
- )
28
- print_board(organization_name, project_name, board)
29
- end
30
-
31
- private
32
-
33
- def boards
34
- @boards ||= api.get_paged("work/boards")
35
- end
36
-
37
- def project_name
38
- @project_name ||= begin
39
- if (match = AZURE_DEV_URL_REGEX.match(project_url)) ||
40
- (match = VS_URL_REGEX.match(project_url))
41
- match[:project]
42
- end
43
- end
44
- end
45
-
46
- def organization_name
47
- @organization_name ||= begin
48
- if (match = AZURE_DEV_URL_REGEX.match(project_url)) ||
49
- (match = VS_URL_REGEX.match(project_url))
50
- match[:organization]
51
- end
52
- end
53
- end
54
-
55
- def project_url
56
- @project_url ||= begin
57
- loop do
58
- url = cli.prompt.text(project_url_prompt_text)
59
-
60
- break url if AZURE_DEV_URL_REGEX =~ url || VS_URL_REGEX =~ url
61
-
62
- warn("Invalid URL")
63
- end
64
- end
65
- end
66
-
67
- def project_url_prompt_text
68
- <<~TXT
69
- Please provide the URL for the devops project
70
- For instance https://{organization}.visualstudio.com/{project} or https://dev.azure.com/{organization}/{project}
71
-
72
- Enter URL
73
- TXT
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Abt
4
- module Providers
5
- module Harvest
6
- module Commands
7
- class Init < BaseCommand
8
- def self.usage
9
- "abt init harvest"
10
- end
11
-
12
- def self.description
13
- "Pick Harvest project for current git repository"
14
- end
15
-
16
- def perform
17
- require_local_config!
18
- projects # Load projects up front to make it obvious that searches are instant
19
- project = cli.prompt.search("Select a project", searchable_projects)["project"]
20
-
21
- config.path = Path.from_ids(project_id: project["id"])
22
-
23
- print_project(project)
24
- end
25
-
26
- private
27
-
28
- def searchable_projects
29
- @searchable_projects ||= projects.map do |project|
30
- {
31
- "name" => "#{project['client']['name']} > #{project['name']}",
32
- "project" => project
33
- }
34
- end
35
- end
36
-
37
- def projects
38
- @projects ||= begin
39
- warn("Fetching projects...")
40
- project_assignments.map do |project_assignment|
41
- project_assignment["project"].merge("client" => project_assignment["client"])
42
- end
43
- end
44
- end
45
-
46
- def project_assignments
47
- @project_assignments ||= api.get_paged("users/me/project_assignments")
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end