mixlib-cli 1.7.0 → 2.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
- SHA1:
3
- metadata.gz: 3a5fa5c9380ff647b7d3fa3be1bff7e2103c9f94
4
- data.tar.gz: d384bc4569b4577a90bc20d06d9d2f9b5564178d
2
+ SHA256:
3
+ metadata.gz: eaf15af5ae6bced46dfe59d89fa37cd935573375fad4982bd1661815c1bdb9a6
4
+ data.tar.gz: c8ef97ee9a2236e29c3bcd7a6cafaf8564bfa5526972d582b7f4f5dc84305a83
5
5
  SHA512:
6
- metadata.gz: ea74cdb6f6afc9758a24a143c0d1702423e87a3fcce4749c61e3c83da4b289967a47a1473513b8f695a9d2e66d0aad188f1fdf1f6aae91648e4ce30f5c33b6ea
7
- data.tar.gz: 62421ca5582e801d8e3112bbef7e55f16cdff8bf77c5520f7539bffa36e7602644ef2ac4aaee2733dda90db95156d58e06dfd2e7d0e1ddfae6856704b5c5b323
6
+ metadata.gz: d5d534599c887330bff589b7909b8f89199baa33f557363742b29ffe93a5b3d6bb036efa179ef1b3a4dbfb2391115e8152115bfe48619a1ac037dc4d69532dd8
7
+ data.tar.gz: d17c1d596c0aec0fdf3e53b7e8f7d7380a34872a8f16ae0cd680725b712ec22b0e77607b45dfa98b9948464c5e793e34a1db43c31d6c13c8b4311bd8d3da1054
data/Gemfile CHANGED
@@ -1,3 +1,28 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
+
5
+ group :docs do
6
+ gem "yard"
7
+ gem "redcarpet"
8
+ gem "github-markup"
9
+ end
10
+
11
+ group :test do
12
+ gem "chefstyle", git: "https://github.com/chef/chefstyle.git", branch: "master"
13
+ gem "rspec", "~> 3.0"
14
+ gem "rake"
15
+ end
16
+
17
+ group :development do
18
+ gem "pry"
19
+ gem "pry-byebug"
20
+ gem "pry-stack_explorer"
21
+ gem "rb-readline"
22
+ end
23
+
24
+ instance_eval(ENV["GEMFILE_MOD"]) if ENV["GEMFILE_MOD"]
25
+
26
+ # If you want to load debugging tools into the bundle exec sandbox,
27
+ # add these additional dependencies into Gemfile.local
28
+ eval_gemfile(__FILE__ + ".local") if File.exist?(__FILE__ + ".local")
data/NOTICE CHANGED
@@ -4,7 +4,7 @@ Mixin::CLI NOTICE
4
4
  Developed at Chef (http://www.chef.io).
5
5
 
6
6
 
7
- * Copyright 2009-2016, Chef Software, Inc. <legal@chef.io>
7
+ * Copyright 2009-2018, Chef Software, Inc. <legal@chef.io>
8
8
 
9
9
  Mixin::CLI incorporates code from Chef. The Chef notice file follows:
10
10
 
data/README.md CHANGED
@@ -5,34 +5,33 @@
5
5
  Mixlib::CLI provides a class-based command line option parsing object, like the one used in Chef, Ohai and Relish. To use in your project:
6
6
 
7
7
  ```ruby
8
- require 'rubygems'
9
- require 'mixlib/cli'
8
+ require "mixlib/cli"
10
9
 
11
10
  class MyCLI
12
11
  include Mixlib::CLI
13
12
 
14
13
  option :config_file,
15
- :short => "-c CONFIG",
16
- :long => "--config CONFIG",
17
- :default => 'config.rb',
18
- :description => "The configuration file to use"
14
+ short: "-c CONFIG",
15
+ long: "--config CONFIG",
16
+ default: "config.rb",
17
+ description: "The configuration file to use"
19
18
 
20
19
  option :log_level,
21
- :short => "-l LEVEL",
22
- :long => "--log_level LEVEL",
23
- :description => "Set the log level (debug, info, warn, error, fatal)",
24
- :required => true,
25
- :in => ['debug', 'info', 'warn', 'error', 'fatal'],
26
- :proc => Proc.new { |l| l.to_sym }
20
+ short: "-l LEVEL",
21
+ long: "--log_level LEVEL",
22
+ description: "Set the log level (debug, info, warn, error, fatal)",
23
+ required: true,
24
+ in: [:debug, :info, :warn, :error, :fatal],
25
+ proc: Proc.new { |l| l.to_sym }
27
26
 
28
27
  option :help,
29
- :short => "-h",
30
- :long => "--help",
31
- :description => "Show this message",
32
- :on => :tail,
33
- :boolean => true,
34
- :show_options => true,
35
- :exit => 0
28
+ short: "-h",
29
+ long: "--help",
30
+ description: "Show this message",
31
+ on: :tail,
32
+ boolean: true,
33
+ show_options: true,
34
+ exit: 0
36
35
 
37
36
  end
38
37
 
@@ -54,7 +53,7 @@ class MyConfig
54
53
  end
55
54
 
56
55
  class MyCLI
57
- def run(argv=ARGV)
56
+ def run(argv = ARGV)
58
57
  parse_options(argv)
59
58
  MyConfig.merge!(config)
60
59
  end
@@ -69,10 +68,10 @@ MyConfig[:log_level] # :debug
69
68
  Available arguments to 'option':
70
69
 
71
70
  - `:short`: The short option, just like from optparse. Example: "-l LEVEL"
72
- - `:long`: The long option, just like from optparse. Example: "--level LEVEL"
71
+ - `:long`: The long option, just like from optparse. Example: "--level LEVEL"
73
72
  - `:description`: The description for this item, just like from optparse.
74
73
  - `:default`: A default value for this option
75
- - `:required`: Prints a message informing the user of the missing requirement, and exits. Default is false.
74
+ - `:required`: Prints a message informing the user of the missing requirement, and exits. Default is false.
76
75
  - `:on`: Set to :tail to appear at the end, or `:head`: to appear at the top.
77
76
  - `:boolean:`: If this option takes no arguments, set this to true.
78
77
  - `:show_options`: If you want the option list printed when this option is called, set this to true.
@@ -89,9 +88,21 @@ cli.parse_options
89
88
  cli.cli_arguments # [ 'file1', 'file2', 'file3' ]
90
89
  ```
91
90
 
92
- ## LICENSE:
91
+ ## Documentation
93
92
 
94
- - Copyright:: Copyright (c) 2008-2016 Chef Software, Inc.
93
+ All documentation is written using YARD. You can generate a by running:
94
+
95
+ ```
96
+ rake docs
97
+ ```
98
+
99
+ ## Contributing
100
+
101
+ For information on contributing to this project please see our [Contributing Documentation](https://github.com/chef/chef/blob/master/CONTRIBUTING.md)
102
+
103
+ ## License & Copyright
104
+
105
+ - Copyright:: Copyright (c) 2008-2018 Chef Software, Inc.
95
106
  - License:: Apache License, Version 2.0
96
107
 
97
108
  ```text
data/Rakefile CHANGED
@@ -1,27 +1,15 @@
1
- require "bundler"
2
- require "rubygems"
3
- require "rubygems/package_task"
4
- require "rdoc/task"
1
+ require "bundler/gem_tasks"
5
2
  require "rspec/core/rake_task"
6
3
 
7
- Bundler::GemHelper.install_tasks
4
+ task default: [:style, :spec]
8
5
 
9
- task :default => :spec
6
+ Bundler::GemHelper.install_tasks
10
7
 
11
8
  desc "Run specs"
12
9
  RSpec::Core::RakeTask.new(:spec) do |spec|
13
10
  spec.pattern = "spec/**/*_spec.rb"
14
11
  end
15
12
 
16
- gem_spec = eval(File.read("mixlib-cli.gemspec"))
17
-
18
- RDoc::Task.new do |rdoc|
19
- rdoc.rdoc_dir = "rdoc"
20
- rdoc.title = "mixlib-cli #{gem_spec.version}"
21
- rdoc.rdoc_files.include("README*")
22
- rdoc.rdoc_files.include("lib/**/*.rb")
23
- end
24
-
25
13
  begin
26
14
  require "chefstyle"
27
15
  require "rubocop/rake_task"
@@ -29,5 +17,20 @@ begin
29
17
  task.options += ["--display-cop-names", "--no-color"]
30
18
  end
31
19
  rescue LoadError
32
- puts "chefstyle/rubocop is not available. gem install chefstyle to do style checking."
20
+ puts "chefstyle/rubocop is not available. bundle install first to make sure all dependencies are installed."
21
+ end
22
+
23
+ begin
24
+ require "yard"
25
+ YARD::Rake::YardocTask.new(:docs)
26
+ rescue LoadError
27
+ puts "yard is not available. bundle install first to make sure all dependencies are installed."
28
+ end
29
+
30
+ task :console do
31
+ require "irb"
32
+ require "irb/completion"
33
+ require "mixlib/cli"
34
+ ARGV.clear
35
+ IRB.start
33
36
  end
@@ -1,6 +1,6 @@
1
1
  #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Copyright:: Copyright (c) 2008-2016 Chef Software, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -41,7 +41,7 @@ module Mixlib
41
41
 
42
42
  module InheritMethods
43
43
  def inherited(receiver)
44
- receiver.options = deep_dup(self.options)
44
+ receiver.options = deep_dup(options)
45
45
  receiver.extend(Mixlib::CLI::InheritMethods)
46
46
  end
47
47
 
@@ -210,7 +210,7 @@ module Mixlib
210
210
  config_opts[:exit] ||= nil
211
211
  config_opts[:in] ||= nil
212
212
 
213
- if config_opts.has_key?(:default)
213
+ if config_opts.key?(:default)
214
214
  defaults_container[config_key] = config_opts[:default]
215
215
  end
216
216
  end
@@ -231,7 +231,7 @@ module Mixlib
231
231
 
232
232
  # Deal with any required values
233
233
  options.each do |opt_key, opt_value|
234
- if opt_value[:required] && !config.has_key?(opt_key)
234
+ if opt_value[:required] && !config.key?(opt_key)
235
235
  reqarg = opt_value[:short] || opt_value[:long]
236
236
  puts "You must supply #{reqarg}!"
237
237
  puts @opt_parser
@@ -241,7 +241,7 @@ module Mixlib
241
241
  unless opt_value[:in].kind_of?(Array)
242
242
  raise(ArgumentError, "Options config key :in must receive an Array")
243
243
  end
244
- if !opt_value[:in].include?(config[opt_key])
244
+ if config[opt_key] && !opt_value[:in].include?(config[opt_key])
245
245
  reqarg = opt_value[:short] || opt_value[:long]
246
246
  puts "#{reqarg}: #{config[opt_key]} is not included in the list ['#{opt_value[:in].join("', '")}'] "
247
247
  puts @opt_parser
@@ -308,12 +308,13 @@ module Mixlib
308
308
  def build_option_arguments(opt_setting)
309
309
  arguments = Array.new
310
310
 
311
- arguments << opt_setting[:short] if opt_setting.has_key?(:short)
312
- arguments << opt_setting[:long] if opt_setting.has_key?(:long)
313
- if opt_setting.has_key?(:description)
314
- description = opt_setting[:description]
311
+ arguments << opt_setting[:short] if opt_setting.key?(:short)
312
+ arguments << opt_setting[:long] if opt_setting.key?(:long)
313
+ if opt_setting.key?(:description)
314
+ description = opt_setting[:description].dup
315
315
  description << " (required)" if opt_setting[:required]
316
316
  description << " (included in ['#{opt_setting[:in].join("', '")}'])" if opt_setting[:in]
317
+ opt_setting[:description] = description
317
318
  arguments << description
318
319
  end
319
320
 
@@ -1,5 +1,5 @@
1
1
  module Mixlib
2
2
  module CLI
3
- VERSION = "1.7.0"
3
+ VERSION = "2.0.0".freeze
4
4
  end
5
5
  end
@@ -4,8 +4,6 @@ require "mixlib/cli/version"
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "mixlib-cli"
6
6
  s.version = Mixlib::CLI::VERSION
7
- s.platform = Gem::Platform::RUBY
8
- s.has_rdoc = true
9
7
  s.extra_rdoc_files = ["README.md", "LICENSE", "NOTICE"]
10
8
  s.summary = "A simple mixin for CLI interfaces, including option parsing"
11
9
  s.description = s.summary
@@ -13,13 +11,7 @@ Gem::Specification.new do |s|
13
11
  s.email = "info@chef.io"
14
12
  s.homepage = "https://www.chef.io"
15
13
  s.license = "Apache-2.0"
16
-
17
- # Uncomment this to add a dependency
18
- #s.add_dependency "mixlib-log"
19
- s.add_development_dependency "rake", "< 11.0"
20
- s.add_development_dependency "rspec", "~> 2.14"
21
- s.add_development_dependency "rdoc"
22
- s.add_development_dependency "chefstyle", "~> 0.3"
14
+ s.required_ruby_version = ">= 2.5"
23
15
 
24
16
  s.require_path = "lib"
25
17
  s.files = %w{LICENSE README.md Gemfile Rakefile NOTICE} + Dir.glob("*.gemspec") +
@@ -1,6 +1,6 @@
1
1
  #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Copyright:: Copyright (c) 2008-2016 Chef Software, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,33 +26,33 @@ describe Mixlib::CLI do
26
26
 
27
27
  describe "class method" do
28
28
  describe "option" do
29
- it "should allow you to set a config option with a hash" do
30
- TestCLI.option(:config_file, :short => "-c CONFIG").should == { :short => "-c CONFIG" }
29
+ it "allows you to set a config option with a hash" do
30
+ expect(TestCLI.option(:config_file, short: "-c CONFIG")).to eql({ short: "-c CONFIG" })
31
31
  end
32
32
  end
33
33
 
34
34
  describe "options" do
35
- it "should return the current options hash" do
36
- TestCLI.option(:config_file, :short => "-c CONFIG")
37
- TestCLI.options.should == { :config_file => { :short => "-c CONFIG" } }
35
+ it "returns the current options hash" do
36
+ TestCLI.option(:config_file, short: "-c CONFIG")
37
+ expect(TestCLI.options).to eql({ config_file: { short: "-c CONFIG" } })
38
38
  end
39
39
  end
40
40
 
41
41
  describe "options=" do
42
- it "should allow you to set the full options with a single hash" do
43
- TestCLI.options = { :config_file => { :short => "-c CONFIG" } }
44
- TestCLI.options.should == { :config_file => { :short => "-c CONFIG" } }
42
+ it "allows you to set the full options with a single hash" do
43
+ TestCLI.options = { config_file: { short: "-c CONFIG" } }
44
+ expect(TestCLI.options).to eql({ config_file: { short: "-c CONFIG" } })
45
45
  end
46
46
  end
47
47
 
48
48
  describe "banner" do
49
- it "should have a default value" do
50
- TestCLI.banner.should =~ /^Usage: (.+) \(options\)$/
49
+ it "has a default value" do
50
+ expect(TestCLI.banner).to match(/^Usage: (.+) \(options\)$/)
51
51
  end
52
52
 
53
- it "should allow you to set the banner" do
53
+ it "allows you to set the banner" do
54
54
  TestCLI.banner("Usage: foo")
55
- TestCLI.banner.should == "Usage: foo"
55
+ expect(TestCLI.banner).to eql("Usage: foo")
56
56
  end
57
57
  end
58
58
  end
@@ -64,189 +64,209 @@ describe Mixlib::CLI do
64
64
  end
65
65
 
66
66
  describe "initialize" do
67
- it "should set the banner to the class defined banner" do
68
- @cli.banner.should == TestCLI.banner
67
+ it "sets the banner to the class defined banner" do
68
+ expect(@cli.banner).to eql(TestCLI.banner)
69
69
  end
70
70
 
71
- it "should set the options to the class defined options, plus defaults" do
72
- TestCLI.option(:config_file, :short => "-l LOG")
71
+ it "sets the options to the class defined options, plus defaults" do
72
+ TestCLI.option(:config_file, short: "-l LOG")
73
73
  cli = TestCLI.new
74
- cli.options.should == {
75
- :config_file => {
76
- :short => "-l LOG",
77
- :on => :on,
78
- :boolean => false,
79
- :required => false,
80
- :proc => nil,
81
- :show_options => false,
82
- :exit => nil,
83
- :in => nil,
74
+ expect(cli.options).to eql({
75
+ config_file: {
76
+ short: "-l LOG",
77
+ on: :on,
78
+ boolean: false,
79
+ required: false,
80
+ proc: nil,
81
+ show_options: false,
82
+ exit: nil,
83
+ in: nil,
84
84
  },
85
- }
85
+ })
86
86
  end
87
87
 
88
- it "should set the default config value for any options that include it" do
89
- TestCLI.option(:config_file, :short => "-l LOG", :default => :debug)
88
+ it "sets the default config value for any options that include it" do
89
+ TestCLI.option(:config_file, short: "-l LOG", default: :debug)
90
90
  @cli = TestCLI.new
91
- @cli.config[:config_file].should == :debug
91
+ expect(@cli.config[:config_file]).to eql(:debug)
92
92
  end
93
93
  end
94
94
 
95
95
  describe "opt_parser" do
96
96
 
97
- it "should set the banner in opt_parse" do
98
- @cli.opt_parser.banner.should == @cli.banner
97
+ it "sets the banner in opt_parse" do
98
+ expect(@cli.opt_parser.banner).to eql(@cli.banner)
99
99
  end
100
100
 
101
- it "should present the arguments in the banner" do
102
- TestCLI.option(:config_file, :short => "-l LOG")
101
+ it "presents the arguments in the banner" do
102
+ TestCLI.option(:config_file, short: "-l LOG")
103
103
  @cli = TestCLI.new
104
- @cli.opt_parser.to_s.should =~ /-l LOG/
104
+ expect(@cli.opt_parser.to_s).to match(/-l LOG/)
105
105
  end
106
106
 
107
- it "should honor :on => :tail options in the banner" do
108
- TestCLI.option(:config_file, :short => "-l LOG")
109
- TestCLI.option(:help, :short => "-h", :boolean => true, :on => :tail)
107
+ it "honors :on => :tail options in the banner" do
108
+ TestCLI.option(:config_file, short: "-l LOG")
109
+ TestCLI.option(:help, short: "-h", boolean: true, on: :tail)
110
110
  @cli = TestCLI.new
111
- @cli.opt_parser.to_s.split("\n").last.should =~ /-h/
111
+ expect(@cli.opt_parser.to_s.split("\n").last).to match(/-h/)
112
112
  end
113
113
 
114
- it "should honor :on => :head options in the banner" do
115
- TestCLI.option(:config_file, :short => "-l LOG")
116
- TestCLI.option(:help, :short => "-h", :boolean => true, :on => :head)
114
+ it "honors :on => :head options in the banner" do
115
+ TestCLI.option(:config_file, short: "-l LOG")
116
+ TestCLI.option(:help, short: "-h", boolean: true, on: :head)
117
117
  @cli = TestCLI.new
118
- @cli.opt_parser.to_s.split("\n")[1].should =~ /-h/
118
+ expect(@cli.opt_parser.to_s.split("\n")[1]).to match(/-h/)
119
119
  end
120
120
 
121
- it "should present the arguments in alphabetical order in the banner" do
122
- TestCLI.option(:alpha, :short => "-a ALPHA")
123
- TestCLI.option(:beta, :short => "-b BETA")
124
- TestCLI.option(:zeta, :short => "-z ZETA")
121
+ it "presents the arguments in alphabetical order in the banner" do
122
+ TestCLI.option(:alpha, short: "-a ALPHA")
123
+ TestCLI.option(:beta, short: "-b BETA")
124
+ TestCLI.option(:zeta, short: "-z ZETA")
125
125
  @cli = TestCLI.new
126
126
  output_lines = @cli.opt_parser.to_s.split("\n")
127
- output_lines[1].should =~ /-a ALPHA/
128
- output_lines[2].should =~ /-b BETA/
129
- output_lines[3].should =~ /-z ZETA/
127
+ expect(output_lines[1]).to match(/-a ALPHA/)
128
+ expect(output_lines[2]).to match(/-b BETA/)
129
+ expect(output_lines[3]).to match(/-z ZETA/)
130
130
  end
131
131
 
132
132
  end
133
133
 
134
134
  describe "parse_options" do
135
- it "should set the corresponding config value for non-boolean arguments" do
136
- TestCLI.option(:config_file, :short => "-c CONFIG")
135
+ it "sets the corresponding config value for non-boolean arguments" do
136
+ TestCLI.option(:config_file, short: "-c CONFIG")
137
137
  @cli = TestCLI.new
138
138
  @cli.parse_options([ "-c", "foo.rb" ])
139
- @cli.config[:config_file].should == "foo.rb"
139
+ expect(@cli.config[:config_file]).to eql("foo.rb")
140
140
  end
141
141
 
142
- it "should set the corresponding config value according to a supplied proc" do
142
+ it "sets the corresponding config value according to a supplied proc" do
143
143
  TestCLI.option(:number,
144
- :short => "-n NUMBER",
145
- :proc => Proc.new { |config| config.to_i + 2 }
144
+ short: "-n NUMBER",
145
+ proc: Proc.new { |config| config.to_i + 2 }
146
146
  )
147
147
  @cli = TestCLI.new
148
148
  @cli.parse_options([ "-n", "2" ])
149
- @cli.config[:number].should == 4
149
+ expect(@cli.config[:number]).to eql(4)
150
150
  end
151
151
 
152
- it "should pass the existing value to two-argument procs" do
152
+ it "passes the existing value to two-argument procs" do
153
153
  TestCLI.option(:number,
154
- :short => "-n NUMBER",
155
- :proc => Proc.new { |value, existing| existing ||= []; existing << value; existing }
154
+ short: "-n NUMBER",
155
+ proc: Proc.new { |value, existing| existing ||= []; existing << value; existing }
156
156
  )
157
157
  @cli = TestCLI.new
158
158
  @cli.parse_options([ "-n", "2", "-n", "3" ])
159
- @cli.config[:number].should == %w{2 3}
159
+ expect(@cli.config[:number]).to eql(%w{2 3})
160
160
  end
161
161
 
162
- it "should set the corresponding config value to true for boolean arguments" do
163
- TestCLI.option(:i_am_boolean, :short => "-i", :boolean => true)
162
+ it "sets the corresponding config value to true for boolean arguments" do
163
+ TestCLI.option(:i_am_boolean, short: "-i", boolean: true)
164
164
  @cli = TestCLI.new
165
165
  @cli.parse_options([ "-i" ])
166
- @cli.config[:i_am_boolean].should == true
166
+ expect(@cli.config[:i_am_boolean]).to be true
167
167
  end
168
168
 
169
- it "should set the corresponding config value to false when a boolean is prefixed with --no" do
170
- TestCLI.option(:i_am_boolean, :long => "--[no-]bool", :boolean => true)
169
+ it "sets the corresponding config value to false when a boolean is prefixed with --no" do
170
+ TestCLI.option(:i_am_boolean, long: "--[no-]bool", boolean: true)
171
171
  @cli = TestCLI.new
172
172
  @cli.parse_options([ "--no-bool" ])
173
- @cli.config[:i_am_boolean].should == false
173
+ expect(@cli.config[:i_am_boolean]).to be false
174
174
  end
175
175
 
176
- it "should exit if a config option has :exit set" do
177
- TestCLI.option(:i_am_exit, :short => "-x", :boolean => true, :exit => 0)
176
+ it "exits if a config option has :exit set" do
177
+ TestCLI.option(:i_am_exit, short: "-x", boolean: true, exit: 0)
178
178
  @cli = TestCLI.new
179
- lambda { @cli.parse_options(["-x"]) }.should raise_error(SystemExit)
179
+ expect(lambda { @cli.parse_options(["-x"]) }).to raise_error(SystemExit)
180
180
  end
181
181
 
182
- it "should exit if a required option is missing" do
183
- TestCLI.option(:require_me, :short => "-r", :boolean => true, :required => true)
182
+ it "exits if a required option is missing" do
183
+ TestCLI.option(:require_me, short: "-r", boolean: true, required: true)
184
184
  @cli = TestCLI.new
185
- lambda { @cli.parse_options([]) }.should raise_error(SystemExit)
185
+ expect(lambda { @cli.parse_options([]) }).to raise_error(SystemExit)
186
186
  end
187
187
 
188
- it "should exit if option is not included in the list" do
189
- TestCLI.option(:inclusion, :short => "-i val", :in => %w{one two})
188
+ it "exits if option is not included in the list and required" do
189
+ TestCLI.option(:inclusion, short: "-i val", in: %w{one two}, required: true)
190
190
  @cli = TestCLI.new
191
- lambda { @cli.parse_options(["-i", "three"]) }.should raise_error(SystemExit)
191
+ expect(lambda { @cli.parse_options(["-i", "three"]) }).to raise_error(SystemExit)
192
192
  end
193
193
 
194
- it "should raise ArgumentError if options key :in is not an array" do
195
- TestCLI.option(:inclusion, :short => "-i val", :in => "foo")
194
+ it "exits if option is not included in the list and not required" do
195
+ TestCLI.option(:inclusion, short: "-i val", in: %w{one two}, required: false)
196
196
  @cli = TestCLI.new
197
- lambda { @cli.parse_options(["-i", "three"]) }.should raise_error(ArgumentError)
197
+ expect(lambda { @cli.parse_options(["-i", "three"]) }).to raise_error(SystemExit)
198
198
  end
199
199
 
200
- it "should not exit if option is included in the list" do
201
- TestCLI.option(:inclusion, :short => "-i val", :in => %w{one two})
200
+ it "doesn't exit if option is nil and not required" do
201
+ TestCLI.option(:inclusion, short: "-i val", in: %w{one two}, required: false)
202
+ @cli = TestCLI.new
203
+ expect do
204
+ expect(@cli.parse_options([])).to eql []
205
+ end.to_not raise_error
206
+ end
207
+
208
+ it "exit if option is nil and required" do
209
+ TestCLI.option(:inclusion, short: "-i val", in: %w{one two}, required: true)
210
+ @cli = TestCLI.new
211
+ expect(lambda { @cli.parse_options([]) }).to raise_error(SystemExit)
212
+ end
213
+
214
+ it "raises ArgumentError if options key :in is not an array" do
215
+ TestCLI.option(:inclusion, short: "-i val", in: "foo", required: true)
216
+ @cli = TestCLI.new
217
+ expect(lambda { @cli.parse_options(["-i", "three"]) }).to raise_error(ArgumentError)
218
+ end
219
+
220
+ it "doesn't exit if option is included in the list" do
221
+ TestCLI.option(:inclusion, short: "-i val", in: %w{one two}, required: true)
202
222
  @cli = TestCLI.new
203
223
  @cli.parse_options(["-i", "one"])
204
- @cli.config[:inclusion].should == "one"
224
+ expect(@cli.config[:inclusion]).to eql("one")
205
225
  end
206
226
 
207
- it "should change description if :in key is specified" do
208
- TestCLI.option(:inclusion, :short => "-i val", :in => %w{one two}, :description => "desc")
227
+ it "changes description if :in key is specified" do
228
+ TestCLI.option(:inclusion, short: "-i val", in: %w{one two}, description: "desc", required: false)
209
229
  @cli = TestCLI.new
210
230
  @cli.parse_options(["-i", "one"])
211
- @cli.options[:inclusion][:description].should == "desc (included in ['one', 'two'])"
231
+ expect(@cli.options[:inclusion][:description]).to eql("desc (included in ['one', 'two'])")
212
232
  end
213
233
 
214
- it "should not exit if a required option is specified" do
215
- TestCLI.option(:require_me, :short => "-r", :boolean => true, :required => true)
234
+ it "doesn't exit if a required option is specified" do
235
+ TestCLI.option(:require_me, short: "-r", boolean: true, required: true)
216
236
  @cli = TestCLI.new
217
237
  @cli.parse_options(["-r"])
218
- @cli.config[:require_me].should == true
238
+ expect(@cli.config[:require_me]).to be true
219
239
  end
220
240
 
221
- it "should not exit if a required boolean option is specified and false" do
222
- TestCLI.option(:require_me, :long => "--[no-]req", :boolean => true, :required => true)
241
+ it "doesn't exit if a required boolean option is specified and false" do
242
+ TestCLI.option(:require_me, long: "--[no-]req", boolean: true, required: true)
223
243
  @cli = TestCLI.new
224
244
  @cli.parse_options(["--no-req"])
225
- @cli.config[:require_me].should == false
245
+ expect(@cli.config[:require_me]).to be false
226
246
  end
227
247
 
228
- it "should not exit if a required option is specified and empty" do
229
- TestCLI.option(:require_me, :short => "-r VALUE", :required => true)
248
+ it "doesn't exit if a required option is specified and empty" do
249
+ TestCLI.option(:require_me, short: "-r VALUE", required: true)
230
250
  @cli = TestCLI.new
231
251
  @cli.parse_options(["-r", ""])
232
- @cli.config[:require_me].should == ""
252
+ expect(@cli.config[:require_me]).to eql("")
233
253
  end
234
254
 
235
- it "should preserve all of the commandline arguments, ARGV" do
236
- TestCLI.option(:config_file, :short => "-c CONFIG")
255
+ it "preserves all of the commandline arguments, ARGV" do
256
+ TestCLI.option(:config_file, short: "-c CONFIG")
237
257
  @cli = TestCLI.new
238
258
  argv_old = ARGV.dup
239
259
  ARGV.replace ["-c", "foo.rb"]
240
260
  @cli.parse_options()
241
- ARGV.should == ["-c", "foo.rb"]
261
+ expect(ARGV).to eql(["-c", "foo.rb"])
242
262
  ARGV.replace argv_old
243
263
  end
244
264
 
245
- it "should preserve and return any un-parsed elements" do
246
- TestCLI.option(:party, :short => "-p LOCATION")
265
+ it "preserves and return any un-parsed elements" do
266
+ TestCLI.option(:party, short: "-p LOCATION")
247
267
  @cli = TestCLI.new
248
- @cli.parse_options([ "easy", "-p", "opscode", "hard" ]).should == %w{easy hard}
249
- @cli.cli_arguments.should == %w{easy hard}
268
+ expect(@cli.parse_options([ "easy", "-p", "opscode", "hard" ])).to eql(%w{easy hard})
269
+ expect(@cli.cli_arguments).to eql(%w{easy hard})
250
270
  end
251
271
  end
252
272
  end
@@ -254,68 +274,68 @@ describe Mixlib::CLI do
254
274
  context "when configured to separate default options" do
255
275
  before do
256
276
  TestCLI.use_separate_default_options true
257
- TestCLI.option(:defaulter, :short => "-D SOMETHING", :default => "this is the default")
277
+ TestCLI.option(:defaulter, short: "-D SOMETHING", default: "this is the default")
258
278
  @cli = TestCLI.new
259
279
  end
260
280
 
261
281
  it "sets default values on the `default` hash" do
262
282
  @cli.parse_options([])
263
- @cli.default_config[:defaulter].should == "this is the default"
264
- @cli.config[:defaulter].should be_nil
283
+ expect(@cli.default_config[:defaulter]).to eql("this is the default")
284
+ expect(@cli.config[:defaulter]).to be_nil
265
285
  end
266
286
 
267
287
  it "sets parsed values on the `config` hash" do
268
288
  @cli.parse_options(%w{-D not-default})
269
- @cli.default_config[:defaulter].should == "this is the default"
270
- @cli.config[:defaulter].should == "not-default"
289
+ expect(@cli.default_config[:defaulter]).to eql("this is the default")
290
+ expect(@cli.config[:defaulter]).to eql("not-default")
271
291
  end
272
292
 
273
293
  end
274
294
 
275
295
  context "when subclassed" do
276
296
  before do
277
- TestCLI.options = { :arg1 => { :boolean => true } }
297
+ TestCLI.options = { arg1: { boolean: true } }
278
298
  end
279
299
 
280
- it "should retain previously defined options from parent" do
300
+ it "retains previously defined options from parent" do
281
301
  class T1 < TestCLI
282
- option :arg2, :boolean => true
302
+ option :arg2, boolean: true
283
303
  end
284
- T1.options[:arg1].should be_a(Hash)
285
- T1.options[:arg2].should be_a(Hash)
286
- TestCLI.options[:arg2].should be_nil
304
+ expect(T1.options[:arg1]).to be_a(Hash)
305
+ expect(T1.options[:arg2]).to be_a(Hash)
306
+ expect(TestCLI.options[:arg2]).to be_nil
287
307
  end
288
308
 
289
- it "should not be able to modify parent classes options" do
309
+ it "isn't able to modify parent classes options" do
290
310
  class T2 < TestCLI
291
- option :arg2, :boolean => true
311
+ option :arg2, boolean: true
292
312
  end
293
313
  T2.options[:arg1][:boolean] = false
294
- T2.options[:arg1][:boolean].should be_false
295
- TestCLI.options[:arg1][:boolean].should be_true
314
+ expect(T2.options[:arg1][:boolean]).to be false
315
+ expect(TestCLI.options[:arg1][:boolean]).to be true
296
316
  end
297
317
 
298
- it "should pass its options onto child" do
318
+ it "passes its options onto child" do
299
319
  class T3 < TestCLI
300
- option :arg2, :boolean => true
320
+ option :arg2, boolean: true
301
321
  end
302
322
  class T4 < T3
303
- option :arg3, :boolean => true
323
+ option :arg3, boolean: true
304
324
  end
305
325
  3.times do |i|
306
- T4.options["arg#{i + 1}".to_sym].should be_a(Hash)
326
+ expect(T4.options["arg#{i + 1}".to_sym]).to be_a(Hash)
307
327
  end
308
328
  end
309
329
 
310
- it "should also work with an option that's an array" do
330
+ it "also works with an option that's an array" do
311
331
  class T5 < TestCLI
312
- option :arg2, :default => []
332
+ option :arg2, default: []
313
333
  end
314
334
 
315
335
  class T6 < T5
316
336
  end
317
337
 
318
- T6.options[:arg2].should be_a(Hash)
338
+ expect(T6.options[:arg2]).to be_a(Hash)
319
339
  end
320
340
 
321
341
  end
@@ -8,8 +8,19 @@ class TestCLI
8
8
  end
9
9
 
10
10
  RSpec.configure do |config|
11
- config.filter_run :focus => true
11
+ # Use documentation format
12
+ config.formatter = "doc"
13
+
14
+ # Use color in STDOUT
15
+ config.color = true
16
+
17
+ # Use color not only in STDOUT but also in pagers and files
18
+ config.tty = true
19
+
20
+ # run the examples in random order
21
+ config.order = :rand
22
+
23
+ config.filter_run focus: true
12
24
  config.run_all_when_everything_filtered = true
13
- config.treat_symbols_as_metadata_keys_with_true_values = true
14
25
  config.warnings = true
15
26
  end
metadata CHANGED
@@ -1,71 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "<"
18
- - !ruby/object:Gem::Version
19
- version: '11.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "<"
25
- - !ruby/object:Gem::Version
26
- version: '11.0'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.14'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.14'
41
- - !ruby/object:Gem::Dependency
42
- name: rdoc
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: chefstyle
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.3'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.3'
11
+ date: 2019-01-04 00:00:00.000000000 Z
12
+ dependencies: []
69
13
  description: A simple mixin for CLI interfaces, including option parsing
70
14
  email: info@chef.io
71
15
  executables: []
@@ -97,7 +41,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
41
  requirements:
98
42
  - - ">="
99
43
  - !ruby/object:Gem::Version
100
- version: '0'
44
+ version: '2.5'
101
45
  required_rubygems_version: !ruby/object:Gem::Requirement
102
46
  requirements:
103
47
  - - ">="
@@ -105,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
49
  version: '0'
106
50
  requirements: []
107
51
  rubyforge_project:
108
- rubygems_version: 2.4.5.1
52
+ rubygems_version: 2.7.6
109
53
  signing_key:
110
54
  specification_version: 4
111
55
  summary: A simple mixin for CLI interfaces, including option parsing