cp8_cli 6.0.1 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -1
- data/cp8_cli.gemspec +2 -6
- data/exe/cp8 +3 -4
- data/lib/cp8_cli.rb +0 -1
- data/lib/cp8_cli/adhoc_story.rb +7 -38
- data/lib/cp8_cli/branch.rb +15 -35
- data/lib/cp8_cli/branch_name.rb +16 -13
- data/lib/cp8_cli/ci.rb +1 -1
- data/lib/cp8_cli/command.rb +8 -9
- data/lib/cp8_cli/commands/open.rb +1 -1
- data/lib/cp8_cli/commands/start.rb +5 -8
- data/lib/cp8_cli/commands/submit.rb +1 -10
- data/lib/cp8_cli/commands/suggest.rb +2 -1
- data/lib/cp8_cli/config_store.rb +2 -0
- data/lib/cp8_cli/current_user.rb +4 -12
- data/lib/cp8_cli/github/api.rb +29 -0
- data/lib/cp8_cli/github/issue.rb +16 -37
- data/lib/cp8_cli/github/pull_request.rb +27 -11
- data/lib/cp8_cli/global_config.rb +0 -24
- data/lib/cp8_cli/main.rb +1 -2
- data/lib/cp8_cli/pull_request_body.rb +1 -1
- data/lib/cp8_cli/pull_request_title.rb +1 -1
- data/lib/cp8_cli/repo.rb +8 -8
- data/lib/cp8_cli/story.rb +54 -0
- data/lib/cp8_cli/version.rb +1 -1
- metadata +10 -79
- data/lib/cp8_cli/github/base.rb +0 -14
- data/lib/cp8_cli/github/parsed_short_link.rb +0 -25
- data/lib/cp8_cli/story_query.rb +0 -23
- data/lib/cp8_cli/storyable.rb +0 -7
- data/lib/cp8_cli/table.rb +0 -38
- data/lib/cp8_cli/table/row.rb +0 -45
- data/lib/cp8_cli/trello/base.rb +0 -36
- data/lib/cp8_cli/trello/board.rb +0 -13
- data/lib/cp8_cli/trello/card.rb +0 -65
- data/lib/cp8_cli/trello/error.rb +0 -5
- data/lib/cp8_cli/trello/error_handler.rb +0 -15
- data/lib/cp8_cli/trello/json_parser.rb +0 -13
- data/lib/cp8_cli/trello/label.rb +0 -15
- data/lib/cp8_cli/trello/list.rb +0 -32
- data/lib/cp8_cli/trello/member.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f89f5cef49c8003d4e122a20839552d4f2f9356
|
4
|
+
data.tar.gz: cb65a62d4e2106f1c257fb975f2e153eeb23bb71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea264e71c5e44e09b69497ea494b8ae841361cfa97809238d2877d837efbcb9abf1f9a28da777d91e9f779fd53adc514364fbde7e12021137bb7e85e7af2b7b1
|
7
|
+
data.tar.gz: 21de39da770d3d3cd563fc606a1552b10328aec458e5475d14f4bc47cc4d618e67d8f568366835d3bfe33150a5df4aa43941317bde3c6ecc3c8ab33827b51d22
|
data/README.md
CHANGED
data/cp8_cli.gemspec
CHANGED
@@ -25,19 +25,15 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "minitest-line"
|
26
26
|
spec.add_development_dependency "minitest-reporters"
|
27
27
|
spec.add_development_dependency "pry"
|
28
|
+
spec.add_development_dependency "multi_json"
|
28
29
|
spec.add_development_dependency "webmock"
|
29
|
-
spec.add_development_dependency "faraday-conductivity"
|
30
30
|
|
31
31
|
spec.add_dependency "activesupport"
|
32
32
|
spec.add_dependency "colored"
|
33
33
|
spec.add_dependency "highline"
|
34
|
-
spec.add_dependency "hirb"
|
35
|
-
spec.add_dependency "hirb-colors"
|
36
|
-
spec.add_dependency "hirb-unicode"
|
37
34
|
spec.add_dependency "launchy"
|
38
|
-
spec.add_dependency "multi_json"
|
39
35
|
spec.add_dependency "octokit"
|
40
|
-
spec.add_dependency "spyke"
|
41
36
|
spec.add_dependency "thor"
|
42
37
|
spec.add_dependency "trollop"
|
38
|
+
spec.add_dependency "tty-prompt"
|
43
39
|
end
|
data/exe/cp8
CHANGED
@@ -12,13 +12,12 @@ module Cp8Cli
|
|
12
12
|
main.start(name)
|
13
13
|
end
|
14
14
|
|
15
|
-
desc "submit", "Pushes branch to GitHub and opens
|
16
|
-
method_option :wip, desc: "Flag PR as WIP", type: :boolean
|
15
|
+
desc "submit", "Pushes branch to GitHub and opens PR"
|
17
16
|
def submit
|
18
|
-
main.submit
|
17
|
+
main.submit
|
19
18
|
end
|
20
19
|
|
21
|
-
desc "open", "Open current associated
|
20
|
+
desc "open", "Open current associated PR in browser"
|
22
21
|
def open
|
23
22
|
main.open
|
24
23
|
end
|
data/lib/cp8_cli.rb
CHANGED
data/lib/cp8_cli/adhoc_story.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require "cp8_cli/
|
1
|
+
require "cp8_cli/story"
|
2
2
|
|
3
3
|
module Cp8Cli
|
4
|
-
class AdhocStory
|
5
|
-
include Storyable
|
4
|
+
class AdhocStory < Story
|
6
5
|
attr_reader :title
|
7
6
|
|
8
7
|
def initialize(title)
|
@@ -10,47 +9,17 @@ module Cp8Cli
|
|
10
9
|
end
|
11
10
|
|
12
11
|
def summary
|
13
|
-
|
12
|
+
# noop
|
14
13
|
end
|
15
14
|
|
16
|
-
def
|
17
|
-
|
18
|
-
push_branch
|
19
|
-
create_wip_pull_request
|
20
|
-
end
|
21
|
-
|
22
|
-
def short_link
|
23
|
-
nil # noop for now
|
24
|
-
end
|
25
|
-
|
26
|
-
def pr_title
|
27
|
-
PullRequestTitle.new(title, prefixes: [:wip]).run
|
15
|
+
def url
|
16
|
+
"#{Repo.current.url}/tree/#{Branch.current}"
|
28
17
|
end
|
29
18
|
|
30
19
|
private
|
31
20
|
|
32
|
-
def
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def commit_message
|
37
|
-
"Started: #{escaped_title}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def escaped_title
|
41
|
-
title.gsub('"', '\"')
|
42
|
-
end
|
43
|
-
|
44
|
-
def push_branch
|
45
|
-
branch.push
|
46
|
-
end
|
47
|
-
|
48
|
-
def create_wip_pull_request
|
49
|
-
Github::PullRequest.create(
|
50
|
-
title: pr_title,
|
51
|
-
from: branch.name,
|
52
|
-
to: branch.target
|
53
|
-
)
|
21
|
+
def assign
|
22
|
+
# noop
|
54
23
|
end
|
55
24
|
end
|
56
25
|
end
|
data/lib/cp8_cli/branch.rb
CHANGED
@@ -3,7 +3,6 @@ require "cp8_cli/ci"
|
|
3
3
|
require "cp8_cli/github/pull_request"
|
4
4
|
require "cp8_cli/branch_name"
|
5
5
|
require "cp8_cli/current_user"
|
6
|
-
require "cp8_cli/story_query"
|
7
6
|
require "cp8_cli/pull_request_title"
|
8
7
|
require "cp8_cli/pull_request_body"
|
9
8
|
|
@@ -24,19 +23,6 @@ module Cp8Cli
|
|
24
23
|
new("suggestion-#{SecureRandom.hex(8)}")
|
25
24
|
end
|
26
25
|
|
27
|
-
def self.from_story(story)
|
28
|
-
new BranchName.new(
|
29
|
-
user: CurrentUser.new,
|
30
|
-
target: current,
|
31
|
-
title: story.title,
|
32
|
-
short_link: story.short_link
|
33
|
-
).to_s
|
34
|
-
end
|
35
|
-
|
36
|
-
def story
|
37
|
-
@_story ||= StoryQuery.new(short_link).find if short_link
|
38
|
-
end
|
39
|
-
|
40
26
|
def checkout
|
41
27
|
Command.run "git checkout #{name} >/dev/null 2>&1 || git checkout -b #{name}"
|
42
28
|
end
|
@@ -45,20 +31,12 @@ module Cp8Cli
|
|
45
31
|
Command.run "git push origin #{name} -u"
|
46
32
|
end
|
47
33
|
|
48
|
-
def
|
49
|
-
|
34
|
+
def open_pr
|
35
|
+
pull_request.open
|
50
36
|
end
|
51
37
|
|
52
|
-
def
|
53
|
-
|
54
|
-
Command.open_url story.url
|
55
|
-
else
|
56
|
-
Command.error "Not currently on story branch"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def target
|
61
|
-
name_parts[2] || "master"
|
38
|
+
def open_ci
|
39
|
+
Ci.new(branch_name: name, repo: repo).open
|
62
40
|
end
|
63
41
|
|
64
42
|
def reset
|
@@ -75,22 +53,24 @@ module Cp8Cli
|
|
75
53
|
|
76
54
|
private
|
77
55
|
|
78
|
-
def
|
79
|
-
|
56
|
+
def repo
|
57
|
+
Repo.current
|
58
|
+
end
|
80
59
|
|
81
|
-
|
60
|
+
def dirty?
|
61
|
+
Command.read("git status --porcelain")
|
82
62
|
end
|
83
63
|
|
84
|
-
def
|
85
|
-
|
64
|
+
def pull_request
|
65
|
+
existing_pull_request || new_pull_request
|
86
66
|
end
|
87
67
|
|
88
|
-
def
|
89
|
-
|
68
|
+
def existing_pull_request
|
69
|
+
Github::PullRequest.find_by(branch: name, repo: repo.shorthand)
|
90
70
|
end
|
91
71
|
|
92
|
-
def
|
93
|
-
|
72
|
+
def new_pull_request
|
73
|
+
Github::PullRequest.new(from: name)
|
94
74
|
end
|
95
75
|
end
|
96
76
|
end
|
data/lib/cp8_cli/branch_name.rb
CHANGED
@@ -1,27 +1,30 @@
|
|
1
1
|
module Cp8Cli
|
2
2
|
class BranchName
|
3
|
-
|
3
|
+
SEPARATOR = "/"
|
4
|
+
|
5
|
+
def initialize(user:, story:)
|
4
6
|
@user = user
|
5
|
-
@
|
6
|
-
@title = title
|
7
|
-
@short_link = short_link
|
7
|
+
@story = story
|
8
8
|
end
|
9
9
|
|
10
10
|
def to_s
|
11
|
-
|
11
|
+
"#{prefix}#{user_input}"
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
attr_reader :user, :
|
16
|
+
attr_reader :user, :story
|
17
|
+
|
18
|
+
def user_input
|
19
|
+
Command.ask("Branch name: #{prefix}", default: default)
|
20
|
+
end
|
21
|
+
|
22
|
+
def prefix
|
23
|
+
user.initials.downcase + SEPARATOR
|
24
|
+
end
|
17
25
|
|
18
|
-
def
|
19
|
-
|
20
|
-
parts << user.initials.downcase
|
21
|
-
parts << title.parameterize[0..50]
|
22
|
-
parts << target
|
23
|
-
parts << short_link
|
24
|
-
parts.compact
|
26
|
+
def default
|
27
|
+
story.title.parameterize[0..50]
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
data/lib/cp8_cli/ci.rb
CHANGED
data/lib/cp8_cli/command.rb
CHANGED
@@ -1,22 +1,17 @@
|
|
1
1
|
require "colored"
|
2
2
|
require "active_support/core_ext/module/delegation"
|
3
3
|
require "highline"
|
4
|
-
require "
|
5
|
-
require "hirb"
|
4
|
+
require "tty-prompt"
|
6
5
|
|
7
6
|
module Cp8Cli
|
8
7
|
class Command
|
9
8
|
class << self
|
10
|
-
delegate :
|
9
|
+
delegate :open_url, :say, :success, :ask, :title, :error, :run, :read, to: :client
|
11
10
|
attr_accessor :client
|
12
11
|
end
|
13
12
|
|
14
13
|
self.client = new
|
15
14
|
|
16
|
-
def table(items)
|
17
|
-
puts Hirb::Helpers::AutoTable.render(items, unicode: true)
|
18
|
-
end
|
19
|
-
|
20
15
|
def open_url(url)
|
21
16
|
return title(url) if ENV['BROWSER'] == 'echo'
|
22
17
|
`open \"#{url}\"`
|
@@ -30,8 +25,8 @@ module Cp8Cli
|
|
30
25
|
highline.say(message.green.bold)
|
31
26
|
end
|
32
27
|
|
33
|
-
def ask(message,
|
34
|
-
|
28
|
+
def ask(message, required: true, default: nil)
|
29
|
+
tty.ask(message, required: required, default: default)
|
35
30
|
end
|
36
31
|
|
37
32
|
def title(message)
|
@@ -57,5 +52,9 @@ module Cp8Cli
|
|
57
52
|
def highline
|
58
53
|
@_highline ||= HighLine.new
|
59
54
|
end
|
55
|
+
|
56
|
+
def tty
|
57
|
+
@_tty ||= TTY::Prompt.new
|
58
|
+
end
|
60
59
|
end
|
61
60
|
end
|
@@ -10,10 +10,11 @@ module Cp8Cli
|
|
10
10
|
|
11
11
|
def run
|
12
12
|
check_version
|
13
|
-
story
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
if story
|
14
|
+
story.start
|
15
|
+
else
|
16
|
+
Command.error "No name/url provided"
|
17
|
+
end
|
17
18
|
end
|
18
19
|
|
19
20
|
private
|
@@ -33,12 +34,8 @@ module Cp8Cli
|
|
33
34
|
def find_or_create_story
|
34
35
|
if name.to_s.start_with?("https://github.com")
|
35
36
|
Github::Issue.find_by_url(name)
|
36
|
-
elsif name.to_s.start_with?("http")
|
37
|
-
Trello::Card.find_by_url(name)
|
38
37
|
elsif name.present?
|
39
38
|
AdhocStory.new(name)
|
40
|
-
else
|
41
|
-
Command.error "No name/url provided"
|
42
39
|
end
|
43
40
|
end
|
44
41
|
end
|
@@ -7,7 +7,7 @@ module Cp8Cli
|
|
7
7
|
|
8
8
|
def run
|
9
9
|
branch.push
|
10
|
-
|
10
|
+
branch.open_pr
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
@@ -17,15 +17,6 @@ module Cp8Cli
|
|
17
17
|
def branch
|
18
18
|
@_branch ||= Branch.current
|
19
19
|
end
|
20
|
-
|
21
|
-
def pull_request
|
22
|
-
Github::PullRequest.new(
|
23
|
-
from: branch,
|
24
|
-
to: branch.target,
|
25
|
-
title: PullRequestTitle.new(branch.story&.pr_title, prefixes: options.keys).run,
|
26
|
-
body: PullRequestBody.new(branch.story).run
|
27
|
-
)
|
28
|
-
end
|
29
20
|
end
|
30
21
|
end
|
31
22
|
end
|
@@ -7,7 +7,7 @@ module Cp8Cli
|
|
7
7
|
|
8
8
|
suggestion_branch.checkout
|
9
9
|
suggestion_branch.push
|
10
|
-
pull_request.open
|
10
|
+
pull_request.open
|
11
11
|
|
12
12
|
original_branch.checkout
|
13
13
|
original_branch.reset
|
@@ -31,6 +31,7 @@ module Cp8Cli
|
|
31
31
|
Github::PullRequest.new(
|
32
32
|
from: suggestion_branch,
|
33
33
|
to: original_branch,
|
34
|
+
expand: nil
|
34
35
|
)
|
35
36
|
end
|
36
37
|
|
data/lib/cp8_cli/config_store.rb
CHANGED
data/lib/cp8_cli/current_user.rb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
|
+
require "active_support/core_ext/string"
|
2
|
+
|
1
3
|
module Cp8Cli
|
2
4
|
class CurrentUser
|
3
|
-
|
4
|
-
@_current ||= new
|
5
|
-
end
|
5
|
+
include Github::Api::Client
|
6
6
|
|
7
7
|
def initials
|
8
8
|
git_user_name.parameterize(separator: " ").split.map(&:first).join
|
9
9
|
end
|
10
10
|
|
11
|
-
def trello_id
|
12
|
-
trello_user.id
|
13
|
-
end
|
14
|
-
|
15
11
|
def github_login
|
16
12
|
github_user.login
|
17
13
|
end
|
@@ -23,11 +19,7 @@ module Cp8Cli
|
|
23
19
|
end
|
24
20
|
|
25
21
|
def github_user
|
26
|
-
@_github_user ||=
|
27
|
-
end
|
28
|
-
|
29
|
-
def trello_user
|
30
|
-
@_trello_user ||= Trello::Member.current
|
22
|
+
@_github_user ||= client.user
|
31
23
|
end
|
32
24
|
end
|
33
25
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "active_support"
|
2
|
+
require "active_support/concern"
|
3
|
+
require "octokit"
|
4
|
+
|
5
|
+
module Cp8Cli
|
6
|
+
module Github
|
7
|
+
class Api
|
8
|
+
cattr_accessor :client
|
9
|
+
|
10
|
+
def self.configure(token:)
|
11
|
+
self.client = Octokit::Client.new(access_token: token)
|
12
|
+
end
|
13
|
+
|
14
|
+
module Client
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
|
17
|
+
def client
|
18
|
+
self.class.client
|
19
|
+
end
|
20
|
+
|
21
|
+
class_methods do
|
22
|
+
def client
|
23
|
+
Api.client
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|