abt-cli 0.0.21 → 0.0.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/abt +3 -3
- data/lib/abt.rb +6 -6
- data/lib/abt/ari.rb +1 -1
- data/lib/abt/ari_list.rb +1 -1
- data/lib/abt/base_command.rb +7 -7
- data/lib/abt/cli.rb +27 -40
- data/lib/abt/cli/arguments_parser.rb +5 -9
- data/lib/abt/cli/global_commands.rb +23 -0
- data/lib/abt/cli/global_commands/commands.rb +2 -2
- data/lib/abt/cli/global_commands/examples.rb +2 -2
- data/lib/abt/cli/global_commands/help.rb +2 -2
- data/lib/abt/cli/global_commands/readme.rb +2 -2
- data/lib/abt/cli/global_commands/share.rb +6 -6
- data/lib/abt/cli/global_commands/version.rb +2 -2
- data/lib/abt/cli/prompt.rb +51 -20
- data/lib/abt/docs.rb +39 -33
- data/lib/abt/docs/cli.rb +3 -3
- data/lib/abt/docs/markdown.rb +5 -5
- data/lib/abt/git_config.rb +4 -6
- data/lib/abt/providers/asana/api.rb +9 -9
- data/lib/abt/providers/asana/base_command.rb +8 -10
- data/lib/abt/providers/asana/commands/add.rb +13 -12
- data/lib/abt/providers/asana/commands/branch_name.rb +8 -8
- data/lib/abt/providers/asana/commands/clear.rb +7 -8
- data/lib/abt/providers/asana/commands/current.rb +14 -14
- data/lib/abt/providers/asana/commands/finalize.rb +11 -12
- data/lib/abt/providers/asana/commands/harvest_time_entry_data.rb +11 -11
- data/lib/abt/providers/asana/commands/init.rb +8 -41
- data/lib/abt/providers/asana/commands/pick.rb +17 -17
- data/lib/abt/providers/asana/commands/projects.rb +5 -5
- data/lib/abt/providers/asana/commands/share.rb +5 -5
- data/lib/abt/providers/asana/commands/start.rb +21 -20
- data/lib/abt/providers/asana/commands/tasks.rb +6 -6
- data/lib/abt/providers/asana/configuration.rb +25 -25
- data/lib/abt/providers/asana/path.rb +5 -5
- data/lib/abt/providers/devops/api.rb +12 -12
- data/lib/abt/providers/devops/base_command.rb +10 -10
- data/lib/abt/providers/devops/commands/boards.rb +5 -7
- data/lib/abt/providers/devops/commands/branch_name.rb +9 -9
- data/lib/abt/providers/devops/commands/clear.rb +7 -8
- data/lib/abt/providers/devops/commands/current.rb +17 -17
- data/lib/abt/providers/devops/commands/harvest_time_entry_data.rb +13 -13
- data/lib/abt/providers/devops/commands/init.rb +17 -13
- data/lib/abt/providers/devops/commands/pick.rb +11 -11
- data/lib/abt/providers/devops/commands/share.rb +5 -5
- data/lib/abt/providers/devops/commands/{work-items.rb → work_items.rb} +3 -3
- data/lib/abt/providers/devops/configuration.rb +19 -15
- data/lib/abt/providers/devops/path.rb +5 -4
- data/lib/abt/providers/git/commands/branch.rb +17 -19
- data/lib/abt/providers/harvest/api.rb +8 -8
- data/lib/abt/providers/harvest/base_command.rb +6 -8
- data/lib/abt/providers/harvest/commands/clear.rb +7 -8
- data/lib/abt/providers/harvest/commands/current.rb +13 -13
- data/lib/abt/providers/harvest/commands/init.rb +10 -38
- data/lib/abt/providers/harvest/commands/pick.rb +11 -11
- data/lib/abt/providers/harvest/commands/projects.rb +5 -5
- data/lib/abt/providers/harvest/commands/share.rb +5 -5
- data/lib/abt/providers/harvest/commands/start.rb +5 -3
- data/lib/abt/providers/harvest/commands/stop.rb +12 -12
- data/lib/abt/providers/harvest/commands/tasks.rb +7 -7
- data/lib/abt/providers/harvest/commands/track.rb +21 -20
- data/lib/abt/providers/harvest/configuration.rb +18 -18
- data/lib/abt/providers/harvest/path.rb +5 -5
- data/lib/abt/version.rb +1 -1
- metadata +6 -5
@@ -6,30 +6,33 @@ module Abt
|
|
6
6
|
module Commands
|
7
7
|
class Track < BaseCommand
|
8
8
|
def self.usage
|
9
|
-
|
9
|
+
"abt track harvest[:<project-id>/<task-id>] [options]"
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.description
|
13
|
-
|
13
|
+
<<~TXT
|
14
|
+
Start tracker for current or specified task. Add a relevant ARI to link the time entry, e.g. `abt track harvest asana`
|
15
|
+
TXT
|
14
16
|
end
|
15
17
|
|
16
18
|
def self.flags
|
17
19
|
[
|
18
|
-
[
|
19
|
-
[
|
20
|
-
[
|
21
|
-
|
20
|
+
["-s", "--set", "Set specified task as current"],
|
21
|
+
["-c", "--comment COMMENT", "Override comment"],
|
22
|
+
["-t", "--time HOURS",
|
23
|
+
"Set hours. Creates a stopped entry unless used with --running"],
|
24
|
+
["-r", "--running", "Used with --time, starts the created time entry"]
|
22
25
|
]
|
23
26
|
end
|
24
27
|
|
25
28
|
def perform
|
26
29
|
require_task!
|
27
30
|
|
28
|
-
print_task(created_time_entry[
|
31
|
+
print_task(created_time_entry["project"], created_time_entry["task"])
|
29
32
|
|
30
33
|
maybe_override_current_task
|
31
34
|
rescue Abt::HttpError::HttpError => _e
|
32
|
-
abort
|
35
|
+
abort("Invalid task")
|
33
36
|
end
|
34
37
|
|
35
38
|
private
|
@@ -40,13 +43,11 @@ module Abt
|
|
40
43
|
|
41
44
|
def create_time_entry
|
42
45
|
body = time_entry_base_data
|
43
|
-
body
|
46
|
+
body[:hours] = flags[:time] if flags.key?(:time)
|
44
47
|
|
45
|
-
result = api.post(
|
48
|
+
result = api.post("time_entries", Oj.dump(body, mode: :json))
|
46
49
|
|
47
|
-
if flags.key?(:time) && flags[:running]
|
48
|
-
api.patch("time_entries/#{result['id']}/restart")
|
49
|
-
end
|
50
|
+
api.patch("time_entries/#{result['id']}/restart") if flags.key?(:time) && flags[:running]
|
50
51
|
|
51
52
|
result
|
52
53
|
end
|
@@ -60,18 +61,18 @@ module Abt
|
|
60
61
|
}
|
61
62
|
|
62
63
|
if external_link_data
|
63
|
-
warn
|
64
|
+
warn(<<~TXT)
|
64
65
|
Linking to:
|
65
66
|
#{external_link_data[:notes]}
|
66
67
|
#{external_link_data[:external_reference][:permalink]}
|
67
68
|
TXT
|
68
|
-
body.merge!
|
69
|
+
body.merge!(external_link_data)
|
69
70
|
else
|
70
|
-
warn
|
71
|
+
warn("No external link provided")
|
71
72
|
end
|
72
73
|
|
73
74
|
body[:notes] = flags[:comment] if flags.key?(:comment)
|
74
|
-
body[:notes] ||= cli.prompt.text(
|
75
|
+
body[:notes] ||= cli.prompt.text("Fill in comment (optional)")
|
75
76
|
body
|
76
77
|
end
|
77
78
|
|
@@ -83,7 +84,7 @@ module Abt
|
|
83
84
|
nil
|
84
85
|
else
|
85
86
|
if lines.length > 1
|
86
|
-
abort(
|
87
|
+
abort("Got reference data from multiple scheme providers, only one is supported at a time")
|
87
88
|
end
|
88
89
|
|
89
90
|
Oj.load(lines.first, symbol_keys: true)
|
@@ -97,7 +98,7 @@ module Abt
|
|
97
98
|
|
98
99
|
input = StringIO.new(other_aris.to_s)
|
99
100
|
output = StringIO.new
|
100
|
-
Abt::Cli.new(argv: [
|
101
|
+
Abt::Cli.new(argv: ["harvest-time-entry-data"], output: output, input: input).perform
|
101
102
|
|
102
103
|
output.string.strip.lines
|
103
104
|
end
|
@@ -108,7 +109,7 @@ module Abt
|
|
108
109
|
return unless config.local_available?
|
109
110
|
|
110
111
|
config.path = path
|
111
|
-
warn
|
112
|
+
warn("Current task updated")
|
112
113
|
end
|
113
114
|
end
|
114
115
|
end
|
@@ -15,11 +15,11 @@ module Abt
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def path
|
18
|
-
Path.new(local_available? && git[
|
18
|
+
Path.new(local_available? && git["path"] || "")
|
19
19
|
end
|
20
20
|
|
21
21
|
def path=(new_path)
|
22
|
-
git[
|
22
|
+
git["path"] = new_path
|
23
23
|
end
|
24
24
|
|
25
25
|
def clear_local(verbose: true)
|
@@ -31,41 +31,41 @@ module Abt
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def access_token
|
34
|
-
return git_global[
|
34
|
+
return git_global["accessToken"] unless git_global["accessToken"].nil?
|
35
35
|
|
36
|
-
git_global[
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
git_global["accessToken"] = cli.prompt.text([
|
37
|
+
"Please provide your personal access token for Harvest.",
|
38
|
+
"If you don't have one, create one here: https://id.getharvest.com/developers",
|
39
|
+
"",
|
40
|
+
"Enter access token"
|
41
41
|
].join("\n"))
|
42
42
|
end
|
43
43
|
|
44
44
|
def account_id
|
45
|
-
return git_global[
|
45
|
+
return git_global["accountId"] unless git_global["accountId"].nil?
|
46
46
|
|
47
|
-
git_global[
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
git_global["accountId"] = cli.prompt.text([
|
48
|
+
"Please provide harvest account id.",
|
49
|
+
"This information is shown next to your generated access token",
|
50
|
+
"",
|
51
|
+
"Enter account id"
|
52
52
|
].join("\n"))
|
53
53
|
end
|
54
54
|
|
55
55
|
def user_id
|
56
|
-
return git_global[
|
56
|
+
return git_global["userId"] unless git_global["userId"].nil?
|
57
57
|
|
58
|
-
git_global[
|
58
|
+
git_global["userId"] = api.get("users/me")["id"].to_s
|
59
59
|
end
|
60
60
|
|
61
61
|
private
|
62
62
|
|
63
63
|
def git
|
64
|
-
@git ||= GitConfig.new(
|
64
|
+
@git ||= GitConfig.new("local", "abt.harvest")
|
65
65
|
end
|
66
66
|
|
67
67
|
def git_global
|
68
|
-
@git_global ||= GitConfig.new(
|
68
|
+
@git_global ||= GitConfig.new("global", "abt.harvest")
|
69
69
|
end
|
70
70
|
|
71
71
|
def api
|
@@ -4,15 +4,15 @@ module Abt
|
|
4
4
|
module Providers
|
5
5
|
module Harvest
|
6
6
|
class Path < String
|
7
|
-
PATH_REGEX = %r{^(?<project_id>\d+)
|
7
|
+
PATH_REGEX = %r{^(?<project_id>\d+)?/?(?<task_id>\d+)?$}.freeze
|
8
8
|
|
9
9
|
def self.from_ids(project_id = nil, task_id = nil)
|
10
|
-
path = project_id ? [project_id, *task_id].join(
|
11
|
-
new
|
10
|
+
path = project_id ? [project_id, *task_id].join("/") : ""
|
11
|
+
new(path)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(path =
|
15
|
-
raise Abt::Cli::Abort, "Invalid path: #{path}" unless path
|
14
|
+
def initialize(path = "")
|
15
|
+
raise Abt::Cli::Abort, "Invalid path: #{path}" unless PATH_REGEX.match?(path)
|
16
16
|
|
17
17
|
super
|
18
18
|
end
|
data/lib/abt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abt-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesper Sørensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-inflector
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- "./lib/abt/base_command.rb"
|
81
81
|
- "./lib/abt/cli.rb"
|
82
82
|
- "./lib/abt/cli/arguments_parser.rb"
|
83
|
+
- "./lib/abt/cli/global_commands.rb"
|
83
84
|
- "./lib/abt/cli/global_commands/commands.rb"
|
84
85
|
- "./lib/abt/cli/global_commands/examples.rb"
|
85
86
|
- "./lib/abt/cli/global_commands/help.rb"
|
@@ -122,7 +123,7 @@ files:
|
|
122
123
|
- "./lib/abt/providers/devops/commands/init.rb"
|
123
124
|
- "./lib/abt/providers/devops/commands/pick.rb"
|
124
125
|
- "./lib/abt/providers/devops/commands/share.rb"
|
125
|
-
- "./lib/abt/providers/devops/commands/
|
126
|
+
- "./lib/abt/providers/devops/commands/work_items.rb"
|
126
127
|
- "./lib/abt/providers/devops/configuration.rb"
|
127
128
|
- "./lib/abt/providers/devops/path.rb"
|
128
129
|
- "./lib/abt/providers/git.rb"
|
@@ -158,14 +159,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
159
|
requirements:
|
159
160
|
- - ">="
|
160
161
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
162
|
+
version: 2.5.0
|
162
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
164
|
requirements:
|
164
165
|
- - ">="
|
165
166
|
- !ruby/object:Gem::Version
|
166
167
|
version: '0'
|
167
168
|
requirements: []
|
168
|
-
rubygems_version: 3.
|
169
|
+
rubygems_version: 3.1.4
|
169
170
|
signing_key:
|
170
171
|
specification_version: 4
|
171
172
|
summary: Versatile scripts
|