flight_plan_cli 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/fp +6 -2
- data/lib/flight_plan_cli/api.rb +10 -7
- data/lib/flight_plan_cli/initializer.rb +68 -1
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f465340e3655c136c286394d08785286dc5a03c
|
4
|
+
data.tar.gz: a66e90ff1b79746a1020d765fd538c5d4a75251c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dabbc10c50fdbe96f28558f8d1bbb193a608794fb5806ca23ed33993cdc291ab0458c349554ff66e62828062acf1298a11d21c70d2218d10327e9420ff9f9f8d
|
7
|
+
data.tar.gz: 7e28b3a682753678b0288029d6f810807a968217aaaf0e1c7eb62c853b9504e82ef76a233204c7e7810547152f80276317bf669fadddbc8262ecd2d783c149d3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/bin/fp
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'flight_plan_cli'
|
3
|
+
require 'flight_plan_cli'
|
4
4
|
|
5
|
-
|
5
|
+
if ARGV.empty? || ARGV[0] == 'help'
|
6
|
+
puts ''
|
7
|
+
puts "FlightPlan CLI version #{FlightPlanCli.version}"
|
8
|
+
puts ''
|
9
|
+
end
|
6
10
|
|
7
11
|
FlightPlanCli::Initializer.start(ARGV)
|
data/lib/flight_plan_cli/api.rb
CHANGED
@@ -2,7 +2,6 @@ require 'httparty'
|
|
2
2
|
|
3
3
|
module FlightPlanCli
|
4
4
|
class Api
|
5
|
-
include HTTParty
|
6
5
|
def initialize(url:, key:, secret:)
|
7
6
|
@url = url
|
8
7
|
@key = key
|
@@ -10,13 +9,14 @@ module FlightPlanCli
|
|
10
9
|
end
|
11
10
|
|
12
11
|
def board_tickets(board_id: nil, repo_id: nil, repo_url: nil, assignee_username: nil)
|
13
|
-
params = {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
params = {
|
13
|
+
board_id: board_id,
|
14
|
+
repo_id: repo_id,
|
15
|
+
repo_url: repo_url,
|
16
|
+
assignee_username: assignee_username
|
17
|
+
}
|
18
18
|
|
19
|
-
|
19
|
+
HTTParty.get( "#{url}/board_tickets.json", query: params, headers: headers)
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
@@ -24,6 +24,9 @@ module FlightPlanCli
|
|
24
24
|
attr_reader :url, :key, :secret
|
25
25
|
|
26
26
|
def headers
|
27
|
+
@headers = {
|
28
|
+
'Authorization' => "Token token=\"#{key}:#{secret}\""
|
29
|
+
}
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
@@ -1,10 +1,77 @@
|
|
1
1
|
require 'thor'
|
2
|
+
require 'colorize'
|
2
3
|
|
3
4
|
module FlightPlanCli
|
4
5
|
class Initializer < Thor
|
6
|
+
YAML_FILE = '.flight_plan_cli.yml'.freeze
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
parse_yaml
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
5
13
|
desc 'ls', 'List open issues'
|
6
14
|
def ls
|
7
|
-
|
15
|
+
swimlanes = tickets_by_swimlane
|
16
|
+
default_swimlane_ids.each do |swimlane_id|
|
17
|
+
next unless swimlanes.key?(swimlane_id)
|
18
|
+
|
19
|
+
print_swimlane(swimlanes[swimlane_id])
|
20
|
+
end
|
21
|
+
rescue Errno::ECONNREFUSED, SocketError => e
|
22
|
+
# TODO: caching - low timeout (5s) then fallback to cache
|
23
|
+
puts "Network error - #{e.message}".red
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :board_id, :default_swimlane_ids
|
29
|
+
attr_reader :api_url, :api_key, :api_secret
|
30
|
+
|
31
|
+
def parse_yaml
|
32
|
+
unless File.exist?(YAML_FILE)
|
33
|
+
puts "Could not file #{YAML_FILE} file."
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
config = YAML.load_file(YAML_FILE)
|
37
|
+
|
38
|
+
@board_id = config['board_id']
|
39
|
+
@default_swimlane_ids = config['ls']['default_swimlane_ids']
|
40
|
+
|
41
|
+
@api_url = config['api_url']
|
42
|
+
@api_key = config['api_key']
|
43
|
+
@api_secret = config['api_secret']
|
44
|
+
end
|
45
|
+
|
46
|
+
def print_swimlane(swimlane)
|
47
|
+
puts "#{swimlane['name']} (#{swimlane['tickets'].count})".green
|
48
|
+
swimlane['tickets'].each do |ticket|
|
49
|
+
puts "├── #{ticket['remote_number']} : #{ticket['remote_title']}".yellow
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def tickets_by_swimlane
|
54
|
+
response = client.board_tickets(board_id: board_id)
|
55
|
+
|
56
|
+
board = response['board_tickets'].first['board']
|
57
|
+
swimlanes = {}
|
58
|
+
response['board_tickets'].each do |board_ticket|
|
59
|
+
swimlane = board_ticket['swimlane']
|
60
|
+
next unless default_swimlane_ids.include? swimlane['id']
|
61
|
+
|
62
|
+
swimlanes[swimlane['id']] ||= swimlane
|
63
|
+
swimlanes[swimlane['id']]['tickets'] ||= []
|
64
|
+
swimlanes[swimlane['id']]['tickets'] << board_ticket['ticket']
|
65
|
+
end
|
66
|
+
board['swimlanes'] = swimlanes
|
67
|
+
end
|
68
|
+
|
69
|
+
def client
|
70
|
+
@client ||= FlightPlanCli::Api.new(
|
71
|
+
url: api_url,
|
72
|
+
key: api_key,
|
73
|
+
secret: api_secret
|
74
|
+
)
|
8
75
|
end
|
9
76
|
end
|
10
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flight_plan_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Cleary
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.52.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.52.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: version
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: 1.1.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.2.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.2.1
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: colorize
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,7 +190,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
162
190
|
requirements:
|
163
191
|
- - ">="
|
164
192
|
- !ruby/object:Gem::Version
|
165
|
-
version: '2.
|
193
|
+
version: '2.3'
|
166
194
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
195
|
requirements:
|
168
196
|
- - ">="
|