mixlib-cli 1.2.0 → 1.2.2

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.
data/README.rdoc CHANGED
@@ -72,6 +72,11 @@ Available arguments to 'option':
72
72
  :exit:: Exit your program with the exit code when this option is specified. Example: 0
73
73
  :proc:: If set, the configuration value will be set to the return value of this proc.
74
74
 
75
+ === New in 1.2.2
76
+
77
+ :required works, and we now support Ruby-style boolean option negation
78
+ (e.g. '--no-cookie' will set 'cookie' to false if the option is boolean)
79
+
75
80
  === New in 1.2.0
76
81
 
77
82
  We no longer destructively manipulate ARGV.
data/Rakefile CHANGED
@@ -1,55 +1,41 @@
1
1
  require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "mixlib-cli"
8
- gem.summary = "A simple mixin for CLI interfaces, including option parsing"
9
- gem.email = "info@opscode.com"
10
- gem.homepage = "http://www.opscode.com"
11
- gem.authors = ["Opscode, Inc."]
12
- end
13
- Jeweler::GemcutterTasks.new
14
- rescue LoadError
15
- puts "Jeweler (or a dependency) not available. Install from gemcutter with: sudo gem install gemcutter jeweler"
16
- end
2
+ require 'rake/gempackagetask'
3
+ require 'rspec/core/rake_task'
4
+ require 'rdoc/task'
17
5
 
18
- require 'spec/rake/spectask'
19
- Spec::Rake::SpecTask.new(:spec) do |spec|
20
- spec.libs << 'lib' << 'spec'
21
- spec.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
22
- spec.spec_files = FileList['spec/**/*_spec.rb']
23
- end
6
+ task :default => :spec
24
7
 
25
- Spec::Rake::SpecTask.new(:rcov) do |spec|
26
- spec.libs << 'lib' << 'spec'
8
+ desc "Run specs"
9
+ RSpec::Core::RakeTask.new(:spec) do |spec|
27
10
  spec.pattern = 'spec/**/*_spec.rb'
28
- spec.rcov = true
29
11
  end
30
12
 
31
- begin
32
- require 'cucumber/rake/task'
33
- Cucumber::Rake::Task.new(:features)
34
- rescue LoadError
35
- task :features do
36
- abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
37
- end
13
+ gem_spec = eval(File.read("mixlib-cli.gemspec"))
14
+
15
+ Rake::GemPackageTask.new(gem_spec) do |pkg|
16
+ pkg.gem_spec = gem_spec
38
17
  end
39
18
 
