dude-cli 2.0.4 → 2.1.0.alpha2

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 (62) 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 +48 -9
  8. data/LICENCE +20 -0
  9. data/README.md +32 -6
  10. data/Rakefile +5 -3
  11. data/bin/console +4 -3
  12. data/bin/dude +2 -2
  13. data/dude.gemspec +25 -18
  14. data/lib/dude.rb +9 -9
  15. data/lib/dude/code_management.rb +10 -0
  16. data/lib/dude/code_management/github/client.rb +23 -0
  17. data/lib/dude/code_management/github/create_pull_request.rb +53 -0
  18. data/lib/dude/commands.rb +24 -17
  19. data/lib/dude/commands/checkout.rb +4 -2
  20. data/lib/dude/commands/install.rb +32 -18
  21. data/lib/dude/commands/move.rb +5 -3
  22. data/lib/dude/commands/pr.rb +11 -0
  23. data/lib/dude/commands/pr/create.rb +49 -0
  24. data/lib/dude/commands/pr/remove.rb +15 -0
  25. data/lib/dude/commands/start.rb +9 -3
  26. data/lib/dude/commands/stop.rb +4 -2
  27. data/lib/dude/commands/tasks.rb +6 -3
  28. data/lib/dude/commands/track.rb +5 -3
  29. data/lib/dude/commands/version.rb +3 -1
  30. data/lib/dude/git.rb +3 -0
  31. data/lib/dude/git/checkout.rb +20 -1
  32. data/lib/dude/git/current_branch_name.rb +3 -1
  33. data/lib/dude/git/remote_name.rb +21 -0
  34. data/lib/dude/project_management/client.rb +14 -6
  35. data/lib/dude/project_management/entities/issue.rb +10 -7
  36. data/lib/dude/project_management/jira.rb +2 -1
  37. data/lib/dude/project_management/jira/client.rb +14 -7
  38. data/lib/dude/project_management/jira/fetch_current_task.rb +37 -0
  39. data/lib/dude/project_management/jira/fetch_current_tasks.rb +48 -0
  40. data/lib/dude/project_management/jira/get_task_name_by_id.rb +1 -1
  41. data/lib/dude/project_management/jira/move_task_to_list.rb +15 -13
  42. data/lib/dude/project_management/trello.rb +5 -3
  43. data/lib/dude/project_management/trello/client.rb +40 -21
  44. data/lib/dude/project_management/trello/fetch_current_task.rb +43 -0
  45. data/lib/dude/project_management/trello/fetch_current_tasks.rb +53 -0
  46. data/lib/dude/project_management/trello/fetch_lists.rb +24 -0
  47. data/lib/dude/project_management/trello/get_task_name_by_id.rb +25 -0
  48. data/lib/dude/project_management/trello/move_task_to_list.rb +55 -0
  49. data/lib/dude/settings.rb +3 -0
  50. data/lib/dude/templates/pull_request_template +7 -0
  51. data/lib/dude/time_trackers/toggl.rb +2 -0
  52. data/lib/dude/time_trackers/toggl/base.rb +4 -0
  53. data/lib/dude/time_trackers/toggl/start_time_entry.rb +3 -2
  54. data/lib/dude/time_trackers/toggl/stop_time_entry.rb +3 -1
  55. data/lib/dude/version.rb +3 -1
  56. metadata +77 -21
  57. data/lib/dude/project_management/entities/board.rb +0 -9
  58. data/lib/dude/project_management/jira/get_current_tasks.rb +0 -40
  59. data/lib/dude/project_management/trello/checkout.rb +0 -4
  60. data/lib/dude/project_management/trello/get_current_tasks.rb +0 -24
  61. data/lib/dude/project_management/trello/get_lists.rb +0 -15
  62. data/lib/dude/project_management/trello/move_tasks_to_list.rb +0 -14
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dude
4
+ module ProjectManagement
5
+ module Trello
6
+ class FetchLists
7
+ include Settings
8
+
9
+ def initialize(client)
10
+ @client = client
11
+ end
12
+
13
+ def call
14
+ response = client.get("/1/board/#{settings['ATLASSIAN_BOARD_ID']}/lists", { fields: 'name' })
15
+ JSON.parse(response.body)
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :client
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dude
4
+ module ProjectManagement
5
+ module Trello
6
+ class GetTaskNameById
7
+ include Settings
8
+
9
+ def initialize(client, id:)
10
+ @client = client
11
+ @id = id
12
+ end
13
+
14
+ def call
15
+ response = client.get("/1/boards/#{settings['ATLASSIAN_BOARD_ID']}/cards/#{id}")
16
+ JSON.parse(response.body)['name']
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :client, :id
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './fetch_lists'
4
+
5
+ module Dude
6
+ module ProjectManagement
7
+ module Trello
8
+ class MoveTaskToList
9
+ include Settings
10
+
11
+ def initialize(client, id:, list_name:)
12
+ @client = client
13
+ @id = id
14
+ @list_name = list_name
15
+ end
16
+
17
+ def call
18
+ response = client.get("/1/boards/#{settings['ATLASSIAN_BOARD_ID']}/cards/#{id}", { fields: 'id' })
19
+ card_id = JSON.parse(response.body)['id']
20
+ client.put("/1/cards/#{card_id}", { idList: list_id })
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :client, :id, :list_name
26
+
27
+ def list_id
28
+ if list_name
29
+ lists.find { |list| list['name'] == list_name }['id']
30
+ else
31
+ select_list_for_moving['id']
32
+ end
33
+ end
34
+
35
+ def select_list_for_moving
36
+ puts 'Please, select list for moving:'.green.bold
37
+
38
+ print_lists
39
+
40
+ print "\nList index: ".bold
41
+ list_index = $stdin.gets.chomp
42
+ lists[list_index.to_i - 1]
43
+ end
44
+
45
+ def print_lists
46
+ lists.map { |list| list['name'] }.each_with_index { |name, index| puts "#{index + 1}: #{name.bold}" }
47
+ end
48
+
49
+ def lists
50
+ @lists ||= FetchLists.new(client).call
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
data/lib/dude/settings.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dude
2
4
  module Settings
