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
data/lib/cp8_cli/github/base.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Cp8Cli
|
2
|
-
module Github
|
3
|
-
class ParsedShortLink
|
4
|
-
def initialize(short_link)
|
5
|
-
@short_link = short_link
|
6
|
-
end
|
7
|
-
|
8
|
-
def number
|
9
|
-
parts.last
|
10
|
-
end
|
11
|
-
|
12
|
-
def repo
|
13
|
-
parts.first
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
attr_accessor :short_link
|
19
|
-
|
20
|
-
def parts
|
21
|
-
short_link.split("#")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/cp8_cli/story_query.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Cp8Cli
|
2
|
-
class StoryQuery
|
3
|
-
def initialize(short_link)
|
4
|
-
@short_link = short_link
|
5
|
-
end
|
6
|
-
|
7
|
-
def find
|
8
|
-
if github_issue?
|
9
|
-
Github::Issue.find_by_short_link(short_link)
|
10
|
-
else
|
11
|
-
Trello::Card.find(short_link)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
attr_reader :short_link
|
18
|
-
|
19
|
-
def github_issue?
|
20
|
-
short_link.include?("#")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/cp8_cli/storyable.rb
DELETED
data/lib/cp8_cli/table.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require "cp8_cli/table/row"
|
2
|
-
|
3
|
-
module Cp8Cli
|
4
|
-
class Table
|
5
|
-
def self.pick(records, caption: "Pick one:")
|
6
|
-
new(records).pick(caption)
|
7
|
-
end
|
8
|
-
|
9
|
-
def initialize(records)
|
10
|
-
@records = records.to_a.sort_by(&:position)
|
11
|
-
end
|
12
|
-
|
13
|
-
def pick(caption)
|
14
|
-
return if records.none?
|
15
|
-
render_table
|
16
|
-
index = Command.ask(caption, type: Integer)
|
17
|
-
records[index - 1]
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
attr_reader :records
|
23
|
-
|
24
|
-
def render_table
|
25
|
-
if records.size > 0
|
26
|
-
Command.table rows
|
27
|
-
else
|
28
|
-
Command.say "No records found"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def rows
|
33
|
-
records.each_with_index.map do |record, index|
|
34
|
-
Row.new(record, index).to_h
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/cp8_cli/table/row.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Cp8Cli
|
2
|
-
class Table
|
3
|
-
class Row
|
4
|
-
attr_reader :num
|
5
|
-
|
6
|
-
COLOR_TRANSLATIONS = {
|
7
|
-
"purple" => "magenta",
|
8
|
-
"orange" => "yellow",
|
9
|
-
"sky" => "cyan",
|
10
|
-
"pink" => "red",
|
11
|
-
"lime" => "green"
|
12
|
-
}
|
13
|
-
|
14
|
-
def initialize(record, index)
|
15
|
-
@record = record
|
16
|
-
@num = index + 1
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_h
|
20
|
-
result = { "#": num }
|
21
|
-
fields.each do |field|
|
22
|
-
result[field] = colorize record.send(field)
|
23
|
-
end
|
24
|
-
result
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
attr_reader :num, :record
|
30
|
-
|
31
|
-
def colorize(str)
|
32
|
-
return str unless record.respond_to?(:color)
|
33
|
-
"■".send(color) + " #{str}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def color
|
37
|
-
COLOR_TRANSLATIONS[record.color] || record.color || :white
|
38
|
-
end
|
39
|
-
|
40
|
-
def fields
|
41
|
-
@_fields ||= record.class.fields
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/cp8_cli/trello/base.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require "spyke"
|
2
|
-
require "cp8_cli/trello/json_parser"
|
3
|
-
require "cp8_cli/trello/error_handler"
|
4
|
-
|
5
|
-
module Cp8Cli
|
6
|
-
module Trello
|
7
|
-
class Base < Spyke::Base
|
8
|
-
require "cp8_cli/trello/board"
|
9
|
-
require "cp8_cli/trello/card"
|
10
|
-
require "cp8_cli/trello/label"
|
11
|
-
require "cp8_cli/trello/list"
|
12
|
-
require "cp8_cli/trello/member"
|
13
|
-
|
14
|
-
include_root_in_json false
|
15
|
-
cattr_accessor :token
|
16
|
-
|
17
|
-
def self.configure(key:, token:)
|
18
|
-
self.connection = Faraday.new(url: "https://api.trello.com/1", params: { key: key, token: token }) do |c|
|
19
|
-
c.request :json
|
20
|
-
c.use JSONParser
|
21
|
-
c.use ErrorHandler
|
22
|
-
c.adapter Faraday.default_adapter
|
23
|
-
|
24
|
-
# For trello api logging
|
25
|
-
# require "faraday/conductivity"
|
26
|
-
# c.use Faraday::Conductivity::ExtendedLogging
|
27
|
-
end
|
28
|
-
self.token = token
|
29
|
-
end
|
30
|
-
|
31
|
-
def position
|
32
|
-
self[:pos].to_f
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/lib/cp8_cli/trello/board.rb
DELETED
data/lib/cp8_cli/trello/card.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require "cp8_cli/storyable"
|
2
|
-
|
3
|
-
module Cp8Cli
|
4
|
-
module Trello
|
5
|
-
class Card < Base
|
6
|
-
include Storyable
|
7
|
-
|
8
|
-
belongs_to :board, foreign_key: "idBoard"
|
9
|
-
|
10
|
-
def self.fields
|
11
|
-
[:title]
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.find_by_url(url)
|
15
|
-
card = Card.new(url: url)
|
16
|
-
find(card.short_link)
|
17
|
-
end
|
18
|
-
|
19
|
-
def title
|
20
|
-
name
|
21
|
-
end
|
22
|
-
|
23
|
-
def pr_title
|
24
|
-
"#{title} [Delivers ##{short_link}]"
|
25
|
-
end
|
26
|
-
|
27
|
-
def summary
|
28
|
-
"Trello: #{short_url}"
|
29
|
-
end
|
30
|
-
|
31
|
-
def start
|
32
|
-
move_to board.lists.started
|
33
|
-
assign CurrentUser.new
|
34
|
-
end
|
35
|
-
|
36
|
-
def short_link
|
37
|
-
url.scan(/\/c\/(.+)\//).flatten.first
|
38
|
-
end
|
39
|
-
|
40
|
-
# Used by CP-8 bot
|
41
|
-
def attach(url:)
|
42
|
-
self.class.request(:post, "cards/#{id}/attachments", url: url)
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def short_url
|
48
|
-
attributes[:shortUrl]
|
49
|
-
end
|
50
|
-
|
51
|
-
def assign(user)
|
52
|
-
return if member_ids.include?(user.trello_id)
|
53
|
-
self.class.request(:post, "cards/#{id}/members", value: user.trello_id)
|
54
|
-
end
|
55
|
-
|
56
|
-
def move_to(list)
|
57
|
-
self.class.with("cards/:id/idList").where(id: id, value: list.id).put
|
58
|
-
end
|
59
|
-
|
60
|
-
def member_ids
|
61
|
-
attributes["idMembers"] || []
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/lib/cp8_cli/trello/error.rb
DELETED
data/lib/cp8_cli/trello/label.rb
DELETED
data/lib/cp8_cli/trello/list.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module Cp8Cli
|
2
|
-
module Trello
|
3
|
-
class List < Base
|
4
|
-
BACKLOG_INDEX = 0
|
5
|
-
STARTED_INDEX = 1
|
6
|
-
FINISHED_INDEX = 2
|
7
|
-
ACCEPTED_INDEX = 3
|
8
|
-
|
9
|
-
has_many :cards
|
10
|
-
|
11
|
-
def self.fields
|
12
|
-
[:name]
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.backlog
|
16
|
-
all[BACKLOG_INDEX]
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.started
|
20
|
-
all[STARTED_INDEX]
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.finished
|
24
|
-
all[FINISHED_INDEX]
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.accepted
|
28
|
-
all[ACCEPTED_INDEX]
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|