abt-cli 0.0.25 → 0.0.30

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