errbit_github_plugin 0.2.0 → 0.3.0
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/.gitignore +3 -0
- data/.travis.yml +9 -0
- data/Gemfile +0 -8
- data/README.md +5 -27
- data/errbit_github_plugin.gemspec +15 -10
- data/lib/errbit_github_plugin/issue_tracker.rb +18 -0
- data/lib/errbit_github_plugin/version.rb +1 -1
- data/spec/issue_tracker_spec.rb +156 -0
- data/spec/spec_helper.rb +28 -0
- metadata +84 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03e8b522abb3f21ad344c7fc8daa4f3488858567
|
4
|
+
data.tar.gz: 14c8b3453aa7376a0addec27428516d261c8ad67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbb84ca9d1757a665200ce84e57f87d6be39f9ca3f949e90a66b5ad961e691195512da8401b83322e0bb901d8c5205ea0f8c634325bed4b9c7728e0af2cc1f51
|
7
|
+
data.tar.gz: 82c69cfe8522e76c4eb4a0e53fa0b4b62af7763a0c2cccfa7fe39cfe0ec4fcd9032e0ec96eecd68a339ce4aacdb0812730905c1f72f991a0ec1943038778df42
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,10 +1,2 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in errbit_github_plugin.gemspec
|
4
2
|
gemspec
|
5
|
-
|
6
|
-
gem 'errbit_plugin', :git => 'https://github.com/errbit/errbit_plugin.git'
|
7
|
-
gem 'rspec'
|
8
|
-
gem 'guard'
|
9
|
-
gem 'guard-rspec'
|
10
|
-
gem 'coveralls', :require => false
|
data/README.md
CHANGED
@@ -1,29 +1,7 @@
|
|
1
|
-
#
|
1
|
+
# Errbit Github Plugin [![TravisCI][travis-img-url]][travis-ci-url]
|
2
2
|
|
3
|
-
|
3
|
+
[travis-img-url]: https://travis-ci.org/errbit/errbit_github_plugin.svg?branch=master
|
4
|
+
[travis-ci-url]: http://travis-ci.org/errbit/errbit_github_plugin
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
-
|
9
|
-
gem 'errbit_github_plugin'
|
10
|
-
|
11
|
-
And then execute:
|
12
|
-
|
13
|
-
$ bundle
|
14
|
-
|
15
|
-
Or install it yourself as:
|
16
|
-
|
17
|
-
$ gem install errbit_github_plugin
|
18
|
-
|
19
|
-
## Usage
|
20
|
-
|
21
|
-
TODO: Write usage instructions here
|
22
|
-
|
23
|
-
## Contributing
|
24
|
-
|
25
|
-
1. Fork it
|
26
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5. Create new Pull Request
|
6
|
+
This plugin provides GitHub issue tracker integration for Errbit and it is the
|
7
|
+
only plugin included by default in Errbit.
|
@@ -4,24 +4,29 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'errbit_github_plugin/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'errbit_github_plugin'
|
8
8
|
spec.version = ErrbitGithubPlugin::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Stephen Crosby']
|
10
|
+
spec.email = ['stevecrozz@gmail.com']
|
11
11
|
|
12
12
|
spec.description = %q{GitHub integration for Errbit}
|
13
13
|
spec.summary = %q{GitHub integration for Errbit}
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
14
|
+
spec.homepage = 'https://github.com/errbit/errbit_github_plugin'
|
15
|
+
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.files = `git ls-files`.split($/)
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_dependency
|
23
|
-
spec.add_dependency
|
22
|
+
spec.add_dependency 'errbit_plugin'
|
23
|
+
spec.add_dependency 'octokit'
|
24
24
|
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
|
+
spec.add_development_dependency 'guard'
|
27
|
+
spec.add_development_dependency 'guard-rspec'
|
28
|
+
spec.add_development_dependency 'coveralls'
|
29
|
+
spec.add_development_dependency 'bundler'
|
30
|
+
spec.add_development_dependency 'rake'
|
31
|
+
spec.add_development_dependency 'activesupport'
|
27
32
|
end
|
@@ -82,5 +82,23 @@ module ErrbitGithubPlugin
|
|
82
82
|
rescue Octokit::Unauthorized
|
83
83
|
raise ErrbitGithubPlugin::AuthenticationError, "Could not authenticate with GitHub. Please check your username and password."
|
84
84
|
end
|
85
|
+
|
86
|
+
def close_issue(url, user: {})
|
87
|
+
if user['github_login'] && user['github_oauth_token']
|
88
|
+
github_client = Octokit::Client.new(
|
89
|
+
login: user['github_login'], access_token: user['github_oauth_token'])
|
90
|
+
else
|
91
|
+
github_client = Octokit::Client.new(
|
92
|
+
login: options['username'], password: options['password'])
|
93
|
+
end
|
94
|
+
# It would be better to get the number from issue.number when we create the issue,
|
95
|
+
# however, since we only have the url, get the number from it.
|
96
|
+
# ex: "https://github.com/octocat/Hello-World/issues/1347"
|
97
|
+
issue_number = url.split("/").last
|
98
|
+
issue = github_client.close_issue(repo, issue_number)
|
99
|
+
issue.html_url
|
100
|
+
rescue Octokit::Unauthorized
|
101
|
+
raise ErrbitGithubPlugin::AuthenticationError, "Could not authenticate with GitHub. Please check your username and password."
|
102
|
+
end
|
85
103
|
end
|
86
104
|
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
describe ErrbitGithubPlugin::IssueTracker do
|
2
|
+
describe '.label' do
|
3
|
+
it 'return LABEL' do
|
4
|
+
expect(described_class.label).to eq described_class::LABEL
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '.note' do
|
9
|
+
it 'return NOTE' do
|
10
|
+
expect(described_class.note).to eq described_class::NOTE
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.fields' do
|
15
|
+
it 'return FIELDS' do
|
16
|
+
expect(described_class.fields).to eq described_class::FIELDS
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.icons' do
|
21
|
+
|
22
|
+
it 'puts create icon onto the icons' do
|
23
|
+
expect(described_class.icons[:create][0]).to eq 'image/png'
|
24
|
+
expect(
|
25
|
+
described_class.icons[:create][1]
|
26
|
+
).to eq ErrbitGithubPlugin.read_static_file('github_create.png')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'puts goto icon onto the icons' do
|
30
|
+
expect(described_class.icons[:goto][0]).to eq 'image/png'
|
31
|
+
expect(
|
32
|
+
described_class.icons[:goto][1]
|
33
|
+
).to eq ErrbitGithubPlugin.read_static_file('github_goto.png')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'puts inactive icon onto the icons' do
|
37
|
+
expect(described_class.icons[:inactive][0]).to eq 'image/png'
|
38
|
+
expect(
|
39
|
+
described_class.icons[:inactive][1]
|
40
|
+
).to eq ErrbitGithubPlugin.read_static_file('github_inactive.png')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:tracker) { described_class.new(options) }
|
45
|
+
|
46
|
+
describe '#configured?' do
|
47
|
+
context 'with errors' do
|
48
|
+
let(:options) { { invalid_key: '' } }
|
49
|
+
it 'return false' do
|
50
|
+
expect(tracker.configured?).to eq false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
context 'without errors' do
|
54
|
+
let(:options) do
|
55
|
+
{ username: 'foo', password: 'bar', github_repo: 'user/repos' }
|
56
|
+
end
|
57
|
+
it 'return true' do
|
58
|
+
expect(tracker.configured?).to eq true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#url' do
|
64
|
+
let(:options) { { github_repo: 'repo' } }
|
65
|
+
it 'returns issues url' do
|
66
|
+
expect(tracker.url).to eq 'https://github.com/repo/issues'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#errors' do
|
71
|
+
subject { tracker.errors }
|
72
|
+
context 'without username' do
|
73
|
+
let(:options) { { username: '', password: 'bar', github_repo: 'repo' } }
|
74
|
+
it { is_expected.not_to be_empty }
|
75
|
+
end
|
76
|
+
context 'without password' do
|
77
|
+
let(:options) do
|
78
|
+
{ username: '', password: 'bar', github_repo: 'repo' }
|
79
|
+
end
|
80
|
+
it { is_expected.not_to be_empty }
|
81
|
+
end
|
82
|
+
context 'without github_repo' do
|
83
|
+
let(:options) do
|
84
|
+
{ username: 'foo', password: 'bar', github_repo: '' }
|
85
|
+
end
|
86
|
+
it { is_expected.not_to be_empty }
|
87
|
+
end
|
88
|
+
context 'with completed options' do
|
89
|
+
let(:options) do
|
90
|
+
{ username: 'foo', password: 'bar', github_repo: 'repo' }
|
91
|
+
end
|
92
|
+
it { is_expected.to be_empty }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#repo' do
|
97
|
+
let(:options) { { github_repo: 'baz' } }
|
98
|
+
it 'returns github repo' do
|
99
|
+
expect(tracker.repo).to eq 'baz'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#create_issue' do
|
104
|
+
subject { tracker.create_issue('title', 'body', user: user) }
|
105
|
+
let(:options) do
|
106
|
+
{ username: 'foo', password: 'bar', github_repo: 'user/repos' }
|
107
|
+
end
|
108
|
+
let(:fake_github_client) do
|
109
|
+
double('Fake GitHub Client').tap do |github_client|
|
110
|
+
github_client.stub(:create_issue).and_return(fake_issue)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
let(:fake_issue) do
|
114
|
+
double('Fake Issue').tap do |issue|
|
115
|
+
issue.stub(:html_url).and_return('http://github.com/user/repos/issues/878')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'signed in with token' do
|
120
|
+
let(:user) do
|
121
|
+
{
|
122
|
+
'github_login' => 'bob',
|
123
|
+
'github_oauth_token' => 'valid_token'
|
124
|
+
}
|
125
|
+
end
|
126
|
+
it 'return issue url' do
|
127
|
+
Octokit::Client.stub(:new).with(
|
128
|
+
login: user['github_login'], access_token: user['github_oauth_token']
|
129
|
+
).and_return(fake_github_client)
|
130
|
+
expect(subject).to eq fake_issue.html_url
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'signed in with password' do
|
135
|
+
let(:user) { {} }
|
136
|
+
it 'return issue url' do
|
137
|
+
(Octokit::Client).stub(:new).with(
|
138
|
+
login: options['username'], password: options['password']
|
139
|
+
).and_return(fake_github_client)
|
140
|
+
expect(subject).to eq fake_issue.html_url
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'when unauthentication error' do
|
145
|
+
let(:user) do
|
146
|
+
{ 'github_login' => 'alice', 'github_oauth_token' => 'invalid_token' }
|
147
|
+
end
|
148
|
+
it 'raise AuthenticationError' do
|
149
|
+
(Octokit::Client).stub(:new).with(
|
150
|
+
login: user['github_login'], access_token: user['github_oauth_token']
|
151
|
+
).and_raise(Octokit::Unauthorized)
|
152
|
+
expect { subject }.to raise_error
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
if ENV['COVERAGE']
|
2
|
+
require 'simplecov'
|
3
|
+
if ENV['CI']
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
7
|
+
SimpleCov::Formatter::HTMLFormatter,
|
8
|
+
Coveralls::SimpleCov::Formatter
|
9
|
+
]
|
10
|
+
end
|
11
|
+
|
12
|
+
SimpleCov.start
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'errbit_plugin'
|
16
|
+
require 'errbit_github_plugin'
|
17
|
+
require 'active_support/all'
|
18
|
+
|
19
|
+
RSpec.configure do |config|
|
20
|
+
config.run_all_when_everything_filtered = true
|
21
|
+
config.filter_run :focus
|
22
|
+
|
23
|
+
# Run specs in random order to surface order dependencies. If you find an
|
24
|
+
# order dependency and want to debug it, you can fix the order by providing
|
25
|
+
# the seed, which is printed after each run.
|
26
|
+
# --seed 1234
|
27
|
+
config.order = 'random'
|
28
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: errbit_github_plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Crosby
|
8
|
-
- Cyril Mougel
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-03-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: errbit_plugin
|
@@ -39,20 +38,76 @@ dependencies:
|
|
39
38
|
- - ">="
|
40
39
|
- !ruby/object:Gem::Version
|
41
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: coveralls
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
42
97
|
- !ruby/object:Gem::Dependency
|
43
98
|
name: bundler
|
44
99
|
requirement: !ruby/object:Gem::Requirement
|
45
100
|
requirements:
|
46
|
-
- - "
|
101
|
+
- - ">="
|
47
102
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
103
|
+
version: '0'
|
49
104
|
type: :development
|
50
105
|
prerelease: false
|
51
106
|
version_requirements: !ruby/object:Gem::Requirement
|
52
107
|
requirements:
|
53
|
-
- - "
|
108
|
+
- - ">="
|
54
109
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
110
|
+
version: '0'
|
56
111
|
- !ruby/object:Gem::Dependency
|
57
112
|
name: rake
|
58
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,15 +122,30 @@ dependencies:
|
|
67
122
|
- - ">="
|
68
123
|
- !ruby/object:Gem::Version
|
69
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activesupport
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
70
139
|
description: GitHub integration for Errbit
|
71
140
|
email:
|
72
141
|
- stevecrozz@gmail.com
|
73
|
-
- cyril.mougel@gmail.com
|
74
142
|
executables: []
|
75
143
|
extensions: []
|
76
144
|
extra_rdoc_files: []
|
77
145
|
files:
|
78
146
|
- ".gitignore"
|
147
|
+
- ".rspec"
|
148
|
+
- ".travis.yml"
|
79
149
|
- Gemfile
|
80
150
|
- LICENSE.txt
|
81
151
|
- README.md
|
@@ -85,12 +155,14 @@ files:
|
|
85
155
|
- lib/errbit_github_plugin/error.rb
|
86
156
|
- lib/errbit_github_plugin/issue_tracker.rb
|
87
157
|
- lib/errbit_github_plugin/version.rb
|
158
|
+
- spec/issue_tracker_spec.rb
|
159
|
+
- spec/spec_helper.rb
|
88
160
|
- static/github_create.png
|
89
161
|
- static/github_goto.png
|
90
162
|
- static/github_inactive.png
|
91
163
|
- vendor/assets/images/github_create.png
|
92
164
|
- vendor/assets/images/github_inactive.png
|
93
|
-
homepage: https://github.com/
|
165
|
+
homepage: https://github.com/errbit/errbit_github_plugin
|
94
166
|
licenses:
|
95
167
|
- MIT
|
96
168
|
metadata: {}
|
@@ -114,5 +186,7 @@ rubygems_version: 2.2.2
|
|
114
186
|
signing_key:
|
115
187
|
specification_version: 4
|
116
188
|
summary: GitHub integration for Errbit
|
117
|
-
test_files:
|
189
|
+
test_files:
|
190
|
+
- spec/issue_tracker_spec.rb
|
191
|
+
- spec/spec_helper.rb
|
118
192
|
has_rdoc:
|