40
- task :default => :spec
19
+ desc "install the gem locally"
20
+ task :install => [:package] do
21
+ sh %{gem install pkg/#{gem_spec.name}-#{gem_spec.version}}
22
+ end
41
23
 
42
- require 'rake/rdoctask'
43
- Rake::RDocTask.new do |rdoc|
44
- if File.exist?('VERSION.yml')
45
- config = YAML.load(File.read('VERSION.yml'))
46
- version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
47
- else
48
- version = ""
24
+ desc "create a gemspec file"
25
+ task :make_spec do
26
+ File.open("#{gem_spec.name}.gemspec", "w") do |file|
27
+ file.puts spec.to_ruby
49
28
  end
29
+ end
30
+
31
+ desc "remove build files"
32
+ task :clean do
33
+ sh %Q{ rm -f pkg/*.gem }
34
+ end
50
35
 
36
+ RDoc::Task.new do |rdoc|
51
37
  rdoc.rdoc_dir = 'rdoc'
52
- rdoc.title = "mixlib-cli #{version}"
38
+ rdoc.title = "mixlib-cli #{gem_spec.version}"
53
39
  rdoc.rdoc_files.include('README*')
54
40
  rdoc.rdoc_files.include('lib/**/*.rb')
55
41
  end
data/lib/mixlib/cli.rb CHANGED
@@ -138,19 +138,11 @@ module Mixlib
138
138
  raise ArgumentError, "You must pass :on, :tail, or :head to :on"
139
139
  end
140
140
 
141
- parse_block = case opt_val[:boolean]
142
- when true
143
- Proc.new() do
144
- config[opt_key] = (opt_val[:proc] && opt_val[:proc].call(true)) || true
145
- puts opts if opt_val[:show_options]
146
- exit opt_val[:exit] if opt_val[:exit]
147
- end
148
- when false
149
- Proc.new() do |c|
150
- config[opt_key] = (opt_val[:proc] && opt_val[:proc].call(c)) || c
151
- puts opts if opt_val[:show_options]
152
- exit opt_val[:exit] if opt_val[:exit]
153
- end
141
+ parse_block =
142
+ Proc.new() do |c|
143
+ config[opt_key] = (opt_val[:proc] && opt_val[:proc].call(c)) || c
144
+ puts opts if opt_val[:show_options]
145
+ exit opt_val[:exit] if opt_val[:exit]
154
146
  end
155
147
 
156
148
  full_opt = [ opt_method ]
@@ -163,7 +155,7 @@ module Mixlib
163
155
 
164
156
  # Deal with any required values
165
157
  options.each do |opt_key, opt_value|
166
- if opt_value[:required]
158
+ if opt_value[:required] && !config.has_key?(opt_key)
167
159
  reqarg = opt_value[:short] || opt_value[:long]
168
160
  puts "You must supply #{reqarg}!"
169
161
  puts @opt_parser
@@ -0,0 +1,6 @@
1
+ module Mixlib
2
+ module CLI
3
+ VERSION = "1.2.2"
4
+ end
5
+ end
6
+
@@ -156,18 +156,46 @@ describe Mixlib::CLI do
156
156
  @cli.config[:i_am_boolean].should == true
157
157
  end
158
158
 
159
+ it "should set the corresponding config value to false when a boolean is prefixed with --no" do
160
+ TestCLI.option(:i_am_boolean, :long => "--[no-]bool", :boolean => true)
161
+ @cli = TestCLI.new
162
+ @cli.parse_options([ '--no-bool' ])
163
+ @cli.config[:i_am_boolean].should == false
164
+ end
165
+
159
166
  it "should exit if a config option has :exit set" do
160
167
  TestCLI.option(:i_am_exit, :short => "-x", :boolean => true, :exit => 0)
161
168
  @cli = TestCLI.new
162
169
  lambda { @cli.parse_options(["-x"]) }.should raise_error(SystemExit)
163
170
  end
164
-
171
+
165
172
  it "should exit if a required option is missing" do
166
173
  TestCLI.option(:require_me, :short => "-r", :boolean => true, :required => true)
167
174
  @cli = TestCLI.new
168
175
  lambda { @cli.parse_options([]) }.should raise_error(SystemExit)
169
176
  end
170
-
177
+
178
+ it "should not exit if a required option is specified" do
179
+ TestCLI.option(:require_me, :short => "-r", :boolean => true, :required => true)
180
+ @cli = TestCLI.new
181
+ @cli.parse_options(["-r"])
182
+ @cli.config[:require_me].should == true
183
+ end
184
+
185
+ it "should not exit if a required boolean option is specified and false" do
186
+ TestCLI.option(:require_me, :long => "--[no-]req", :boolean => true, :required => true)
187
+ @cli = TestCLI.new
188
+ @cli.parse_options(["--no-req"])
189
+ @cli.config[:require_me].should == false
190
+ end
191
+
192
+ it "should not exit if a required option is specified and empty" do
193
+ TestCLI.option(:require_me, :short => "-r VALUE", :required => true)
194
+ @cli = TestCLI.new
195
+ @cli.parse_options(["-r", ""])
196
+ @cli.config[:require_me].should == ""
197
+ end
198
+
171
199
  it "should preserve all of the commandline arguments, ARGV" do
172
200
  TestCLI.option(:config_file, :short => "-c CONFIG")
173
201
  @cli = TestCLI.new
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-cli
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 27
5
+ prerelease:
5
6
  segments:
6
7
  - 1
7
8
  - 2
8
- - 0
9
- version: 1.2.0
9
+ - 2
10
+ version: 1.2.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - Opscode, Inc.
@@ -14,63 +15,62 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-03-31 00:00:00 -07:00
18
+ date: 2011-09-08 00:00:00 -07:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
21
- description:
22
+ description: A simple mixin for CLI interfaces, including option parsing
22
23
  email: info@opscode.com
23
24
  executables: []
24
25
 
25
26
  extensions: []
26
27
 
27
28
  extra_rdoc_files:
28
- - LICENSE
29
29
  - README.rdoc
30
- files:
31
- - .gitignore
32
30
  - LICENSE
33
31
  - NOTICE
32
+ files:
33
+ - LICENSE
34
34
  - README.rdoc
35
35
  - Rakefile
36
- - VERSION.yml
37
- - features/mixlib_cli.feature
38
- - features/step_definitions/mixlib_cli_steps.rb
39
- - features/support/env.rb
36
+ - NOTICE
37
+ - lib/mixlib/cli/version.rb
40
38
  - lib/mixlib/cli.rb
41
39
  - spec/mixlib/cli_spec.rb
42
- - spec/spec.opts
43
40
  - spec/spec_helper.rb
44
41
  has_rdoc: true
45
42
  homepage: http://www.opscode.com
46
43
  licenses: []
47
44
 
48
45
  post_install_message:
49
- rdoc_options:
50
- - --charset=UTF-8
46
+ rdoc_options: []
47
+
51
48
  require_paths:
52
49
  - lib
53
50
  required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
54
52
  requirements:
55
53
  - - ">="
56
54
  - !ruby/object:Gem::Version
55
+ hash: 3
57
56
  segments:
58
57
  - 0
59
58
  version: "0"
60
59
  required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
61
  requirements:
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
+ hash: 3
64
65
  segments:
65
66
  - 0
66
67
  version: "0"
67
68
  requirements: []
68
69
 
69
70
  rubyforge_project:
70
- rubygems_version: 1.3.6
71
+ rubygems_version: 1.6.2
71
72
  signing_key:
72
73
  specification_version: 3
73
74
  summary: A simple mixin for CLI interfaces, including option parsing
74
- test_files:
75
- - spec/mixlib/cli_spec.rb
76
- - spec/spec_helper.rb
75
+ test_files: []
76
+
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- mixlib-cli.gemspec
4
- coverage
5
- rdoc
6
- pkg
data/VERSION.yml DELETED
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 1
3
- :minor: 2
4
- :patch: 0
@@ -1,9 +0,0 @@
1
- Feature: something something
2
- In order to something something
3
- A user something something
4
- something something something
5
-
6
- Scenario: something something
7
- Given inspiration
8
- When I create a sweet new gem
9
- Then everyone should see how awesome I am
File without changes
@@ -1,9 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
- require 'mixlib_cli'
3
-
4
- require 'spec/expectations'
5
-
6
- World do |world|
7
-
8
- world
9
- end
data/spec/spec.opts DELETED
@@ -1,4 +0,0 @@
1
- --colour
2
- --format specdoc
3
- --loadby mtime
4
- --reverse