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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/verify.yml +32 -0
  3. data/.rspec +0 -1
  4. data/.rubocop.yml +13 -0
  5. data/CHANGELOG.md +7 -3
  6. data/Gemfile +3 -1
  7. data/Gemfile.lock +62 -9
  8. data/LICENCE +20 -0
  9. data/README.md +60 -35
  10. data/Rakefile +5 -3
  11. data/bin/console +4 -3
  12. data/bin/dude +2 -2
  13. data/demo/dude.gif +0 -0
  14. data/demo/wizard.gif +0 -0
  15. data/dude.gemspec +26 -18
  16. data/lib/dude.rb +18 -7
  17. data/lib/dude/code_management.rb +10 -0
  18. data/lib/dude/code_management/github/client.rb +27 -0
  19. data/lib/dude/code_management/github/create_pull_request.rb +51 -0
  20. data/lib/dude/commands.rb +26 -17
  21. data/lib/dude/commands/checkout.rb +4 -2
  22. data/lib/dude/commands/health_check.rb +15 -0
  23. data/lib/dude/commands/install.rb +67 -43
  24. data/lib/dude/commands/move.rb +5 -3
  25. data/lib/dude/commands/pr.rb +11 -0
  26. data/lib/dude/commands/pr/create.rb +49 -0
  27. data/lib/dude/commands/pr/remove.rb +15 -0
  28. data/lib/dude/commands/start.rb +14 -10
  29. data/lib/dude/commands/stop.rb +4 -4
  30. data/lib/dude/commands/tasks.rb +6 -5
  31. data/lib/dude/commands/track.rb +7 -7
  32. data/lib/dude/commands/version.rb +3 -1
  33. data/lib/dude/config.rb +18 -0
  34. data/lib/dude/git.rb +3 -0
  35. data/lib/dude/git/checkout.rb +20 -1
  36. data/lib/dude/git/current_branch_name.rb +3 -1
  37. data/lib/dude/git/remote_name.rb +21 -0
  38. data/lib/dude/health_check.rb +39 -0
  39. data/lib/dude/project_management/client.rb +14 -7
  40. data/lib/dude/project_management/entities/issue.rb +10 -7
  41. data/lib/dude/project_management/jira.rb +2 -1
  42. data/lib/dude/project_management/jira/client.rb +35 -18
  43. data/lib/dude/project_management/jira/fetch_current_task.rb +35 -0
  44. data/lib/dude/project_management/jira/fetch_current_tasks.rb +46 -0
  45. data/lib/dude/project_management/jira/get_task_name_by_id.rb +1 -3
  46. data/lib/dude/project_management/jira/move_task_to_list.rb +15 -15
  47. data/lib/dude/project_management/{entities/board.rb → trello.rb} +3 -4
  48. data/lib/dude/project_management/trello/client.rb +56 -0
  49. data/lib/dude/project_management/trello/fetch_current_task.rb +41 -0
  50. data/lib/dude/project_management/trello/fetch_current_tasks.rb +51 -0
  51. data/lib/dude/project_management/trello/fetch_lists.rb +22 -0
  52. data/lib/dude/project_management/trello/get_task_name_by_id.rb +23 -0
  53. data/lib/dude/project_management/trello/move_task_to_list.rb +53 -0
  54. data/lib/dude/settings.rb +3 -0
  55. data/lib/dude/setup/github.rb +35 -0
  56. data/lib/dude/setup/jira.rb +64 -0
  57. data/lib/dude/setup/toggl.rb +47 -0
  58. data/lib/dude/setup/trello.rb +58 -0
  59. data/lib/dude/templates/duderc_template +32 -0
  60. data/lib/dude/time_trackers/toggl.rb +2 -0
  61. data/lib/dude/time_trackers/toggl/base.rb +4 -4
  62. data/lib/dude/time_trackers/toggl/start_time_entry.rb +3 -2
  63. data/lib/dude/time_trackers/toggl/stop_time_entry.rb +3 -1
  64. data/lib/dude/version.rb +3 -1
  65. metadata +99 -14
  66. 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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative './toggl/base'
2
4
  require_relative './toggl/start_time_entry'
3
5
 
@@ -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 settings['TOGGL_TOKEN'], 'api_token'
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/#{settings['TOGGL_WORKSPACE_ID']}/projects")
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
- require 'dude/time_trackers/toggl/base'
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
@@ -1,4 +1,6 @@
1
- require 'dude/time_trackers/toggl/base'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './base'
2
4
 
3
5
  module Dude
4
6
  module Toggl
data/lib/dude/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dude
2
- VERSION = "2.0.5"
4
+ VERSION = '2.1.0.alpha3'
3
5
  end
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.5
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-03-11 00:00:00.000000000 Z
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: colorize
56
+ name: jira-ruby
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: 0.8.1
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: 0.8.1
68
+ version: '2.1'
55
69
  - !ruby/object:Gem::Dependency
56
- name: jira-ruby
70
+ name: tty-prompt
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '2.1'
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: '2.1'
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
- description: This program helps to combine such services as Jira, Toggl and git and
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/get_current_tasks.rb
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.3.0
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: '0'
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