3
5
  CONFIG_FILE = '.duderc'
@@ -5,6 +7,7 @@ module Dude
5
7
  def settings
6
8
  @settings ||= read(file).strip.split("\n").map do |line|
7
9
  next if line =~ /^#/ || line.empty?
10
+
8
11
  line.split('=').map(&:strip)
9
12
  end.compact.to_h
10
13
  end
@@ -0,0 +1,7 @@
1
+ title: >
2
+ [{issue_id}] {issue_title}
3
+ body: |
4
+ ## Story
5
+ [**\[{issue_id}\] {issue_title}**]({issue_url})
6
+ ## Description
7
+ 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,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+
1
5
  module Dude
2
6
  module Toggl
3
7
  class Base
@@ -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.4"
4
+ VERSION = '2.1.0.alpha2'
3
5
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dude-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.0.alpha2
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-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: dry-cli
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.6'
19
+ version: 0.8.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.6'
26
+ version: 0.8.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: faraday
28
+ name: dry-cli
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.1'
33
+ version: '0.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.1'
40
+ version: '0.6'
41
41
  - !ruby/object:Gem::Dependency
42
- name: colorize
42
+ name: faraday
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.8.1
47
+ version: '1.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.1
54
+ version: '1.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: jira-ruby
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,8 +108,52 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.0'
111
- description: This program helps to combine such services as Jira, Toggl and git and
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.12'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.12'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.21.2
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.21.2
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov-cobertura
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.4'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.4'
153
+ description: 'This program helps to combine such services as Jira, Toggl and git and
112
154
  replace most routine activities with one simple CLI utility.
155
+
156
+ '
113
157
  email:
114
158
  - work.pupko@gmail.com
115
159
  executables:
@@ -118,12 +162,15 @@ extensions: []
118
162
  extra_rdoc_files: []
119
163
  files:
120
164
  - ".github/dependabot.yml"
165
+ - ".github/workflows/verify.yml"
121
166
  - ".gitignore"
122
167
  - ".rspec"
168
+ - ".rubocop.yml"
123
169
  - ".travis.yml"
124
170
  - CHANGELOG.md
125
171
  - Gemfile
126
172
  - Gemfile.lock
173
+ - LICENCE
127
174
  - README.md
128
175
  - Rakefile
129
176
  - bin/console
@@ -131,10 +178,16 @@ files:
131
178
  - bin/setup
132
179
  - dude.gemspec
133
180
  - lib/dude.rb
