pra 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog.md +6 -0
- data/README.md +9 -0
- data/lib/pra/config.rb +4 -0
- data/lib/pra/curses_pull_request_presenter.rb +53 -0
- data/lib/pra/curses_window_system.rb +6 -4
- data/lib/pra/pull_request.rb +2 -4
- data/lib/pra/version.rb +1 -1
- data/spec/lib/pra/config_spec.rb +8 -0
- data/spec/lib/pra/curses_pull_request_presenter_spec.rb +136 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d8d6958b72e8f36437ec53d445f6f2ebf534109
|
4
|
+
data.tar.gz: aa381045ea18651af3ebc0bec87e0c6257bc92bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b0848e6357f350b38a3d7f48472f339d6a004020aa01f45697014d5a6e2387d172b654f6fbb14d49796b748fe9cdff431f5aa9d0af28a67ce1b0f33f8860d67
|
7
|
+
data.tar.gz: 11cd8fd6da709723581b2e1e3137f278a9e1b0a5f5c5b2ce7d7123653d9edae27cc9b6e016df3ae65d041ef485a5f875607a2bbf27d64d67f02008ea5f8e8900
|
data/ChangeLog.md
CHANGED
@@ -6,6 +6,12 @@ versions as well as provide a rough history.
|
|
6
6
|
|
7
7
|
#### Next Release
|
8
8
|
|
9
|
+
#### v1.2.0
|
10
|
+
|
11
|
+
* Added Assignee blacklisting so that when you have a group user that
|
12
|
+
represents a team assignment it can be blacklisted so that it doesn't show
|
13
|
+
up as assigned.
|
14
|
+
|
9
15
|
#### v1.1.0
|
10
16
|
|
11
17
|
* Added "Assignee" column so that users can see which pull requests have
|
data/README.md
CHANGED
@@ -21,6 +21,11 @@ directory. The following is an example config that can be used as a starter.
|
|
21
21
|
**your.stash.server**, and the **repositories** sections of each of the pull
|
22
22
|
sources.
|
23
23
|
|
24
|
+
#### Assignee Blacklist
|
25
|
+
|
26
|
+
Reduces noise to more easily determine which pull requests are unassigned. Names
|
27
|
+
added will not appear in the assignee column.
|
28
|
+
|
24
29
|
{
|
25
30
|
"pull_sources": [
|
26
31
|
{
|
@@ -49,6 +54,10 @@ sources.
|
|
49
54
|
]
|
50
55
|
}
|
51
56
|
}
|
57
|
+
],
|
58
|
+
"assignee_blacklist": [
|
59
|
+
"IPT-Capture",
|
60
|
+
"IPT-Core Services"
|
52
61
|
]
|
53
62
|
}
|
54
63
|
|
data/lib/pra/config.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'pra/config'
|
2
|
+
|
3
|
+
module Pra
|
4
|
+
class CursesPullRequestPresenter
|
5
|
+
def initialize(pull_request)
|
6
|
+
@pull_request = pull_request
|
7
|
+
end
|
8
|
+
|
9
|
+
def repository
|
10
|
+
force_length(@pull_request.repository, 15)
|
11
|
+
end
|
12
|
+
|
13
|
+
def title
|
14
|
+
force_length(@pull_request.title, 20)
|
15
|
+
end
|
16
|
+
|
17
|
+
def from_reference
|
18
|
+
force_length(@pull_request.from_reference, 20)
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_reference
|
22
|
+
force_length(@pull_request.to_reference, 20)
|
23
|
+
end
|
24
|
+
|
25
|
+
def author
|
26
|
+
force_length(@pull_request.author, 20)
|
27
|
+
end
|
28
|
+
|
29
|
+
def assignee
|
30
|
+
return force_length('', 20) if @pull_request.assignee.nil? || blacklisted?(@pull_request.assignee)
|
31
|
+
force_length(@pull_request.assignee, 20)
|
32
|
+
end
|
33
|
+
|
34
|
+
def service_id
|
35
|
+
force_length(@pull_request.service_id, 10)
|
36
|
+
end
|
37
|
+
|
38
|
+
def assignee_blacklist
|
39
|
+
config = Pra::Config.load_config
|
40
|
+
config.assignee_blacklist
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def force_length(string, length)
|
46
|
+
string.ljust(length)[0..length - 1]
|
47
|
+
end
|
48
|
+
|
49
|
+
def blacklisted?(assignee)
|
50
|
+
assignee_blacklist.include?(assignee)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pra/window_system'
|
2
|
+
require 'pra/curses_pull_request_presenter'
|
2
3
|
require 'pra/config'
|
3
4
|
require 'launchy'
|
4
5
|
require 'curses'
|
@@ -71,7 +72,7 @@ module Pra
|
|
71
72
|
Curses.curs_set(0)
|
72
73
|
Curses.init_pair(1, Curses::COLOR_CYAN, Curses::COLOR_BLACK)
|
73
74
|
end
|
74
|
-
|
75
|
+
|
75
76
|
def output_string(row, col, str)
|
76
77
|
Curses.setpos(row, col)
|
77
78
|
Curses.clrtoeol
|
@@ -114,7 +115,7 @@ module Pra
|
|
114
115
|
output_string(3, 0, "#{@current_pull_requests.length} Pull Requests")
|
115
116
|
output_string(HEADER_LINE, 0, "repository title from_reference to_reference author assignee service")
|
116
117
|
output_string(HEADER_LINE + 1, 0, "-----------------------------------------------------------------------------------------------------------------------------------------------")
|
117
|
-
|
118
|
+
|
118
119
|
(LIST_START_LINE...LIST_START_LINE+@previous_number_of_pull_requests).each do |i|
|
119
120
|
Curses.setpos(i,0)
|
120
121
|
Curses.clrtoeol
|
@@ -122,10 +123,11 @@ module Pra
|
|
122
123
|
end
|
123
124
|
|
124
125
|
@current_pull_requests.each_with_index do |pull_request, index|
|
126
|
+
pull_request_presenter = Pra::CursesPullRequestPresenter.new(pull_request)
|
125
127
|
if index == @selected_pull_request_index
|
126
|
-
output_highlighted_string(LIST_START_LINE + index, 0, "#{
|
128
|
+
output_highlighted_string(LIST_START_LINE + index, 0, "#{pull_request_presenter.repository}\t#{pull_request_presenter.title}\t#{pull_request_presenter.from_reference}\t#{pull_request_presenter.to_reference}\t#{pull_request_presenter.author}\t#{pull_request_presenter.assignee}\t#{pull_request_presenter.service_id}")
|
127
129
|
else
|
128
|
-
output_string(LIST_START_LINE + index, 0, "#{
|
130
|
+
output_string(LIST_START_LINE + index, 0, "#{pull_request_presenter.repository}\t#{pull_request_presenter.title}\t#{pull_request_presenter.from_reference}\t#{pull_request_presenter.to_reference}\t#{pull_request_presenter.author}\t#{pull_request_presenter.assignee}\t#{pull_request_presenter.service_id}")
|
129
131
|
end
|
130
132
|
end
|
131
133
|
}
|
data/lib/pra/pull_request.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'pra/config'
|
2
|
+
|
1
3
|
module Pra
|
2
4
|
class PullRequest
|
3
5
|
attr_accessor :title, :from_reference, :to_reference, :author, :assignee, :link, :service_id, :repository
|
@@ -12,9 +14,5 @@ module Pra
|
|
12
14
|
@service_id = attributes[:service_id]
|
13
15
|
@repository = attributes[:repository]
|
14
16
|
end
|
15
|
-
|
16
|
-
def assignee
|
17
|
-
@assignee || ""
|
18
|
-
end
|
19
17
|
end
|
20
18
|
end
|
data/lib/pra/version.rb
CHANGED
data/spec/lib/pra/config_spec.rb
CHANGED
@@ -134,4 +134,12 @@ describe Pra::Config do
|
|
134
134
|
subject.pull_sources.should eq(pull_source_configs)
|
135
135
|
end
|
136
136
|
end
|
137
|
+
|
138
|
+
describe "#assignee_blacklist" do
|
139
|
+
it "returns the assignee blacklist value out of the config" do
|
140
|
+
assignee_blacklist_configs = double('assignee blacklist configs')
|
141
|
+
subject.instance_variable_set(:@initial_config, { "assignee_blacklist" => assignee_blacklist_configs })
|
142
|
+
subject.assignee_blacklist.should eq(assignee_blacklist_configs)
|
143
|
+
end
|
144
|
+
end
|
137
145
|
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require_relative '../../../lib/pra/curses_pull_request_presenter'
|
2
|
+
|
3
|
+
describe Pra::CursesPullRequestPresenter do
|
4
|
+
describe '.new' do
|
5
|
+
it 'construct given pull request' do
|
6
|
+
pull_request = double('pull request')
|
7
|
+
Pra::CursesPullRequestPresenter.new(pull_request)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'assigns pull request to an instance variable' do
|
11
|
+
pull_request = double('pull request')
|
12
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(pull_request)
|
13
|
+
expect(curses_pull_request.instance_variable_get(:@pull_request)).to eq pull_request
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#force_length' do
|
18
|
+
it 'right pads the given string up to the specified length' do
|
19
|
+
pull_request = double
|
20
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(pull_request)
|
21
|
+
expect(curses_pull_request.send(:force_length, 'capture_api', 15)).to eq 'capture_api '
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'truncates the given string down to the specified length' do
|
25
|
+
pull_request = double
|
26
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(pull_request)
|
27
|
+
expect(curses_pull_request.send(:force_length, 'capture_api_012345678912345', 15)).to eq 'capture_api_012'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#repository' do
|
32
|
+
it 'forces the repository length to 15' do
|
33
|
+
repository = double
|
34
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', repository: repository))
|
35
|
+
expect(curses_pull_request).to receive(:force_length).with(repository, 15)
|
36
|
+
curses_pull_request.repository
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#title' do
|
41
|
+
it 'forces the title length to 20' do
|
42
|
+
title = double
|
43
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', title: title))
|
44
|
+
expect(curses_pull_request).to receive(:force_length).with(title, 20)
|
45
|
+
curses_pull_request.title
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#from_reference' do
|
50
|
+
it 'forces the from_reference length to 20' do
|
51
|
+
from_reference = double
|
52
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', from_reference: from_reference))
|
53
|
+
expect(curses_pull_request).to receive(:force_length).with(from_reference, 20)
|
54
|
+
curses_pull_request.from_reference
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#to_reference' do
|
59
|
+
it 'forces the to_reference length to 20' do
|
60
|
+
to_reference = double
|
61
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', to_reference: to_reference))
|
62
|
+
expect(curses_pull_request).to receive(:force_length).with(to_reference, 20)
|
63
|
+
curses_pull_request.to_reference
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#author' do
|
68
|
+
it 'forces the author length to 20' do
|
69
|
+
author = double
|
70
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', author: author))
|
71
|
+
expect(curses_pull_request).to receive(:force_length).with(author, 20)
|
72
|
+
curses_pull_request.author
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#assignee' do
|
77
|
+
context 'when assignee is nil' do
|
78
|
+
it 'returns an empty string with length of 20' do
|
79
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull_request', assignee: nil))
|
80
|
+
expect(curses_pull_request.assignee).to eq(' '*20)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when assignee is NOT nil' do
|
85
|
+
context 'when assignee is blacklisted' do
|
86
|
+
it 'returns an empty string with length of 20' do
|
87
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull_request', assignee: nil))
|
88
|
+
expect(curses_pull_request.assignee).to eq(' '*20)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'when assignee is NOT blacklisted' do
|
94
|
+
it 'returns assignee with a length of 20' do
|
95
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull_request', assignee: 'IPT-Capture'))
|
96
|
+
allow(curses_pull_request).to receive(:assignee_blacklist).and_return(['IPT'])
|
97
|
+
expect(curses_pull_request.assignee).to eq('IPT-Capture ')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when assignee IS blacklisted' do
|
102
|
+
it 'returns an empty string with length of 20' do
|
103
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull_request', assignee: 'IPT-Capture'))
|
104
|
+
allow(curses_pull_request).to receive(:assignee_blacklist).and_return(['IPT-Capture'])
|
105
|
+
expect(curses_pull_request.assignee).to eq(' '*20)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#service_id' do
|
111
|
+
it 'forces the service_id length to 20' do
|
112
|
+
service_id = double
|
113
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', service_id: service_id))
|
114
|
+
expect(curses_pull_request).to receive(:force_length).with(service_id, 10)
|
115
|
+
curses_pull_request.service_id
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#blacklisted?' do
|
120
|
+
context 'when assignee IS blacklisted' do
|
121
|
+
it 'returns true' do
|
122
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', assignee: 'IPT-Capture'))
|
123
|
+
allow(curses_pull_request).to receive(:assignee_blacklist).and_return(['IPT-Capture'])
|
124
|
+
expect(curses_pull_request.send(:blacklisted?, 'IPT-Capture')).to eq true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'when assignee IS not blacklisted' do
|
129
|
+
it 'returns false' do
|
130
|
+
curses_pull_request = Pra::CursesPullRequestPresenter.new(double('pull request', assignee: 'IPT-Capture'))
|
131
|
+
allow(curses_pull_request).to receive(:assignee_blacklist).and_return(['IPT'])
|
132
|
+
expect(curses_pull_request.send(:blacklisted?, 'IPT-Capture')).to eq false
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew De Ponte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/pra.rb
|
102
102
|
- lib/pra/app.rb
|
103
103
|
- lib/pra/config.rb
|
104
|
+
- lib/pra/curses_pull_request_presenter.rb
|
104
105
|
- lib/pra/curses_window_system.rb
|
105
106
|
- lib/pra/error_log.rb
|
106
107
|
- lib/pra/github_pull_source.rb
|
@@ -116,6 +117,7 @@ files:
|
|
116
117
|
- pra.gemspec
|
117
118
|
- spec/lib/pra/app_spec.rb
|
118
119
|
- spec/lib/pra/config_spec.rb
|
120
|
+
- spec/lib/pra/curses_pull_request_presenter_spec.rb
|
119
121
|
- spec/lib/pra/curses_window_system_spec.rb
|
120
122
|
- spec/lib/pra/error_log_spec.rb
|
121
123
|
- spec/lib/pra/github_pull_source_spec.rb
|
@@ -155,6 +157,7 @@ summary: CLI tool that shows open pull-requests across systems.
|
|
155
157
|
test_files:
|
156
158
|
- spec/lib/pra/app_spec.rb
|
157
159
|
- spec/lib/pra/config_spec.rb
|
160
|
+
- spec/lib/pra/curses_pull_request_presenter_spec.rb
|
158
161
|
- spec/lib/pra/curses_window_system_spec.rb
|
159
162
|
- spec/lib/pra/error_log_spec.rb
|
160
163
|
- spec/lib/pra/github_pull_source_spec.rb
|