dude-cli 2.0.5 → 2.1.0.alpha3
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.
- checksums.yaml +4 -4
- data/.github/workflows/verify.yml +32 -0
- data/.rspec +0 -1
- data/.rubocop.yml +13 -0
- data/CHANGELOG.md +7 -3
- data/Gemfile +3 -1
- data/Gemfile.lock +62 -9
- data/LICENCE +20 -0
- data/README.md +60 -35
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/bin/dude +2 -2
- data/demo/dude.gif +0 -0
- data/demo/wizard.gif +0 -0
- data/dude.gemspec +26 -18
- data/lib/dude.rb +18 -7
- data/lib/dude/code_management.rb +10 -0
- data/lib/dude/code_management/github/client.rb +27 -0
- data/lib/dude/code_management/github/create_pull_request.rb +51 -0
- data/lib/dude/commands.rb +26 -17
- data/lib/dude/commands/checkout.rb +4 -2
- data/lib/dude/commands/health_check.rb +15 -0
- data/lib/dude/commands/install.rb +67 -43
- data/lib/dude/commands/move.rb +5 -3
- data/lib/dude/commands/pr.rb +11 -0
- data/lib/dude/commands/pr/create.rb +49 -0
- data/lib/dude/commands/pr/remove.rb +15 -0
- data/lib/dude/commands/start.rb +14 -10
- data/lib/dude/commands/stop.rb +4 -4
- data/lib/dude/commands/tasks.rb +6 -5
- data/lib/dude/commands/track.rb +7 -7
- data/lib/dude/commands/version.rb +3 -1
- data/lib/dude/config.rb +18 -0
- data/lib/dude/git.rb +3 -0
- data/lib/dude/git/checkout.rb +20 -1
- data/lib/dude/git/current_branch_name.rb +3 -1
- data/lib/dude/git/remote_name.rb +21 -0
- data/lib/dude/health_check.rb +39 -0
- data/lib/dude/project_management/client.rb +14 -7
- data/lib/dude/project_management/entities/issue.rb +10 -7
- data/lib/dude/project_management/jira.rb +2 -1
- data/lib/dude/project_management/jira/client.rb +35 -18
- data/lib/dude/project_management/jira/fetch_current_task.rb +35 -0
- data/lib/dude/project_management/jira/fetch_current_tasks.rb +46 -0
- data/lib/dude/project_management/jira/get_task_name_by_id.rb +1 -3
- data/lib/dude/project_management/jira/move_task_to_list.rb +15 -15
- data/lib/dude/project_management/{entities/board.rb → trello.rb} +3 -4
- data/lib/dude/project_management/trello/client.rb +56 -0
- data/lib/dude/project_management/trello/fetch_current_task.rb +41 -0
- data/lib/dude/project_management/trello/fetch_current_tasks.rb +51 -0
- data/lib/dude/project_management/trello/fetch_lists.rb +22 -0
- data/lib/dude/project_management/trello/get_task_name_by_id.rb +23 -0
- data/lib/dude/project_management/trello/move_task_to_list.rb +53 -0
- data/lib/dude/settings.rb +3 -0
- data/lib/dude/setup/github.rb +35 -0
- data/lib/dude/setup/jira.rb +64 -0
- data/lib/dude/setup/toggl.rb +47 -0
- data/lib/dude/setup/trello.rb +58 -0
- data/lib/dude/templates/duderc_template +32 -0
- data/lib/dude/time_trackers/toggl.rb +2 -0
- data/lib/dude/time_trackers/toggl/base.rb +4 -4
- data/lib/dude/time_trackers/toggl/start_time_entry.rb +3 -2
- data/lib/dude/time_trackers/toggl/stop_time_entry.rb +3 -1
- data/lib/dude/version.rb +3 -1
- metadata +99 -14
- data/lib/dude/project_management/jira/get_current_tasks.rb +0 -40
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dude
|
4
|
+
module Setup
|
5
|
+
class Toggl
|
6
|
+
def initialize(prompt)
|
7
|
+
@prompt = prompt
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(settings:)
|
11
|
+
settings[:toggl][:token] = setup_token
|
12
|
+
settings[:toggl][:project_name] = setup_project_name
|
13
|
+
settings[:toggl][:workspace_id] = setup_workspace_id
|
14
|
+
settings
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :prompt
|
20
|
+
|
21
|
+
def setup_token
|
22
|
+
puts <<~HEREDOC
|
23
|
+
You need to create personal token
|
24
|
+
|
25
|
+
#{'1.'.bold} Log in to https://trello.com/app-key
|
26
|
+
#{'2.'.bold} Your Toggl API token can be found at the bottom of the page
|
27
|
+
#{'3.'.bold} Press --Click to Reveal-- and paste token below
|
28
|
+
HEREDOC
|
29
|
+
|
30
|
+
if prompt.yes?(Dude::Config.style_prompt('Open Toggl profile page in your browser?'))
|
31
|
+
`open https://track.toggl.com/profile`
|
32
|
+
end
|
33
|
+
|
34
|
+
prompt.ask(Dude::Config.style_prompt('Toggl token:'), required: true)
|
35
|
+
end
|
36
|
+
|
37
|
+
def setup_project_name
|
38
|
+
prompt.ask(Dude::Config.style_prompt('Your Toggl project name:'), required: true)
|
39
|
+
end
|
40
|
+
|
41
|
+
def setup_workspace_id
|
42
|
+
puts 'Can be copied from url here: https://toggl.com/app/projects/ (Example: 123456)'
|
43
|
+
prompt.ask(Dude::Config.style_prompt('Workspace ID:'), required: true)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dude
|
4
|
+
module Setup
|
5
|
+
class Trello
|
6
|
+
def initialize(prompt)
|
7
|
+
@prompt = prompt
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(settings:)
|
11
|
+
settings[:trello][:key] = setup_key
|
12
|
+
settings[:trello][:token] = setup_token
|
13
|
+
settings[:trello][:board_id] = setup_board_id
|
14
|
+
settings
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :prompt
|
20
|
+
|
21
|
+
def setup_email
|
22
|
+
prompt.ask(Dude::Config.style_prompt('Jira user email:'), required: true)
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup_key
|
26
|
+
puts <<~HEREDOC
|
27
|
+
You need to create personal token
|
28
|
+
|
29
|
+
#{'1.'.bold} Log in to https://trello.com/app-key
|
30
|
+
#{'2.'.bold} Copy KEY and paste it below
|
31
|
+
HEREDOC
|
32
|
+
|
33
|
+
if prompt.yes?(Dude::Config.style_prompt('Open Trello token creation page in your browser?'))
|
34
|
+
`open https://trello.com/app-key`
|
35
|
+
end
|
36
|
+
|
37
|
+
prompt.ask(Dude::Config.style_prompt('Trello key:'), required: true)
|
38
|
+
end
|
39
|
+
|
40
|
+
def setup_token
|
41
|
+
puts <<~HEREDOC
|
42
|
+
You need to create personal token
|
43
|
+
|
44
|
+
#{'1.'.bold} Log in to https://trello.com/app-key
|
45
|
+
#{'2.'.bold} From the dialog that appears click 'Allow'
|
46
|
+
#{'3.'.bold} Copy created token to clipboard and paste the it below
|
47
|
+
HEREDOC
|
48
|
+
|
49
|
+
prompt.ask(Dude::Config.style_prompt('Trello token:'), required: true)
|
50
|
+
end
|
51
|
+
|
52
|
+
def setup_board_id
|
53
|
+
puts 'Just open your Trello main board and copy id from the url (Example: 123aBcdE)'
|
54
|
+
prompt.ask(Dude::Config.style_prompt('Board ID:'), required: true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
:project_management_tool: jira
|
3
|
+
:jira:
|
4
|
+
:email:
|
5
|
+
:token:
|
6
|
+
:project:
|
7
|
+
:url:
|
8
|
+
:key:
|
9
|
+
:board_id:
|
10
|
+
:trello:
|
11
|
+
:board_id:
|
12
|
+
:key:
|
13
|
+
:token:
|
14
|
+
:todo_list_name: To Do
|
15
|
+
:in_progress_list_name: In Progress
|
16
|
+
:code_review_list_name: Code Review
|
17
|
+
:testing_list_name: TESTABLE
|
18
|
+
:done_list_name: Done
|
19
|
+
:toggl:
|
20
|
+
:project_name:
|
21
|
+
:token:
|
22
|
+
:workspace_id:
|
23
|
+
:task_format: "[{issue_id}] {issue_title}"
|
24
|
+
:github:
|
25
|
+
:token:
|
26
|
+
:pr_template:
|
27
|
+
:title: "[{issue_id}] {issue_title}\n"
|
28
|
+
:body: |
|
29
|
+
## Story
|
30
|
+
[**\[{issue_id}\] {issue_title}**]({issue_url})
|
31
|
+
## Description
|
32
|
+
Example description of the issue
|
@@ -1,19 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'faraday'
|
2
4
|
|
3
5
|
module Dude
|
4
6
|
module Toggl
|
5
7
|
class Base
|
6
|
-
include Settings
|
7
|
-
|
8
8
|
def toggl_api
|
9
9
|
Faraday.new('https://api.track.toggl.com') do |conn|
|
10
|
-
conn.basic_auth
|
10
|
+
conn.basic_auth Dude::SETTINGS.dig(:toggl, :token), 'api_token'
|
11
11
|
conn.headers['Content-Type'] = 'application/json'
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
def projects_response
|
16
|
-
toggl_api.get("/api/v8/workspaces/#{
|
16
|
+
toggl_api.get("/api/v8/workspaces/#{Dude::SETTINGS.dig(:toggl, :workspace_id)}/projects")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './base'
|
2
4
|
|
3
5
|
module Dude
|
4
6
|
module Toggl
|
5
7
|
class StartTimeEntry < Dude::Toggl::Base
|
6
|
-
|
7
8
|
def call(task_title:, project:)
|
8
9
|
@task_title = task_title
|
9
10
|
@project = project
|
data/lib/dude/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dude-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.1.0.alpha3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Pupko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.1
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: dry-cli
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,33 +53,33 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '1.1'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: jira-ruby
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: '2.1'
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
version: '2.1'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: tty-prompt
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
75
|
+
version: 0.23.1
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
82
|
+
version: 0.23.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: pry
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,8 +122,52 @@ dependencies:
|
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '3.0'
|
111
|
-
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.12'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.12'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: simplecov
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.21.2
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.21.2
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: simplecov-cobertura
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.4'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.4'
|
167
|
+
description: 'This program helps to combine such services as Jira, Toggl and git and
|
112
168
|
replace most routine activities with one simple CLI utility.
|
169
|
+
|
170
|
+
'
|
113
171
|
email:
|
114
172
|
- work.pupko@gmail.com
|
115
173
|
executables:
|
@@ -118,40 +176,67 @@ extensions: []
|
|
118
176
|
extra_rdoc_files: []
|
119
177
|
files:
|
120
178
|
- ".github/dependabot.yml"
|
179
|
+
- ".github/workflows/verify.yml"
|
121
180
|
- ".gitignore"
|
122
181
|
- ".rspec"
|
182
|
+
- ".rubocop.yml"
|
123
183
|
- ".travis.yml"
|
124
184
|
- CHANGELOG.md
|
125
185
|
- Gemfile
|
126
186
|
- Gemfile.lock
|
187
|
+
- LICENCE
|
127
188
|
- README.md
|
128
189
|
- Rakefile
|
129
190
|
- bin/console
|
130
191
|
- bin/dude
|
131
192
|
- bin/setup
|
193
|
+
- demo/dude.gif
|
194
|
+
- demo/wizard.gif
|
132
195
|
- dude.gemspec
|
133
196
|
- lib/dude.rb
|
197
|
+
- lib/dude/code_management.rb
|
198
|
+
- lib/dude/code_management/github/client.rb
|
199
|
+
- lib/dude/code_management/github/create_pull_request.rb
|
134
200
|
- lib/dude/commands.rb
|
135
201
|
- lib/dude/commands/checkout.rb
|
202
|
+
- lib/dude/commands/health_check.rb
|
136
203
|
- lib/dude/commands/install.rb
|
137
204
|
- lib/dude/commands/move.rb
|
205
|
+
- lib/dude/commands/pr.rb
|
206
|
+
- lib/dude/commands/pr/create.rb
|
207
|
+
- lib/dude/commands/pr/remove.rb
|
138
208
|
- lib/dude/commands/start.rb
|
139
209
|
- lib/dude/commands/stop.rb
|
140
210
|
- lib/dude/commands/tasks.rb
|
141
211
|
- lib/dude/commands/track.rb
|
142
212
|
- lib/dude/commands/version.rb
|
213
|
+
- lib/dude/config.rb
|
143
214
|
- lib/dude/git.rb
|
144
215
|
- lib/dude/git/checkout.rb
|
145
216
|
- lib/dude/git/current_branch_name.rb
|
217
|
+
- lib/dude/git/remote_name.rb
|
218
|
+
- lib/dude/health_check.rb
|
146
219
|
- lib/dude/project_management/client.rb
|
147
|
-
- lib/dude/project_management/entities/board.rb
|
148
220
|
- lib/dude/project_management/entities/issue.rb
|
149
221
|
- lib/dude/project_management/jira.rb
|
150
222
|
- lib/dude/project_management/jira/client.rb
|
151
|
-
- lib/dude/project_management/jira/
|
223
|
+
- lib/dude/project_management/jira/fetch_current_task.rb
|
224
|
+
- lib/dude/project_management/jira/fetch_current_tasks.rb
|
152
225
|
- lib/dude/project_management/jira/get_task_name_by_id.rb
|
153
226
|
- lib/dude/project_management/jira/move_task_to_list.rb
|
227
|
+
- lib/dude/project_management/trello.rb
|
228
|
+
- lib/dude/project_management/trello/client.rb
|
229
|
+
- lib/dude/project_management/trello/fetch_current_task.rb
|
230
|
+
- lib/dude/project_management/trello/fetch_current_tasks.rb
|
231
|
+
- lib/dude/project_management/trello/fetch_lists.rb
|
232
|
+
- lib/dude/project_management/trello/get_task_name_by_id.rb
|
233
|
+
- lib/dude/project_management/trello/move_task_to_list.rb
|
154
234
|
- lib/dude/settings.rb
|
235
|
+
- lib/dude/setup/github.rb
|
236
|
+
- lib/dude/setup/jira.rb
|
237
|
+
- lib/dude/setup/toggl.rb
|
238
|
+
- lib/dude/setup/trello.rb
|
239
|
+
- lib/dude/templates/duderc_template
|
155
240
|
- lib/dude/time_trackers/toggl.rb
|
156
241
|
- lib/dude/time_trackers/toggl/base.rb
|
157
242
|
- lib/dude/time_trackers/toggl/start_time_entry.rb
|
@@ -172,12 +257,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
257
|
requirements:
|
173
258
|
- - ">="
|
174
259
|
- !ruby/object:Gem::Version
|
175
|
-
version: 2.
|
260
|
+
version: 2.5.0
|
176
261
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
262
|
requirements:
|
178
|
-
- - "
|
263
|
+
- - ">"
|
179
264
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
265
|
+
version: 1.3.1
|
181
266
|
requirements: []
|
182
267
|
rubygems_version: 3.1.4
|
183
268
|
signing_key:
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'dude/project_management/entities/issue'
|
2
|
-
require 'dude/project_management/jira/client'
|
3
|
-
|
4
|
-
module Dude
|
5
|
-
module ProjectManagement
|
6
|
-
module Jira
|
7
|
-
class GetCurrentTasks
|
8
|
-
include Settings
|
9
|
-
|
10
|
-
def initialize(client)
|
11
|
-
@client = client
|
12
|
-
end
|
13
|
-
|
14
|
-
def call
|
15
|
-
board = client.Board.find(settings['ATLASSIAN_BOARD_ID'])
|
16
|
-
|
17
|
-
all_issues = case board.type
|
18
|
-
when 'kanban' then board.issues
|
19
|
-
when 'simple', 'scrum' then board.sprints(state: 'active').flat_map { |sprint| sprint.issues }
|
20
|
-
else raise Dude::ToBeImplementedError
|
21
|
-
end
|
22
|
-
|
23
|
-
all_issues.map do |issue|
|
24
|
-
Entities::Issue.new({
|
25
|
-
id: issue.key,
|
26
|
-
title: issue.summary,
|
27
|
-
description: issue.description,
|
28
|
-
status: issue.status.name,
|
29
|
-
assignee: issue&.assignee&.displayName
|
30
|
-
})
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
attr_reader :client
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|