dude-cli 2.0.3 → 2.1.0.alpha1
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 +48 -9
- data/LICENCE +20 -0
- data/README.md +32 -6
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/bin/dude +2 -2
- data/dude.gemspec +25 -18
- data/lib/dude.rb +9 -10
- data/lib/dude/code_management.rb +10 -0
- data/lib/dude/code_management/github/client.rb +23 -0
- data/lib/dude/code_management/github/create_pull_request.rb +53 -0
- data/lib/dude/commands.rb +24 -17
- data/lib/dude/commands/checkout.rb +4 -2
- data/lib/dude/commands/install.rb +32 -18
- 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 +9 -3
- data/lib/dude/commands/stop.rb +4 -2
- data/lib/dude/commands/tasks.rb +6 -3
- data/lib/dude/commands/track.rb +5 -3
- data/lib/dude/commands/version.rb +3 -1
- 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/project_management/client.rb +14 -6
- 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 +14 -7
- data/lib/dude/project_management/jira/fetch_current_task.rb +37 -0
- data/lib/dude/project_management/jira/fetch_current_tasks.rb +48 -0
- data/lib/dude/project_management/jira/get_task_name_by_id.rb +1 -1
- data/lib/dude/project_management/jira/move_task_to_list.rb +15 -13
- data/lib/dude/project_management/trello.rb +5 -3
- data/lib/dude/project_management/trello/client.rb +40 -21
- data/lib/dude/project_management/trello/fetch_current_task.rb +43 -0
- data/lib/dude/project_management/trello/fetch_current_tasks.rb +53 -0
- data/lib/dude/project_management/trello/fetch_lists.rb +24 -0
- data/lib/dude/project_management/trello/get_task_name_by_id.rb +25 -0
- data/lib/dude/project_management/trello/move_task_to_list.rb +55 -0
- data/lib/dude/settings.rb +3 -0
- data/lib/dude/templates/pull_request_template +7 -0
- data/lib/dude/time_trackers/toggl.rb +2 -0
- data/lib/dude/time_trackers/toggl/base.rb +4 -0
- 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 +77 -22
- data/dude-cli-2.0.2.gem +0 -0
- data/lib/dude/project_management/entities/board.rb +0 -9
- data/lib/dude/project_management/jira/get_current_tasks.rb +0 -40
- data/lib/dude/project_management/trello/checkout.rb +0 -4
- data/lib/dude/project_management/trello/get_current_tasks.rb +0 -24
- data/lib/dude/project_management/trello/get_lists.rb +0 -15
- 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
|
@@ -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,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
|
+
version: 2.1.0.alpha1
|
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-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: colorize
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
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:
|
26
|
+
version: 0.8.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: dry-cli
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
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: '
|
40
|
+
version: '0.6'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: faraday
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
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:
|
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
|
-
|
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,24 +162,32 @@ 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
|
130
177
|
- bin/dude
|
131
178
|
- bin/setup
|
132
|
-
- dude-cli-2.0.2.gem
|
133
179
|
- dude.gemspec
|
134
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
|
135
184
|
- lib/dude/commands.rb
|
136
185
|
- lib/dude/commands/checkout.rb
|
137
186
|
- lib/dude/commands/install.rb
|
138
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
|
139
191
|
- lib/dude/commands/start.rb
|
140
192
|
- lib/dude/commands/stop.rb
|
141
193
|
- lib/dude/commands/tasks.rb
|
@@ -144,21 +196,24 @@ files:
|
|
144
196
|
- lib/dude/git.rb
|
145
197
|
- lib/dude/git/checkout.rb
|
146
198
|
- lib/dude/git/current_branch_name.rb
|
199
|
+
- lib/dude/git/remote_name.rb
|
147
200
|
- lib/dude/project_management/client.rb
|
148
|
-
- lib/dude/project_management/entities/board.rb
|
149
201
|
- lib/dude/project_management/entities/issue.rb
|
150
202
|
- lib/dude/project_management/jira.rb
|
151
203
|
- lib/dude/project_management/jira/client.rb
|
152
|
-
- lib/dude/project_management/jira/
|
204
|
+
- lib/dude/project_management/jira/fetch_current_task.rb
|
205
|
+
- lib/dude/project_management/jira/fetch_current_tasks.rb
|
153
206
|
- lib/dude/project_management/jira/get_task_name_by_id.rb
|
154
207
|
- lib/dude/project_management/jira/move_task_to_list.rb
|
155
208
|
- lib/dude/project_management/trello.rb
|
156
|
-
- lib/dude/project_management/trello/checkout.rb
|
157
209
|
- lib/dude/project_management/trello/client.rb
|
158
|
-
- lib/dude/project_management/trello/
|
159
|
-
- lib/dude/project_management/trello/
|
160
|
-
- lib/dude/project_management/trello/
|
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
|
161
215
|
- lib/dude/settings.rb
|
216
|
+
- lib/dude/templates/pull_request_template
|
162
217
|
- lib/dude/time_trackers/toggl.rb
|
163
218
|
- lib/dude/time_trackers/toggl/base.rb
|
164
219
|
- lib/dude/time_trackers/toggl/start_time_entry.rb
|
@@ -179,12 +234,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
179
234
|
requirements:
|
180
235
|
- - ">="
|
181
236
|
- !ruby/object:Gem::Version
|
182
|
-
version: 2.
|
237
|
+
version: 2.5.0
|
183
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
239
|
requirements:
|
185
|
-
- - "
|
240
|
+
- - ">"
|
186
241
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
242
|
+
version: 1.3.1
|
188
243
|
requirements: []
|
189
244
|
rubygems_version: 3.1.4
|
190
245
|
signing_key:
|
data/dude-cli-2.0.2.gem
DELETED
Binary file
|
@@ -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,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
|