octokom 0.0.2 → 0.0.3
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 +1 -0
- data/.rspec +0 -1
- data/.travis.yml +8 -1
- data/LICENSE.txt +1 -1
- data/README.md +11 -3
- data/bin/octokom +1 -1
- data/lib/octokom.rb +8 -12
- data/lib/octokom/cli.rb +6 -0
- data/lib/octokom/client.rb +99 -0
- data/lib/octokom/command.rb +65 -2
- data/lib/octokom/command/issue.rb +26 -0
- data/lib/octokom/command/pull_request.rb +31 -22
- data/lib/octokom/core_ext/blank.rb +51 -0
- data/lib/octokom/editor.rb +106 -0
- data/lib/octokom/repository.rb +59 -24
- data/lib/octokom/shell.rb +22 -0
- data/lib/octokom/version.rb +1 -1
- data/octokom.gemspec +8 -6
- data/spec/octokom/cli_spec.rb +13 -0
- data/spec/octokom/client_spec.rb +67 -0
- data/spec/octokom/command/issue_spec.rb +58 -0
- data/spec/octokom/command/pull_request_spec.rb +3 -4
- data/spec/octokom/command_spec.rb +56 -3
- data/spec/octokom/editor_spec.rb +33 -0
- data/spec/octokom/repository_spec.rb +62 -5
- data/spec/octokom/shell_spec.rb +54 -0
- data/spec/spec_helper.rb +7 -1
- data/spec/support/OCTOKOM-123 +11 -0
- data/spec/support/git_branch_no_pending_commits.txt +5 -0
- data/spec/support/git_branch_no_remote.txt +5 -0
- data/spec/support/git_branch_pending_commits.txt +5 -0
- data/spec/support/git_log_commits.txt +1 -0
- metadata +59 -42
- data/lib/octokom/authentication.rb +0 -42
- data/lib/octokom/keychain.rb +0 -54
- data/spec/octokom/authentication_spec.rb +0 -25
- data/spec/octokom/keychain_spec.rb +0 -45
- data/spec/octokom_spec.rb +0 -8
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Cli
|
4
|
+
include Octokom::Shell
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Octokom::Shell do
|
8
|
+
let(:stdout) { double }
|
9
|
+
|
10
|
+
subject(:cli) { Cli.new }
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(cli).to receive(:puts) do |msg|
|
14
|
+
stdout.puts(msg)
|
15
|
+
end
|
16
|
+
|
17
|
+
allow(cli).to receive(:print) do |msg|
|
18
|
+
stdout.print(msg)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.info' do
|
23
|
+
it 'prints a message' do
|
24
|
+
expect(stdout).to receive(:puts).with('Info Test')
|
25
|
+
cli.info('Test')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.error' do
|
30
|
+
it 'prints a message and returns with an error code' do
|
31
|
+
expect(stdout).to receive(:puts).with('Error Test')
|
32
|
+
expect { cli.error('Test') }.to raise_error(SystemExit)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.task' do
|
37
|
+
before do
|
38
|
+
allow(stdout).to receive(:print)
|
39
|
+
allow(stdout).to receive(:puts)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'updates a message' do
|
43
|
+
expect(stdout).to receive(:print).with('Waiting Test')
|
44
|
+
expect(stdout).to receive(:print).with("\r")
|
45
|
+
expect(stdout).to receive(:print).with('Done Test')
|
46
|
+
expect(stdout).to receive(:puts).with(nil)
|
47
|
+
cli.task('Test') { 'Ok' }
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'executes a task' do
|
51
|
+
expect { |block| cli.task('Test', &block) }.to yield_with_no_args
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,4 +2,10 @@ lib = File.expand_path('../../lib', __FILE__)
|
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
|
4
4
|
require 'octokom'
|
5
|
-
require 'rspec
|
5
|
+
require 'rspec'
|
6
|
+
|
7
|
+
ENV['HOME'] = './spec/support'
|
8
|
+
|
9
|
+
def load_example(file_name)
|
10
|
+
open("#{ENV['HOME']}/#{file_name}.txt", &:read)
|
11
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
aec653e Add all the features
|
metadata
CHANGED
@@ -1,115 +1,126 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: octokom
|
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
|
- Martin Jagusch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.6.
|
19
|
+
version: 0.6.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.6.
|
26
|
+
version: 0.6.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: netrc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.7.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.7.7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: octokit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.7.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.7.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 10.1.
|
61
|
+
version: 10.1.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 10.1.
|
68
|
+
version: 10.1.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 3.0.0.beta2
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
description:
|
82
|
+
version: 3.0.0.beta2
|
83
|
+
description: GitHub For Your Command Line
|
84
84
|
email: _@mj.io
|
85
85
|
executables:
|
86
86
|
- octokom
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- .gitignore
|
91
|
-
- .rspec
|
92
|
-
- .travis.yml
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".travis.yml"
|
93
93
|
- Gemfile
|
94
94
|
- LICENSE.txt
|
95
95
|
- README.md
|
96
96
|
- Rakefile
|
97
97
|
- bin/octokom
|
98
98
|
- lib/octokom.rb
|
99
|
-
- lib/octokom/
|
99
|
+
- lib/octokom/cli.rb
|
100
|
+
- lib/octokom/client.rb
|
100
101
|
- lib/octokom/command.rb
|
102
|
+
- lib/octokom/command/issue.rb
|
101
103
|
- lib/octokom/command/pull_request.rb
|
102
|
-
- lib/octokom/
|
104
|
+
- lib/octokom/core_ext/blank.rb
|
105
|
+
- lib/octokom/editor.rb
|
103
106
|
- lib/octokom/repository.rb
|
107
|
+
- lib/octokom/shell.rb
|
104
108
|
- lib/octokom/version.rb
|
105
109
|
- octokom.gemspec
|
106
|
-
- spec/octokom/
|
110
|
+
- spec/octokom/cli_spec.rb
|
111
|
+
- spec/octokom/client_spec.rb
|
112
|
+
- spec/octokom/command/issue_spec.rb
|
107
113
|
- spec/octokom/command/pull_request_spec.rb
|
108
114
|
- spec/octokom/command_spec.rb
|
109
|
-
- spec/octokom/
|
115
|
+
- spec/octokom/editor_spec.rb
|
110
116
|
- spec/octokom/repository_spec.rb
|
111
|
-
- spec/
|
117
|
+
- spec/octokom/shell_spec.rb
|
112
118
|
- spec/spec_helper.rb
|
119
|
+
- spec/support/OCTOKOM-123
|
120
|
+
- spec/support/git_branch_no_pending_commits.txt
|
121
|
+
- spec/support/git_branch_no_remote.txt
|
122
|
+
- spec/support/git_branch_pending_commits.txt
|
123
|
+
- spec/support/git_log_commits.txt
|
113
124
|
homepage: https://github.com/mjio/octokom
|
114
125
|
licenses:
|
115
126
|
- MIT
|
@@ -120,26 +131,32 @@ require_paths:
|
|
120
131
|
- lib
|
121
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|
122
133
|
requirements:
|
123
|
-
- -
|
134
|
+
- - ">="
|
124
135
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
136
|
+
version: 1.9.3
|
126
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
138
|
requirements:
|
128
|
-
- -
|
139
|
+
- - ">="
|
129
140
|
- !ruby/object:Gem::Version
|
130
141
|
version: '0'
|
131
142
|
requirements: []
|
132
143
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.0
|
144
|
+
rubygems_version: 2.2.0
|
134
145
|
signing_key:
|
135
146
|
specification_version: 4
|
136
|
-
summary: octokom-0.0.
|
147
|
+
summary: octokom-0.0.3
|
137
148
|
test_files:
|
138
|
-
- spec/octokom/
|
149
|
+
- spec/octokom/cli_spec.rb
|
150
|
+
- spec/octokom/client_spec.rb
|
151
|
+
- spec/octokom/command/issue_spec.rb
|
139
152
|
- spec/octokom/command/pull_request_spec.rb
|
140
153
|
- spec/octokom/command_spec.rb
|
141
|
-
- spec/octokom/
|
154
|
+
- spec/octokom/editor_spec.rb
|
142
155
|
- spec/octokom/repository_spec.rb
|
143
|
-
- spec/
|
156
|
+
- spec/octokom/shell_spec.rb
|
144
157
|
- spec/spec_helper.rb
|
145
|
-
|
158
|
+
- spec/support/OCTOKOM-123
|
159
|
+
- spec/support/git_branch_no_pending_commits.txt
|
160
|
+
- spec/support/git_branch_no_remote.txt
|
161
|
+
- spec/support/git_branch_pending_commits.txt
|
162
|
+
- spec/support/git_log_commits.txt
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'io/console'
|
2
|
-
|
3
|
-
module Octokom
|
4
|
-
module Authentication
|
5
|
-
OCTOKIT_ERRORS = [
|
6
|
-
Octokit::BadRequest,
|
7
|
-
Octokit::Unauthorized,
|
8
|
-
Octokit::Forbidden,
|
9
|
-
Octokit::NotFound,
|
10
|
-
Octokit::NotAcceptable,
|
11
|
-
Octokit::UnprocessableEntity,
|
12
|
-
Octokit::InternalServerError,
|
13
|
-
Octokit::NotImplemented,
|
14
|
-
Octokit::BadGateway,
|
15
|
-
Octokit::ServiceUnavailable
|
16
|
-
]
|
17
|
-
|
18
|
-
def authenticate(&block)
|
19
|
-
begin
|
20
|
-
yield Octokit::Client.new(login: login, password: password)
|
21
|
-
rescue *OCTOKIT_ERRORS => e
|
22
|
-
puts "Unable to authenticate user '#{login}' (#{e.class})"
|
23
|
-
# TODO print message about how to reenter credentials
|
24
|
-
# TODO use custom method instead of puts
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def login
|
31
|
-
keychain[:login]
|
32
|
-
end
|
33
|
-
|
34
|
-
def password
|
35
|
-
keychain[:password]
|
36
|
-
end
|
37
|
-
|
38
|
-
def keychain
|
39
|
-
Octokom::Keychain.create
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/lib/octokom/keychain.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
module Octokom
|
2
|
-
class Keychain
|
3
|
-
def self.create
|
4
|
-
new.find_or_create_keychain
|
5
|
-
end
|
6
|
-
|
7
|
-
def find_or_create_keychain
|
8
|
-
if keychain
|
9
|
-
{login: keychain.attributes['acct'], password: keychain.password}
|
10
|
-
else
|
11
|
-
create_octokom_keychain
|
12
|
-
find_or_create_keychain
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def keychain
|
19
|
-
# TODO make sure this happens only once
|
20
|
-
@keychain ||= octokom_keychain || github_keychain
|
21
|
-
end
|
22
|
-
|
23
|
-
def octokom_keychain
|
24
|
-
Security::GenericPassword.find(service: 'octokom')
|
25
|
-
end
|
26
|
-
|
27
|
-
def github_keychain
|
28
|
-
Security::InternetPassword.find(server: 'github.com')
|
29
|
-
end
|
30
|
-
|
31
|
-
def create_octokom_keychain
|
32
|
-
login = ask_for_login
|
33
|
-
password = ask_for_password
|
34
|
-
|
35
|
-
puts
|
36
|
-
|
37
|
-
save_octokom_keychain(login, password)
|
38
|
-
end
|
39
|
-
|
40
|
-
def ask_for_login
|
41
|
-
print 'GitHub Login: '
|
42
|
-
STDIN.gets.chomp
|
43
|
-
end
|
44
|
-
|
45
|
-
def ask_for_password
|
46
|
-
print 'Password: '
|
47
|
-
STDIN.noecho(&:gets).chomp
|
48
|
-
end
|
49
|
-
|
50
|
-
def save_octokom_keychain(login, password)
|
51
|
-
Security::GenericPassword.add('octokom', login, password)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class Cmd
|
4
|
-
include Octokom::Authentication
|
5
|
-
end
|
6
|
-
|
7
|
-
describe Octokom::Authentication do
|
8
|
-
let(:cmd) { Cmd.new }
|
9
|
-
let(:keychain) { {login: 'fox', password: 'bacon'} }
|
10
|
-
|
11
|
-
before do
|
12
|
-
allow(cmd).to receive(:keychain) { keychain }
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'authenticates the user' do
|
16
|
-
credentials = {login: 'fox', password: 'bacon'}
|
17
|
-
expect(Octokit::Client).to receive(:new).with(credentials)
|
18
|
-
cmd.authenticate { }
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'handels exceptions' do
|
22
|
-
expect(STDOUT).to receive(:puts).with(/Unable to authenticate/)
|
23
|
-
cmd.authenticate { raise Octokit::Unauthorized }
|
24
|
-
end
|
25
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Octokom::Keychain do
|
4
|
-
let(:keychain) { double(attributes: {'acct' => 'fox'}, password: 'bacon') }
|
5
|
-
|
6
|
-
before do
|
7
|
-
allow(Security::GenericPassword).to receive(:find) { nil }
|
8
|
-
allow(Security::GenericPassword).to receive(:add) { nil }
|
9
|
-
allow(Security::InternetPassword).to receive(:find) { nil }
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'using existing `octokom` keychain' do
|
13
|
-
before do
|
14
|
-
allow(Security::GenericPassword).to receive(:find).with(service: 'octokom') { keychain }
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'finds the keychain' do
|
18
|
-
expect(Octokom::Keychain.create).to eq(login: 'fox', password: 'bacon')
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'using existing `github` keychain' do
|
23
|
-
before do
|
24
|
-
allow(Security::InternetPassword).to receive(:find).with(server: 'github.com') { keychain }
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'finds the keychain' do
|
28
|
-
expect(Octokom::Keychain.create).to eq(login: 'fox', password: 'bacon')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'creating new `github` keychain' do
|
33
|
-
before do
|
34
|
-
Octokom::Keychain.any_instance.stub(:ask_for_login).and_return('fox')
|
35
|
-
Octokom::Keychain.any_instance.stub(:ask_for_password).and_return('bacon')
|
36
|
-
allow(STDOUT).to receive(:puts)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'saves a keychain' do
|
40
|
-
pending 'prevent retry'
|
41
|
-
expect(Security::GenericPassword).to receive(:add).with('octokom', 'fox', 'bacon')
|
42
|
-
Octokom::Keychain.create
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|