github-auth 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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