181
+ - lib/dude/code_management.rb
182
+ - lib/dude/code_management/github/client.rb
183
+ - lib/dude/code_management/github/create_pull_request.rb
134
184
  - lib/dude/commands.rb
135
185
  - lib/dude/commands/checkout.rb
136
186
  - lib/dude/commands/install.rb
137
187
  - lib/dude/commands/move.rb
188
+ - lib/dude/commands/pr.rb
189
+ - lib/dude/commands/pr/create.rb
190
+ - lib/dude/commands/pr/remove.rb
138
191
  - lib/dude/commands/start.rb
139
192
  - lib/dude/commands/stop.rb
140
193
  - lib/dude/commands/tasks.rb
@@ -143,21 +196,24 @@ files:
143
196
  - lib/dude/git.rb
144
197
  - lib/dude/git/checkout.rb
145
198
  - lib/dude/git/current_branch_name.rb
199
+ - lib/dude/git/remote_name.rb
146
200
  - lib/dude/project_management/client.rb
147
- - lib/dude/project_management/entities/board.rb
148
201
  - lib/dude/project_management/entities/issue.rb
149
202
  - lib/dude/project_management/jira.rb
150
203
  - lib/dude/project_management/jira/client.rb
151
- - lib/dude/project_management/jira/get_current_tasks.rb
204
+ - lib/dude/project_management/jira/fetch_current_task.rb
205
+ - lib/dude/project_management/jira/fetch_current_tasks.rb
152
206
  - lib/dude/project_management/jira/get_task_name_by_id.rb
153
207
  - lib/dude/project_management/jira/move_task_to_list.rb
154
208
  - lib/dude/project_management/trello.rb
155
- - lib/dude/project_management/trello/checkout.rb
156
209
  - lib/dude/project_management/trello/client.rb
157
- - lib/dude/project_management/trello/get_current_tasks.rb
158
- - lib/dude/project_management/trello/get_lists.rb
159
- - lib/dude/project_management/trello/move_tasks_to_list.rb
210
+ - lib/dude/project_management/trello/fetch_current_task.rb
211
+ - lib/dude/project_management/trello/fetch_current_tasks.rb
212
+ - lib/dude/project_management/trello/fetch_lists.rb
213
+ - lib/dude/project_management/trello/get_task_name_by_id.rb
214
+ - lib/dude/project_management/trello/move_task_to_list.rb
160
215
  - lib/dude/settings.rb
216
+ - lib/dude/templates/pull_request_template
161
217
  - lib/dude/time_trackers/toggl.rb
162
218
  - lib/dude/time_trackers/toggl/base.rb
163
219
  - lib/dude/time_trackers/toggl/start_time_entry.rb
@@ -178,12 +234,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
178
234
  requirements:
179
235
  - - ">="
180
236
  - !ruby/object:Gem::Version
181
- version: 2.3.0
237
+ version: 2.5.0
182
238
  required_rubygems_version: !ruby/object:Gem::Requirement
183
239
  requirements:
184
- - - ">="
240
+ - - ">"
185
241
  - !ruby/object:Gem::Version
186
- version: '0'
242
+ version: 1.3.1
187
243
  requirements: []
188
244
  rubygems_version: 3.1.4
189
245
  signing_key:
@@ -1,9 +0,0 @@
1
- module Dude
2
- module ProjectManagement
3
- module Entities
4
- class Issue
5
-
6
- end
7
- end
8
- end
9
- end
@@ -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
@@ -1,4 +0,0 @@
1
- # TODO
2
- response = client.get("/1/boards/#{BOARD_ID}/cards/#{id}")
3
- extracted_branch_name = JSON.parse(response.body).dig('url').rpartition('/').last
4
- Git::Checkout.new.call(extracted_branch_name)
@@ -1,24 +0,0 @@
1
- # TODO
2
- module Dude
3
- module ProjectManagement
4
- module Trello
5
- class GetCurrentTasks
6
-
7
- def initialize
8
- client = Trello::Client.new
9
-
10
- response = client.get("/1/lists/#{TODO_LIST_ID}/cards", { fields: 'name,idShort' })
11
-
12
- body = JSON.parse(response.body)
13
-
14
- puts "To Do list\n".green.bold
15
-
16
- body.map do |issue|
17
- binding.pry
18
- Entities::Issue.new(id: card['idShort'], title: card['name'], description: issue.description, status: issue.status.name)
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end