github-auth 2.0.0 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc5ca2cbe7d8acf279d3b54a335e34432cbce149
4
- data.tar.gz: 24ecd142974160d3205ff3da30c823a179fe69d3
3
+ metadata.gz: 4820a1741b347219adce20aeebf63d1082b19894
4
+ data.tar.gz: 6b28fd0ecbbbbc6fdde94fac117f28dc0683f64b
5
5
  SHA512:
6
- metadata.gz: fa37238d36f4d2dc35ee8b51e9b09f34edea0012f00fa5dfe3bf0ac1d934d302d6ace5377f486b9c5ab692c48bf5432463fc6a9b661c71e0315cd60dfc4e26bf
7
- data.tar.gz: a650e4290cfd5a0d53cc86896af98909dce3f4bdb5c1019f3331fadbce4e98b1d525ec34045863318f5cc33bff3f9e2fe514167f5c172f7a2e34efc62f13f703
6
+ metadata.gz: 70137debed74f2596644550f765f4dfb9ea006251eda640d28a26e6664909ffcaf50923e0a00d29ec785df7413ccec2d19cc2e407d986ff28c0d13dee49c65d3
7
+ data.tar.gz: a804be8659549eb4762e58652ef34a4361124d14193558be46d1fd2af026254efafa8556091ba938d19207ffbe5bf1308742e27ee274325947dbe5e9293cd1fb
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ##v3.0.0
4
+ *2013-10-24*
5
+
6
+ [\[19 commits\]](https://github.com/chrishunt/github-auth/compare/v2.0.0...v3.0.0)
7
+
8
+ *note:* CLI syntax has changed in this release as a result of switching to
9
+ [`Thor`](https://github.com/erikhuda/thor). See the
10
+ [`README`](https://github.com/chrishunt/github-auth/blob/master/README.md) for
11
+ usage instructions.
12
+
13
+ - [Use `Thor` for parsing CLI options](https://github.com/chrishunt/github-auth/pull/18)
14
+ - [Add `--command` option for custom ssh commands](https://github.com/chrishunt/github-auth/pull/18)
15
+
3
16
  ##v2.0.0
4
17
  *2013-10-22*
5
18
 
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- github-auth (2.0.0)
4
+ github-auth (3.0.0)
5
5
  httparty (~> 0.11.0)
6
+ thor (~> 0.18)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -11,6 +12,7 @@ GEM
11
12
  parallel
12
13
  cane-hashcheck (1.2.0)
13
14
  cane
15
+ coderay (1.0.9)
14
16
  colorize (0.5.8)
15
17
  coveralls (0.6.7)
16
18
  colorize
@@ -24,10 +26,15 @@ GEM
24
26
  httparty (0.11.0)
25
27
  multi_json (~> 1.0)
26
28
  multi_xml (>= 0.5.2)
29
+ method_source (0.8.2)
27
30
  mime-types (1.24)
28
31
  multi_json (1.7.9)
29
32
  multi_xml (0.5.5)
30
33
  parallel (0.9.0)
34
+ pry (0.9.12.2)
35
+ coderay (~> 1.0.5)
36
+ method_source (~> 0.8)
37
+ slop (~> 3.4)
31
38
  rack (1.5.2)
32
39
  rack-protection (1.5.0)
33
40
  rack
@@ -50,6 +57,7 @@ GEM
50
57
  rack (~> 1.4)
51
58
  rack-protection (~> 1.4)
52
59
  tilt (~> 1.3, >= 1.3.4)
60
+ slop (3.4.6)
53
61
  thin (1.5.1)
54
62
  daemons (>= 1.0.9)
55
63
  eventmachine (>= 0.12.6)
@@ -66,6 +74,7 @@ DEPENDENCIES
66
74
  cane-hashcheck (~> 1.2.0)
67
75
  coveralls (~> 0.6.7)
68
76
  github-auth!
77
+ pry (~> 0.9.12)
69
78
  rake (~> 10.1.0)
70
79
  rspec (~> 2.14)
71
80
  sinatra (~> 1.4.3)
data/README.md CHANGED
@@ -23,37 +23,45 @@ After you've [installed](#installation) `gh-auth`, you can give me ssh access
23
23
  with:
24
24
 
25
25
  ```bash
26
- $ gh-auth --add chrishunt
26
+ $ gh-auth add --users=chrishunt
27
+ Adding 2 key(s) to '/Users/chris/.ssh/authorized_keys'
28
+ ```
29
+
30
+ If you'd like me to automatically connect to your existing tmux session, you
31
+ can do that with a custom ssh command:
32
+
33
+ ```bash
34
+ $ gh-auth add --users=chrishunt --command="tmux attach"
27
35
  Adding 2 key(s) to '/Users/chris/.ssh/authorized_keys'
28
36
  ```
29
37
 
30
38
  That was easy! When we're done working, you can revoke my access with:
31
39
 
32
40
  ```bash
33
- $ gh-auth --remove chrishunt
41
+ $ gh-auth remove --users=chrishunt
34
42
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
35
43
  ```
36
44
 
37
45
  You can add and remove any number of users at the same time.
38
46
 
39
47
  ```bash
40
- $ gh-auth --add chrishunt,zachmargolis
48
+ $ gh-auth add --users=chrishunt zachmargolis
41
49
  Adding 4 key(s) to '/Users/chris/.ssh/authorized_keys'
42
50
 
43
- $ gh-auth --list
44
- Added users: chrishunt, zachmargolis
51
+ $ gh-auth list
52
+ chrishunt zachmargolis
45
53
 
46
- $ gh-auth --remove chrishunt
54
+ $ gh-auth remove --users=chrishunt
47
55
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
48
56
 
49
- $ gh-auth --list
50
- Added users: zachmargolis
57
+ $ gh-auth list
58
+ zachmargolis
51
59
 
52
- $ gh-auth --remove zachmargolis
60
+ $ gh-auth remove --users=zachmargolis
53
61
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
54
62
 
55
- $ gh-auth --list
56
- Added users:
63
+ $ gh-auth list
64
+
57
65
  ```
58
66
 
59
67
  ## Sections
@@ -80,14 +88,42 @@ Added users:
80
88
 
81
89
  `gh-auth` can be used from the command line after the gem has been installed.
82
90
 
83
- ```bash
84
- usage: gh-auth [--version] [--list] [--add|--remove] <username>
91
+ ```
92
+ $ gh-auth
93
+ Commands:
94
+ gh-auth add --users=one two three # Add GitHub users to authorized keys
95
+ gh-auth help [COMMAND] # Describe available commands or one specific command
96
+ gh-auth list # List all GitHub users already added to authorized keys
97
+ gh-auth remove --users=one two three # Remove GitHub users from authorized keys
98
+ gh-auth version # Show gh-auth version
99
+
100
+ Options:
101
+ [--host=HOST]
102
+ [--path=PATH]
103
+ ```
85
104
 
86
- options:
87
- --add doug,sally Add GitHub users
88
- --remove doug,sally Remove GitHub users
89
- --list List all GitHub users added
90
- --version Show version
105
+ Use the `help` command for help on a specific command.
106
+
107
+ ```
108
+ $ gh-auth help add
109
+ Usage:
110
+ gh-auth add --users=one two three
111
+
112
+ Options:
113
+ --users=one two three
114
+ [--command=COMMAND]
115
+ [--host=HOST]
116
+ [--path=PATH]
117
+
118
+ Description:
119
+ `gh-auth add` is used to add one or more GitHub user's public SSH keys to ~/.ssh/authorized_keys. All keys stored on github.com for that user will be added.
120
+
121
+ > $ gh-auth add --users=chrishunt zachmargolis
122
+ > Adding 6 key(s) to '/Users/chris/.ssh/authorized_keys'
123
+
124
+ By default, users will be granted normal shell access. If you'd like to specify an ssh command that should execute when the user connects, use the `--command` option.
125
+
126
+ > $ gh-auth add --users=chrishunt --command="tmux attach"
91
127
  ```
92
128
 
93
129
  ### In Your Project
@@ -99,10 +135,10 @@ too.
99
135
  require 'github/auth'
100
136
 
101
137
  # Add keys for GitHub user 'chrishunt'
102
- Github::Auth::CLI.new.execute %w(--add chrishunt)
138
+ Github::Auth::CLI.start %w(add --users=chrishunt)
103
139
 
104
140
  # Remove keys for GitHub user 'chrishunt'
105
- Github::Auth::CLI.new.execute %w(--remove chrishunt)
141
+ Github::Auth::CLI.start %w(remove --users=chrishunt)
106
142
  ```
107
143
 
108
144
  ## Installation
@@ -111,15 +147,6 @@ Install the `github-auth` gem:
111
147
 
112
148
  ```bash
113
149
  $ gem install github-auth
114
-
115
- $ gh-auth
116
- usage: gh-auth [--version] [--list] [--add|--remove] <username>
117
-
118
- options:
119
- --add doug,sally Add GitHub users
120
- --remove doug,sally Remove GitHub users
121
- --list List all GitHub users added
122
- --version Show version
123
150
  ```
124
151
 
125
152
  ### SSH Public Key Authentication (Mac OS X)
@@ -147,7 +174,7 @@ First, authorize yourself for ssh. (Make sure to replace 'chrishunt' with
147
174
  *your* GitHub username)
148
175
 
149
176
  ```bash
150
- $ gh-auth --add chrishunt
177
+ $ gh-auth add --users=chrishunt
151
178
  Adding 2 key(s) to '/Users/chris/.ssh/authorized_keys'
152
179
  ```
153
180
 
@@ -163,7 +190,7 @@ $ ssh -o PreferredAuthentications=publickey localhost
163
190
  Next, remove your public keys from the keys file:
164
191
 
165
192
  ```bash
166
- $ gh-auth --remove chrishunt
193
+ $ gh-auth remove --users=chrishunt
167
194
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
168
195
  ```
169
196
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'github/auth'
4
4
 
5
- Github::Auth::CLI.new.execute(ARGV)
5
+ Github::Auth::CLI.start ARGV
@@ -24,8 +24,10 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'coveralls', '~> 0.6.7'
25
25
  spec.add_development_dependency 'rake', '~> 10.1.0'
26
26
  spec.add_development_dependency 'rspec', '~> 2.14'
27
+ spec.add_development_dependency 'pry', '~> 0.9.12'
27
28
  spec.add_development_dependency 'sinatra', '~> 1.4.3'
28
29
  spec.add_development_dependency 'thin', '~> 1.5.1'
29
30
 
30
31
  spec.add_runtime_dependency 'httparty', '~> 0.11.0'
32
+ spec.add_runtime_dependency 'thor', '~> 0.18'
31
33
  end
@@ -2,5 +2,4 @@ require 'github/auth/version'
2
2
  require 'github/auth/key'
3
3
  require 'github/auth/keys_client'
4
4
  require 'github/auth/keys_file'
5
- require 'github/auth/options'
6
5
  require 'github/auth/cli'
@@ -1,40 +1,77 @@
1
+ require 'thor'
2
+
1
3
  module Github::Auth
2
4
  # Command Line Interface for parsing and executing commands
3
- class CLI
4
- attr_reader :options
5
+ class CLI < Thor
6
+ class_option :host, type: :string
7
+ class_option :path, type: :string
5
8
 
6
- def execute(args)
7
- @options = Options.new.parse(args)
8
- send options.command
9
- end
9
+ option :users, type: :array, required: true
10
+ option :command, type: :string
11
+ desc 'add', 'Add GitHub users to authorized keys'
12
+ long_desc <<-LONGDESC
13
+ `gh-auth add` is used to add one or more GitHub user's public SSH keys
14
+ to ~/.ssh/authorized_keys. All keys stored on github.com for that
15
+ user will be added.
10
16
 
11
- private
17
+ > $ gh-auth add --users=chrishunt zachmargolis
18
+ \x5> Adding 6 key(s) to '/Users/chris/.ssh/authorized_keys'
12
19
 
20
+ By default, users will be granted normal shell access. If you'd like to
21
+ specify an ssh command that should execute when the user connects, use
22
+ the `--command` option.
23
+
24
+ > $ gh-auth add --users=chrishunt --command="tmux attach"
25
+ LONGDESC
13
26
  def add
14
27
  on_keys_file :write!,
15
- "Adding #{keys.count} key(s) to '#{keys_file.path}'"
28
+ "Adding #{keys.count} key(s) to '#{keys_file.path}'",
29
+ { command: options[:command] }
16
30
  end
17
31
 
32
+ option :users, type: :array, required: true
33
+ desc 'remove', 'Remove GitHub users from authorized keys'
34
+ long_desc <<-LONGDESC
35
+ `gh-auth remove` is used to remove one or more GitHub user's public SSH
36
+ keys from ~/.ssh/authorized_keys. All keys stored on github.com for
37
+ that user will be removed.
38
+
39
+ > $ gh-auth remove --users=chrishunt zachmargolis
40
+ \x5> Removing 6 key(s) to '/Users/chris/.ssh/authorized_keys'
41
+ LONGDESC
18
42
  def remove
19
43
  on_keys_file :delete!,
20
44
  "Removing #{keys.count} key(s) from '#{keys_file.path}'"
21
45
  end
22
46
 
47
+ desc 'list', 'List all GitHub users already added to authorized keys'
48
+ long_desc <<-LONGDESC
49
+ `gh-auth list` will list all GitHub users that have been added to
50
+ ~/.ssh/authorized_keys by `gh-auth`.
51
+
52
+ > $ gh-auth list
53
+ \x5> chrishunt, zachmargolis
54
+ LONGDESC
23
55
  def list
24
- puts "Added users: #{keys_file.github_users.join(', ')}"
56
+ puts keys_file.github_users.join(' ')
25
57
  end
26
58
 
59
+ desc 'version', 'Show gh-auth version'
27
60
  def version
28
61
  puts Github::Auth::VERSION
29
62
  end
30
63
 
31
- def usage
32
- puts options.usage
64
+ private
65
+
66
+ def keys
67
+ @keys ||= begin
68
+ Array(options[:users]).map { |user| keys_for user }.flatten.compact
69
+ end
33
70
  end
34
71
 
35
- def on_keys_file(action, message)
72
+ def on_keys_file(action, message, options = {})
36
73
  puts message
37
- rescue_keys_file_errors { keys_file.send action, keys }
74
+ rescue_keys_file_errors { keys_file(options).send action, keys }
38
75
  end
39
76
 
40
77
  def rescue_keys_file_errors
@@ -51,10 +88,6 @@ module Github::Auth
51
88
  puts " $ touch #{keys_file.path}"
52
89
  end
53
90
 
54
- def keys
55
- @keys ||= options.usernames.map { |user| keys_for user }.flatten.compact
56
- end
57
-
58
91
  def keys_for(username)
59
92
  Github::Auth::KeysClient.new(
60
93
  hostname: github_hostname,
@@ -68,16 +101,17 @@ module Github::Auth
68
101
  puts "https://status.github.com"
69
102
  end
70
103
 
71
- def keys_file
72
- Github::Auth::KeysFile.new path: keys_file_path
104
+ def keys_file(options = {})
105
+ Github::Auth::KeysFile.new \
106
+ options.merge path: keys_file_path
73
107
  end
74
108
 
75
109
  def keys_file_path
76
- Github::Auth::KeysFile::DEFAULT_PATH
110
+ options[:path] || Github::Auth::KeysFile::DEFAULT_PATH
77
111
  end
78
112
 
79
113
  def github_hostname
80
- Github::Auth::KeysClient::DEFAULT_HOSTNAME
114
+ options[:host] || Github::Auth::KeysClient::DEFAULT_HOSTNAME
81
115
  end
82
116
  end
83
117
  end
@@ -1,7 +1,7 @@
1
1
  module Github::Auth
2
2
  # Write and delete keys from the authorized_keys file
3
3
  class KeysFile
4
- attr_reader :path
4
+ attr_reader :path, :command
5
5
 
6
6
  PermissionDeniedError = Class.new StandardError
7
7
  FileDoesNotExistError = Class.new StandardError
@@ -10,6 +10,7 @@ module Github::Auth
10
10
 
11
11
  def initialize(options = {})
12
12
  @path = File.expand_path(options[:path] || DEFAULT_PATH)
13
+ @command = options[:command]
13
14
  end
14
15
 
15
16
  def write!(keys)
@@ -19,7 +20,7 @@ module Github::Auth
19
20
  unless keys_file_content.empty? || keys_file_content.end_with?("\n")
20
21
  keys_file.write "\n"
21
22
  end
22
- keys_file.write "#{key}\n"
23
+ keys_file.write "#{"command=\"#{command}\" " if command}#{key}\n"
23
24
  end
24
25
  end
25
26
  end
@@ -62,7 +63,7 @@ module Github::Auth
62
63
  def keys_file_content_without(keys)
63
64
  keys_file_content.tap do |content|
64
65
  Array(keys).each do |key|
65
- content.gsub! /#{Regexp.escape key.key}( .*)?$\n?/, ''
66
+ content.gsub! /(.*)?#{Regexp.escape key.key}(.*)?$\n?/, ''
66
67
  end
67
68
 
68
69
  content << "\n" unless content.empty? || content.end_with?("\n")
@@ -1,5 +1,5 @@
1
1
  module Github
2
2
  module Auth
3
- VERSION = "2.0.0"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
@@ -11,23 +11,22 @@ describe Github::Auth::CLI do
11
11
 
12
12
  after { keys_file.unlink }
13
13
 
14
- def cli
15
- described_class.new.tap do |cli|
16
- cli.stub(
17
- github_hostname: hostname,
18
- keys_file_path: keys_file.path
19
- )
20
- end
14
+ def cli(args = [])
15
+ described_class.start \
16
+ args + [
17
+ "--path=#{keys_file.path}",
18
+ "--host=#{hostname}"
19
+ ]
21
20
  end
22
21
 
23
22
  it 'adds and removes keys from the keys file' do
24
- cli.execute %w(--add chrishunt)
23
+ cli %w(add --users=chrishunt)
25
24
 
26
25
  keys_file.read.tap do |keys_file_content|
27
26
  keys.each { |key| expect(keys_file_content).to include key.to_s }
28
27
  end
29
28
 
30
- cli.execute %w(--remove chrishunt)
29
+ cli %w(remove --users=chrishunt)
31
30
 
32
31
  expect(keys_file.read).to be_empty
33
32
 
@@ -35,29 +34,32 @@ describe Github::Auth::CLI do
35
34
  end
36
35
 
37
36
  it 'lists users from the keys file' do
38
- cli.execute %w(--add chrishunt)
37
+ cli %w(add --users=chrishunt)
39
38
 
40
39
  output = capture_stdout do
41
- cli.execute %w(--list)
40
+ cli %w(list)
42
41
  end
43
42
 
44
43
  expect(output).to include('chrishunt')
45
44
  end
46
45
 
46
+ it 'supports ssh commands' do
47
+ cli %w(add --users=chrishunt) << '--command=tmux attach'
48
+
49
+ expect(keys_file.read).to include 'command="tmux attach"'
50
+
51
+ keys_file.rewind
52
+ cli %w(remove --users=chrishunt)
53
+
54
+ expect(keys_file.read.strip).to be_empty
55
+ end
56
+
47
57
  it 'prints version information' do
48
58
  output = capture_stdout do
49
- cli.execute %w(--version)
59
+ cli %w(version)
50
60
  end
51
61
 
52
62
  expect(output).to include Github::Auth::VERSION
53
63
  end
54
-
55
- it 'prints usage for invalid arguments' do
56
- [[], %w(invalid), %w(--add)].each do |invalid_arguments|
57
- expect(
58
- capture_stdout { cli.execute invalid_arguments }
59
- ).to include 'usage: gh-auth'
60
- end
61
- end
62
64
  end
63
65
  end
@@ -1,2 +1,3 @@
1
+ require 'pry'
1
2
  require 'coveralls'
2
3
  Coveralls.wear!
@@ -4,9 +4,10 @@ require 'github/auth/key'
4
4
  require 'github/auth/keys_file'
5
5
 
6
6
  describe Github::Auth::KeysFile do
7
- subject { described_class.new path: path }
7
+ subject { described_class.new(options) }
8
8
 
9
9
  let(:keys_file) { Tempfile.new 'authorized_keys' }
10
+ let(:options) {{ path: path }}
10
11
  let(:path) { keys_file.path }
11
12
 
12
13
  after { keys_file.unlink } # clean up, delete tempfile
@@ -78,6 +79,19 @@ describe Github::Auth::KeysFile do
78
79
  it_should_behave_like 'a successful key addition'
79
80
  end
80
81
 
82
+ context 'with an ssh command' do
83
+ let(:options) {{ path: path, command: 'tmux attach' }}
84
+ let(:keys) {[ Github::Auth::Key.new('chris', 'abc123') ]}
85
+
86
+ it_should_behave_like 'a successful key addition'
87
+
88
+ it 'prefixes the key with the ssh command' do
89
+ subject.write! keys
90
+
91
+ expect(keys_file.read).to include 'command="tmux attach"'
92
+ end
93
+ end
94
+
81
95
  context 'with existing keys in the keys file' do
82
96
  let(:existing_keys) { %w(abc123 def456 ghi789) }
83
97
  let(:keys) {[ Github::Auth::Key.new('chris', 'jkl012') ]}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Hunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-22 00:00:00.000000000 Z
11
+ date: 2013-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.14'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.12
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.12
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: sinatra
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,20 @@ dependencies:
136
150
  - - ~>
137
151
  - !ruby/object:Gem::Version
138
152
  version: 0.11.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: thor
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: '0.18'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ version: '0.18'
139
167
  description: SSH key management for Github users
140
168
  email:
141
169
  - c@chrishunt.co
@@ -161,7 +189,6 @@ files:
161
189
  - lib/github/auth/key.rb
162
190
  - lib/github/auth/keys_client.rb
163
191
  - lib/github/auth/keys_file.rb
164
- - lib/github/auth/options.rb
165
192
  - lib/github/auth/version.rb
166
193
  - spec/acceptance/github/auth/cli_spec.rb
167
194
  - spec/acceptance/github/auth/keys_client_spec.rb
@@ -1,64 +0,0 @@
1
- require 'optparse'
2
-
3
- module Github::Auth
4
- # Parses command line options
5
- class Options
6
- attr_reader :parser
7
-
8
- def initialize
9
- @parser = OptionParser.new do |opts|
10
- opts.banner = [
11
- 'usage: gh-auth',
12
- '[--version]',
13
- '[--list]',
14
- '[--add|--remove]',
15
- '<username>'
16
- ].join(' ')
17
-
18
- opts.separator "\noptions:"
19
-
20
- opts.on(
21
- '--add doug,sally', Array, 'Add GitHub users'
22
- ) do |usernames|
23
- raise OptionParser::MissingArgument if usernames.empty?
24
- @command = 'add'
25
- @usernames = usernames
26
- end
27
-
28
- opts.on(
29
- '--remove doug,sally', Array, 'Remove GitHub users'
30
- ) do |usernames|
31
- raise OptionParser::MissingArgument if usernames.empty?
32
- @command = 'remove'
33
- @usernames = usernames
34
- end
35
-
36
- opts.on('--list', 'List all GitHub users added') do
37
- @command = 'list'
38
- end
39
-
40
- opts.on('--version', 'Show version') do
41
- @command = 'version'
42
- end
43
- end
44
- end
45
-
46
- def command
47
- @command ||= 'usage'
48
- end
49
-
50
- def usernames
51
- @usernames ||= []
52
- end
53
-
54
- def usage
55
- parser.help
56
- end
57
-
58
- def parse(args)
59
- parser.parse(args)
60
- ensure
61
- return self
62
- end
63
- end
64
- end