clone 1.0.0.alpha → 1.0.0.beta
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 +2 -1
- data/Gemfile +1 -0
- data/LICENSE.txt +22 -0
- data/README.md +22 -1
- data/VERSION +1 -1
- data/bin/clone +7 -0
- data/clone.gemspec +4 -0
- data/docs/readme +16 -0
- data/docs/readme.txt +5 -0
- data/lib/clone.rb +13 -2
- data/lib/clone/config/config.rb +19 -0
- data/lib/clone/config/config.yml +22 -0
- data/lib/clone/config/default_config.yml +20 -0
- data/lib/clone/config/require.rb +3 -0
- data/lib/clone/config/version.rb +10 -0
- data/lib/clone/config/yml.rb +22 -0
- data/lib/clone/config/z_defaults.rb +28 -0
- data/lib/clone/generator/engine.rb +581 -0
- data/lib/clone/generator/terminal.rb +104 -0
- data/lib/clone/helpers/helper_methods.rb +251 -0
- data/lib/clone/helpers/local_methods.rb +150 -0
- data/lib/clone/helpers/require.rb +37 -0
- data/module/Marshal.4.8 +0 -0
- data/module/Marshal.4.8.Z +0 -0
- data/module/gems/commander-4.1.3/.gitignore +6 -0
- data/module/gems/commander-4.1.3/.travis.yml +11 -0
- data/module/gems/commander-4.1.3/DEVELOPMENT +15 -0
- data/module/gems/commander-4.1.3/Gemfile +3 -0
- data/module/gems/commander-4.1.3/History.rdoc +345 -0
- data/module/gems/commander-4.1.3/Manifest +38 -0
- data/module/gems/commander-4.1.3/README.rdoc +375 -0
- data/module/gems/commander-4.1.3/Rakefile +10 -0
- data/module/gems/commander-4.1.3/bin/commander +55 -0
- data/module/gems/commander-4.1.3/commander.gemspec +26 -0
- data/module/gems/commander-4.1.3/lib/commander.rb +32 -0
- data/module/gems/commander-4.1.3/lib/commander/blank.rb +8 -0
- data/module/gems/commander-4.1.3/lib/commander/command.rb +213 -0
- data/module/gems/commander-4.1.3/lib/commander/core_ext.rb +3 -0
- data/module/gems/commander-4.1.3/lib/commander/core_ext/array.rb +26 -0
- data/module/gems/commander-4.1.3/lib/commander/core_ext/object.rb +11 -0
- data/module/gems/commander-4.1.3/lib/commander/delegates.rb +13 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters.rb +8 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/base.rb +18 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/terminal.rb +20 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/terminal/command_help.erb +35 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/terminal/help.erb +36 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/terminal_compact.rb +12 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/terminal_compact/command_help.erb +27 -0
- data/module/gems/commander-4.1.3/lib/commander/help_formatters/terminal_compact/help.erb +29 -0
- data/module/gems/commander-4.1.3/lib/commander/import.rb +10 -0
- data/module/gems/commander-4.1.3/lib/commander/platform.rb +8 -0
- data/module/gems/commander-4.1.3/lib/commander/runner.rb +411 -0
- data/module/gems/commander-4.1.3/lib/commander/user_interaction.rb +521 -0
- data/module/gems/commander-4.1.3/lib/commander/version.rb +3 -0
- data/module/gems/commander-4.1.3/spec/command_spec.rb +157 -0
- data/module/gems/commander-4.1.3/spec/core_ext/array_spec.rb +20 -0
- data/module/gems/commander-4.1.3/spec/core_ext/object_spec.rb +21 -0
- data/module/gems/commander-4.1.3/spec/help_formatters/terminal_spec.rb +67 -0
- data/module/gems/commander-4.1.3/spec/runner_spec.rb +526 -0
- data/module/gems/commander-4.1.3/spec/spec_helper.rb +59 -0
- data/module/gems/commander-4.1.3/spec/ui_spec.rb +30 -0
- data/module/gems/hello.rb +1 -0
- data/module/gems/highline-1.6.19/.gitignore +2 -0
- data/module/gems/highline-1.6.19/AUTHORS +3 -0
- data/module/gems/highline-1.6.19/CHANGELOG +346 -0
- data/module/gems/highline-1.6.19/COPYING +340 -0
- data/module/gems/highline-1.6.19/INSTALL +55 -0
- data/module/gems/highline-1.6.19/LICENSE +7 -0
- data/module/gems/highline-1.6.19/README.rdoc +63 -0
- data/module/gems/highline-1.6.19/Rakefile +50 -0
- data/module/gems/highline-1.6.19/TODO +6 -0
- data/module/gems/highline-1.6.19/examples/ansi_colors.rb +38 -0
- data/module/gems/highline-1.6.19/examples/asking_for_arrays.rb +18 -0
- data/module/gems/highline-1.6.19/examples/basic_usage.rb +75 -0
- data/module/gems/highline-1.6.19/examples/color_scheme.rb +32 -0
- data/module/gems/highline-1.6.19/examples/get_character.rb +12 -0
- data/module/gems/highline-1.6.19/examples/limit.rb +12 -0
- data/module/gems/highline-1.6.19/examples/menus.rb +65 -0
- data/module/gems/highline-1.6.19/examples/overwrite.rb +19 -0
- data/module/gems/highline-1.6.19/examples/page_and_wrap.rb +322 -0
- data/module/gems/highline-1.6.19/examples/password.rb +7 -0
- data/module/gems/highline-1.6.19/examples/repeat_entry.rb +21 -0
- data/module/gems/highline-1.6.19/examples/trapping_eof.rb +22 -0
- data/module/gems/highline-1.6.19/examples/using_readline.rb +17 -0
- data/module/gems/highline-1.6.19/highline.gemspec +37 -0
- data/module/gems/highline-1.6.19/lib/highline.rb +1012 -0
- data/module/gems/highline-1.6.19/lib/highline/color_scheme.rb +134 -0
- data/module/gems/highline-1.6.19/lib/highline/compatibility.rb +16 -0
- data/module/gems/highline-1.6.19/lib/highline/import.rb +41 -0
- data/module/gems/highline-1.6.19/lib/highline/menu.rb +398 -0
- data/module/gems/highline-1.6.19/lib/highline/question.rb +475 -0
- data/module/gems/highline-1.6.19/lib/highline/simulate.rb +48 -0
- data/module/gems/highline-1.6.19/lib/highline/string_extensions.rb +131 -0
- data/module/gems/highline-1.6.19/lib/highline/style.rb +181 -0
- data/module/gems/highline-1.6.19/lib/highline/system_extensions.rb +222 -0
- data/module/gems/highline-1.6.19/setup.rb +1360 -0
- data/module/gems/highline-1.6.19/site/.cvsignore +1 -0
- data/module/gems/highline-1.6.19/site/highline.css +65 -0
- data/module/gems/highline-1.6.19/site/images/logo.png +0 -0
- data/module/gems/highline-1.6.19/site/index.html +58 -0
- data/module/gems/highline-1.6.19/test/string_methods.rb +32 -0
- data/module/gems/highline-1.6.19/test/tc_color_scheme.rb +96 -0
- data/module/gems/highline-1.6.19/test/tc_highline.rb +1128 -0
- data/module/gems/highline-1.6.19/test/tc_import.rb +52 -0
- data/module/gems/highline-1.6.19/test/tc_menu.rb +439 -0
- data/module/gems/highline-1.6.19/test/tc_string_extension.rb +20 -0
- data/module/gems/highline-1.6.19/test/tc_string_highline.rb +38 -0
- data/module/gems/highline-1.6.19/test/tc_style.rb +567 -0
- data/module/gems/highline-1.6.19/test/ts_all.rb +16 -0
- data/module/latest_specs.4.8 +0 -0
- data/module/latest_specs.4.8.gz +0 -0
- data/module/prerelease_specs.4.8 +0 -0
- data/module/prerelease_specs.4.8.gz +0 -0
- data/module/specs.4.8 +0 -0
- data/module/specs.4.8.gz +0 -0
- data/samples/blather/restlike/Gemfile +4 -0
- data/samples/blather/restlike/cmd.yml +1 -0
- data/samples/blather/restlike/lib/blather.rb +9 -0
- data/samples/blather/restlike/lib/blather/dsl/api.rb +78 -0
- data/samples/blather/restlike/lib/blather/dsl/call.rb +13 -0
- data/samples/blather/restlike/lib/blather/dsl/client.rb +58 -0
- data/samples/blather/restlike/lib/blather/dsl/config.rb +11 -0
- data/samples/blather/restlike/lib/blather/dsl/extraDSL.rb +163 -0
- data/samples/blather/restlike/lib/blather/meta/require.rb +8 -0
- data/samples/blather/restlike/lib/blather/meta/xmpp.yml +5 -0
- data/samples/blather/restlike/lib/blather/vendors/xmpp_default.rb +27 -0
- data/samples/blather/restlike/readme +2 -0
- data/samples/grape/init/Gemfile +2 -0
- data/samples/grape/init/cmd.yml +3 -0
- data/samples/grape/init/config.ru +2 -0
- data/samples/grape/init/docs/grape/documentation.txt +939 -0
- data/samples/grape/init/docs/grape/generate_rest_routes.rb +37 -0
- data/samples/grape/init/docs/grape/ls_routes.rb +31 -0
- data/samples/grape/init/lib/grape.rb +4 -0
- data/samples/grape/init/lib/grape/meta/subclasses.rb +20 -0
- data/samples/grape/init/lib/grape/xpath/app.rb +30 -0
- data/samples/grape/init/lib/grape/xpath/ruotes.rb +6 -0
- data/samples/grape/init/readme +1 -0
- data/samples/grape/readme +29 -0
- data/samples/grape/vendor/lib/grape/vendors/v1/rest.rb +57 -0
- data/samples/mongoid/cmd.yml +1 -0
- data/samples/mongoid/init/Gemfile +3 -0
- data/samples/mongoid/init/cmd.yml +2 -0
- data/samples/mongoid/init/docs/mongoid/ModelsRelations.rb +11 -0
- data/samples/mongoid/init/docs/mongoid/documents.xls +0 -0
- data/samples/mongoid/init/docs/mongoid/generate_modelsToDocs.rb +25 -0
- data/samples/mongoid/init/docs/mongoid/modelsToDocs.rb +25 -0
- data/samples/mongoid/init/docs/mongoid/relations.txt +1354 -0
- data/samples/mongoid/init/lib/mongoid.rb +44 -0
- data/samples/mongoid/init/lib/mongoid/dsl/extraDSL_CRUD.rb +446 -0
- data/samples/mongoid/init/lib/mongoid/dsl/extraDSL_MP.rb +517 -0
- data/samples/mongoid/init/lib/mongoid/dsl/init.rb +37 -0
- data/samples/mongoid/init/lib/mongoid/dsl/params.rb +67 -0
- data/samples/mongoid/init/lib/mongoid/meta/banned.rb +147 -0
- data/samples/mongoid/init/lib/mongoid/meta/control.yml +13 -0
- data/samples/mongoid/init/lib/mongoid/meta/mongoid.yml +6 -0
- data/samples/mongoid/init/lib/mongoid/meta/mpatch.rb +14 -0
- data/samples/mongoid/model/lib/mongoid/models/model.rb +28 -0
- data/samples/mongoid/readme +33 -0
- data/samples/rack/init/Gemfile +10 -0
- data/samples/rack/init/cmd.yml +2 -0
- data/samples/rack/init/config.ru +1 -0
- data/samples/rack/init/docs/rack/rake introducing.txt +60 -0
- data/samples/rack/init/docs/rack/webservers/Thin +43 -0
- data/samples/rack/init/docs/rack/webservers/ebb +72 -0
- data/samples/rack/init/docs/rack/webservers/fcgi +103 -0
- data/samples/rack/init/docs/rack/webservers/mongrel +74 -0
- data/samples/rack/init/docs/rack/webservers/passenger +37 -0
- data/samples/rack/init/docs/rack/webservers/scgi +188 -0
- data/samples/rack/init/lib/rack.rb +1 -0
- data/samples/rack/init/lib/rack/meta/webserver/thin.rb +45 -0
- data/samples/rack/init/lib/rack/meta/webserver/thin.yml +6 -0
- data/samples/rack/init/server.rb +0 -0
- data/samples/rack/readme +13 -0
- data/samples/rest_client/init/Gemfile +5 -0
- data/samples/rest_client/init/boot.rb +2 -0
- data/samples/rest_client/init/cmd.yml +1 -0
- data/samples/rest_client/init/config/rest_client/defaults.rb +16 -0
- data/samples/rest_client/init/docs/rest_client/simple overlook +251 -0
- data/samples/rest_client/init/test/rest_client/rest_dsl.rb +5 -0
- data/samples/rest_client/readme +7 -0
- data/samples/scripts/lines_counter/lines_number.rb +32 -0
- data/samples/scripts/lines_counter/readme +5 -0
- data/samples/scripts/readme +1 -0
- metadata +197 -7
- data/lib/clone/cms.rb +0 -56
- data/lib/clone/ext.rb +0 -77
- data/sample/test.rb +0 -30
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Commander::Command do
|
|
4
|
+
|
|
5
|
+
before :each do
|
|
6
|
+
mock_terminal
|
|
7
|
+
create_test_command
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'Options' do
|
|
11
|
+
before :each do
|
|
12
|
+
@options = Commander::Command::Options.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should act like an open struct" do
|
|
16
|
+
@options.send = 'mail'
|
|
17
|
+
@options.call = true
|
|
18
|
+
@options.send.should eq('mail')
|
|
19
|
+
@options.call.should eq(true)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should allow __send__ to function as always" do
|
|
23
|
+
@options.send = 'foo'
|
|
24
|
+
@options.__send__(:send).should eq('foo')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "#option" do
|
|
29
|
+
it "should add options" do
|
|
30
|
+
lambda { @command.option '--recursive' }.should change(@command.options, :length).from(1).to(2)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should allow procs as option handlers" do
|
|
34
|
+
@command.option('--recursive') { |recursive| recursive.should be_true }
|
|
35
|
+
@command.run '--recursive'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should allow usage of common method names" do
|
|
39
|
+
@command.option '--open file'
|
|
40
|
+
@command.when_called { |_, options| options.open.should eq('foo') }
|
|
41
|
+
@command.run '--open', 'foo'
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "#run" do
|
|
46
|
+
describe "should invoke #when_called" do
|
|
47
|
+
it "with arguments seperated from options" do
|
|
48
|
+
@command.when_called { |args, options| args.join(' ').should eq('just some args') }
|
|
49
|
+
@command.run '--verbose', 'just', 'some', 'args'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "calling the #call method by default when an object is called" do
|
|
53
|
+
object = mock 'Object'
|
|
54
|
+
object.should_receive(:call).once
|
|
55
|
+
@command.when_called object
|
|
56
|
+
@command.run 'foo'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should allow #action as an alias to #when_called" do
|
|
60
|
+
object = mock 'Object'
|
|
61
|
+
object.should_receive(:call).once
|
|
62
|
+
@command.action object
|
|
63
|
+
@command.run 'foo'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "calling an arbitrary method when an object is called" do
|
|
67
|
+
object = mock 'Object'
|
|
68
|
+
object.should_receive(:foo).once
|
|
69
|
+
@command.when_called object, :foo
|
|
70
|
+
@command.run 'foo'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should raise an error when no handler is present" do
|
|
74
|
+
lambda { @command.when_called }.should raise_error(ArgumentError)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "should populate options with" do
|
|
79
|
+
it "boolean values" do
|
|
80
|
+
@command.option '--[no-]toggle'
|
|
81
|
+
@command.when_called { |_, options| options.toggle.should be_true }
|
|
82
|
+
@command.run '--toggle'
|
|
83
|
+
@command.when_called { |_, options| options.toggle.should be_false }
|
|
84
|
+
@command.run '--no-toggle'
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "mandatory arguments" do
|
|
88
|
+
@command.option '--file FILE'
|
|
89
|
+
@command.when_called { |_, options| options.file.should eq('foo') }
|
|
90
|
+
@command.run '--file', 'foo'
|
|
91
|
+
lambda { @command.run '--file' }.should raise_error(OptionParser::MissingArgument)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe "optional arguments" do
|
|
95
|
+
before do
|
|
96
|
+
@command.option '--use-config [file] '
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should return the argument when provided" do
|
|
100
|
+
@command.when_called { |_, options| options.use_config.should eq('foo') }
|
|
101
|
+
@command.run '--use-config', 'foo'
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should return true when present without an argument" do
|
|
105
|
+
@command.when_called { |_, options| options.use_config.should be_true }
|
|
106
|
+
@command.run '--use-config'
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "should return nil when not present" do
|
|
110
|
+
@command.when_called { |_, options| options.use_config.should be_nil }
|
|
111
|
+
@command.run
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
describe "typed arguments" do
|
|
116
|
+
before do
|
|
117
|
+
@command.option '--interval N', Integer
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should parse valid values" do
|
|
121
|
+
@command.when_called { |_, options| options.interval.should eq(5) }
|
|
122
|
+
@command.run '--interval', '5'
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should reject invalid values" do
|
|
126
|
+
lambda { @command.run '--interval', 'invalid' }.should raise_error(OptionParser::InvalidArgument)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "lists" do
|
|
131
|
+
@command.option '--fav COLORS', Array
|
|
132
|
+
@command.when_called { |_, options| options.fav.should eq(['red', 'green', 'blue']) }
|
|
133
|
+
@command.run '--fav', 'red,green,blue'
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "lists with multi-word items" do
|
|
137
|
+
@command.option '--fav MOVIES', Array
|
|
138
|
+
@command.when_called { |_, options| options.fav.should eq(['super\ bad', 'nightmare']) }
|
|
139
|
+
@command.run '--fav', 'super\ bad,nightmare'
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "defaults" do
|
|
143
|
+
@command.option '--files LIST', Array
|
|
144
|
+
@command.option '--interval N', Integer
|
|
145
|
+
@command.when_called do |_, options|
|
|
146
|
+
options.default \
|
|
147
|
+
:files => ['foo', 'bar'],
|
|
148
|
+
:interval => 5
|
|
149
|
+
options.files.should eq(['foo', 'bar'])
|
|
150
|
+
options.interval.should eq(15)
|
|
151
|
+
end
|
|
152
|
+
@command.run '--interval', '15'
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Array do
|
|
4
|
+
|
|
5
|
+
describe "#parse" do
|
|
6
|
+
it "should seperate a list of words into an array" do
|
|
7
|
+
Array.parse('just a test').should eq(['just', 'a', 'test'])
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should preserve escaped whitespace" do
|
|
11
|
+
Array.parse('just a\ test').should eq(['just', 'a test'])
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should match %w behavior with multiple backslashes" do
|
|
15
|
+
str = 'just a\\ test'
|
|
16
|
+
Array.parse(str).should eq(eval("%w(#{str})"))
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Object do
|
|
4
|
+
|
|
5
|
+
describe "#get_binding" do
|
|
6
|
+
it "should return the objects binding" do
|
|
7
|
+
lambda {}.get_binding.should be_instance_of(Binding)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "#method_missing" do
|
|
12
|
+
it "should preserve its original behavior for missing methods" do
|
|
13
|
+
lambda { i_am_a_missing_method() }.should raise_error(NoMethodError)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should preserve its original behavior for missing variables" do
|
|
17
|
+
lambda { i_am_a_missing_variable }.should raise_error(NameError)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Commander::HelpFormatter::Terminal do
|
|
4
|
+
|
|
5
|
+
before :each do
|
|
6
|
+
mock_terminal
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "global help" do
|
|
10
|
+
before :each do
|
|
11
|
+
new_command_runner 'help' do
|
|
12
|
+
command :'install gem' do |c|
|
|
13
|
+
c.syntax = 'foo install gem [options]'
|
|
14
|
+
c.summary = 'Install some gem'
|
|
15
|
+
end
|
|
16
|
+
end.run!
|
|
17
|
+
@global_help = @output.string
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "should display" do
|
|
21
|
+
it "the command name" do
|
|
22
|
+
@global_help.should include('install gem')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "the summary" do
|
|
26
|
+
@global_help.should include('Install some gem')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "command help" do
|
|
32
|
+
before :each do
|
|
33
|
+
new_command_runner 'help', 'install', 'gem' do
|
|
34
|
+
command :'install gem' do |c|
|
|
35
|
+
c.syntax = 'foo install gem [options]'
|
|
36
|
+
c.summary = 'Install some gem'
|
|
37
|
+
c.description = 'Install some gem, blah blah blah'
|
|
38
|
+
c.example 'one', 'two'
|
|
39
|
+
c.example 'three', 'four'
|
|
40
|
+
end
|
|
41
|
+
end.run!
|
|
42
|
+
@command_help = @output.string
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "should display" do
|
|
46
|
+
it "the command name" do
|
|
47
|
+
@command_help.should include('install gem')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "the description" do
|
|
51
|
+
@command_help.should include('Install some gem, blah blah blah')
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "all examples" do
|
|
55
|
+
@command_help.should include('# one')
|
|
56
|
+
@command_help.should include('two')
|
|
57
|
+
@command_help.should include('# three')
|
|
58
|
+
@command_help.should include('four')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "the syntax" do
|
|
62
|
+
@command_help.should include('foo install gem [options]')
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Commander do
|
|
4
|
+
before :each do
|
|
5
|
+
$stderr = StringIO.new
|
|
6
|
+
mock_terminal
|
|
7
|
+
create_test_command
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "#program" do
|
|
11
|
+
it "should set / get program information" do
|
|
12
|
+
program :name, 'test'
|
|
13
|
+
program(:name).should eq('test')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should allow arbitrary blocks of global help documentation" do
|
|
17
|
+
program :help, 'Copyright', 'TJ Holowaychuk'
|
|
18
|
+
program(:help)['Copyright'].should eq('TJ Holowaychuk')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should raise an error when required info has not been set" do
|
|
22
|
+
new_command_runner '--help'
|
|
23
|
+
program :version, ''
|
|
24
|
+
lambda { run! }.should raise_error(Commander::Runner::CommandError)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should allow aliases of help formatters" do
|
|
28
|
+
program :help_formatter, :compact
|
|
29
|
+
program(:help_formatter).should eq(Commander::HelpFormatter::TerminalCompact)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "#command" do
|
|
34
|
+
it "should return a command instance when only the name is passed" do
|
|
35
|
+
command(:meta).should be_instance_of(Commander::Command)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should return nil when the command does not exist" do
|
|
39
|
+
command(:im_not_real).should be_nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "#separate_switches_from_description" do
|
|
44
|
+
it "should seperate switches and description returning both" do
|
|
45
|
+
switches, description = *Commander::Runner.separate_switches_from_description('-h', '--help', 'display help')
|
|
46
|
+
switches.should eq(['-h', '--help'])
|
|
47
|
+
description.should eq('display help')
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "#switch_to_sym" do
|
|
52
|
+
it "should return a symbol based on the switch name" do
|
|
53
|
+
Commander::Runner.switch_to_sym('--trace').should eq(:trace)
|
|
54
|
+
Commander::Runner.switch_to_sym('--foo-bar').should eq(:foo_bar)
|
|
55
|
+
Commander::Runner.switch_to_sym('--[no-]feature"').should eq(:feature)
|
|
56
|
+
Commander::Runner.switch_to_sym('--[no-]feature ARG').should eq(:feature)
|
|
57
|
+
Commander::Runner.switch_to_sym('--file [ARG]').should eq(:file)
|
|
58
|
+
Commander::Runner.switch_to_sym('--colors colors').should eq(:colors)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "#alias_command" do
|
|
63
|
+
it "should alias a command" do
|
|
64
|
+
alias_command :foo, :meta
|
|
65
|
+
command(:foo).should eq(command(:meta))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should pass arguments passed to the alias when called" do
|
|
69
|
+
gem_name = ''
|
|
70
|
+
new_command_runner 'install', 'gem', 'commander' do
|
|
71
|
+
command :install do |c|
|
|
72
|
+
c.option '--gem-name NAME', 'Install a gem'
|
|
73
|
+
c.when_called { |_, options| gem_name = options.gem_name }
|
|
74
|
+
end
|
|
75
|
+
alias_command :'install gem', :install, '--gem-name'
|
|
76
|
+
end.run!
|
|
77
|
+
gem_name.should eq('commander')
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "#global_option" do
|
|
82
|
+
it "should be invoked when used in the args list" do
|
|
83
|
+
file = ''
|
|
84
|
+
new_command_runner 'test', '--config', 'foo' do
|
|
85
|
+
global_option('--config FILE') { |f| file = f }
|
|
86
|
+
end.run!
|
|
87
|
+
file.should eq('foo')
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should be inherited by commands" do
|
|
91
|
+
quiet = nil
|
|
92
|
+
new_command_runner 'foo', '--quiet' do
|
|
93
|
+
global_option('--quiet', 'Suppress output')
|
|
94
|
+
command :foo do |c|
|
|
95
|
+
c.when_called { |_, options| quiet = options.quiet }
|
|
96
|
+
end
|
|
97
|
+
end.run!
|
|
98
|
+
quiet.should be_true
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should be inherited by commands even when a block is present" do
|
|
102
|
+
quiet = nil
|
|
103
|
+
new_command_runner 'foo', '--quiet' do
|
|
104
|
+
global_option('--quiet', 'Suppress output') {}
|
|
105
|
+
command :foo do |c|
|
|
106
|
+
c.when_called { |_, options| quiet = options.quiet }
|
|
107
|
+
end
|
|
108
|
+
end.run!
|
|
109
|
+
quiet.should be_true
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe "#parse_global_options" do
|
|
114
|
+
it 'should parse global options before command' do
|
|
115
|
+
global_option = nil
|
|
116
|
+
new_command_runner('--testing-global', 'foo') do
|
|
117
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
118
|
+
|
|
119
|
+
command :foo do |c|
|
|
120
|
+
c.when_called {}
|
|
121
|
+
end
|
|
122
|
+
end.run!
|
|
123
|
+
global_option.should eq('MAGIC')
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'should parse global options after command' do
|
|
127
|
+
global_option = nil
|
|
128
|
+
new_command_runner('foo','--testing-global') do
|
|
129
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
130
|
+
|
|
131
|
+
command :foo do |c|
|
|
132
|
+
c.when_called {}
|
|
133
|
+
end
|
|
134
|
+
end.run!
|
|
135
|
+
global_option.should eq('MAGIC')
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'should parse global options placed before command options' do
|
|
139
|
+
global_option = nil
|
|
140
|
+
new_command_runner('foo', '--testing-global', '--testing-command') do
|
|
141
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
142
|
+
|
|
143
|
+
command :foo do |c|
|
|
144
|
+
c.option('--testing-command') {}
|
|
145
|
+
c.when_called {}
|
|
146
|
+
end
|
|
147
|
+
end.run!
|
|
148
|
+
|
|
149
|
+
global_option.should eq('MAGIC')
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'should parse global options placed after command options' do
|
|
153
|
+
global_option = nil
|
|
154
|
+
new_command_runner('foo', '--testing-command', '--testing-global') do
|
|
155
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
156
|
+
|
|
157
|
+
command :foo do |c|
|
|
158
|
+
c.option('--testing-command') {}
|
|
159
|
+
c.when_called {}
|
|
160
|
+
end
|
|
161
|
+
end.run!
|
|
162
|
+
|
|
163
|
+
global_option.should eq('MAGIC')
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it 'should parse global options surrounded by command options' do
|
|
167
|
+
global_option = nil
|
|
168
|
+
new_command_runner('foo', '--testing-command', '--testing-global', '--other-command') do
|
|
169
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
170
|
+
|
|
171
|
+
command :foo do |c|
|
|
172
|
+
c.option('--testing-command') {}
|
|
173
|
+
c.option('--other-command') {}
|
|
174
|
+
c.when_called {}
|
|
175
|
+
end
|
|
176
|
+
end.run!
|
|
177
|
+
|
|
178
|
+
global_option.should eq('MAGIC')
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it 'should not parse command options' do
|
|
182
|
+
global_option = nil
|
|
183
|
+
command_option = nil
|
|
184
|
+
new_command_runner('foo', '--testing-command', '--testing-global') do
|
|
185
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
186
|
+
|
|
187
|
+
command :foo do |c|
|
|
188
|
+
c.option('--testing-command') { command_option = 'NO!' }
|
|
189
|
+
c.when_called {}
|
|
190
|
+
end
|
|
191
|
+
end.parse_global_options
|
|
192
|
+
|
|
193
|
+
command_option.should be_nil
|
|
194
|
+
global_option.should eq('MAGIC')
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'should not affect command arguments with values' do
|
|
198
|
+
global_option = nil
|
|
199
|
+
command_option = nil
|
|
200
|
+
new_command_runner('foo', '--testing-command', 'bar', '--testing-global') do
|
|
201
|
+
global_option('--testing-global') { global_option = 'MAGIC' }
|
|
202
|
+
|
|
203
|
+
command :foo do |c|
|
|
204
|
+
c.option('--testing-command VALUE') { |v| command_option = v }
|
|
205
|
+
c.when_called {}
|
|
206
|
+
end
|
|
207
|
+
end.run!
|
|
208
|
+
|
|
209
|
+
command_option.should eq('bar')
|
|
210
|
+
global_option.should eq('MAGIC')
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
it 'should not affect global arguments with values' do
|
|
214
|
+
global_option = nil
|
|
215
|
+
new_command_runner('foo', '--testing-command', '--testing-global', 'bar') do
|
|
216
|
+
global_option('--testing-global VALUE') { |v| global_option = v }
|
|
217
|
+
|
|
218
|
+
command :foo do |c|
|
|
219
|
+
c.option('--testing-command') { }
|
|
220
|
+
c.when_called {}
|
|
221
|
+
end
|
|
222
|
+
end.run!
|
|
223
|
+
|
|
224
|
+
global_option.should eq('bar')
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it 'should allow global arguments with values before command arguments (github issue #8)' do
|
|
228
|
+
global_option = nil
|
|
229
|
+
command_option = nil
|
|
230
|
+
new_command_runner('foo', '--config', 'path', 'bar') do
|
|
231
|
+
global_option('--config VALUE') { |v| global_option = v }
|
|
232
|
+
|
|
233
|
+
command :foo do |c|
|
|
234
|
+
c.option('bar') { command_option = 'bar' }
|
|
235
|
+
c.when_called {}
|
|
236
|
+
end
|
|
237
|
+
end.run!
|
|
238
|
+
|
|
239
|
+
global_option.should eq('path')
|
|
240
|
+
command_option.should eq('bar')
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
describe "#remove_global_options" do
|
|
246
|
+
it "should remove only specified switches" do
|
|
247
|
+
options, args = [], []
|
|
248
|
+
options << { :switches => ['-t', '--trace'] }
|
|
249
|
+
options << { :switches => ['--help'] }
|
|
250
|
+
options << { :switches => ['--paths PATHS'] }
|
|
251
|
+
args << '-t'
|
|
252
|
+
args << '--help'
|
|
253
|
+
args << '--command'
|
|
254
|
+
args << '--command-with-arg' << 'rawr'
|
|
255
|
+
args << '--paths' << '"lib/**/*.js","spec/**/*.js"'
|
|
256
|
+
command_runner.remove_global_options options, args
|
|
257
|
+
args.should eq(['--command', '--command-with-arg', 'rawr'])
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
it "should not swallow an argument unless it expects an argument" do
|
|
261
|
+
options, args = [], []
|
|
262
|
+
options << { :switches => ['-n', '--no-arg'] }
|
|
263
|
+
options << { :switches => ['-y', '--yes ARG'] }
|
|
264
|
+
options << { :switches => ['-a', '--alternative=ARG'] }
|
|
265
|
+
args << '-n' << 'alpha'
|
|
266
|
+
args << '--yes' << 'deleted'
|
|
267
|
+
args << '-a' << 'deleted'
|
|
268
|
+
args << 'beta'
|
|
269
|
+
command_runner.remove_global_options options, args
|
|
270
|
+
args.should eq(['alpha', 'beta'])
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
describe "--trace" do
|
|
275
|
+
it "should display pretty errors by default" do
|
|
276
|
+
pending("JRuby's Kernel.abort implementation is not testable") if Commander::Platform::jruby?
|
|
277
|
+
lambda {
|
|
278
|
+
new_command_runner 'foo' do
|
|
279
|
+
command(:foo) { |c| c.when_called { raise 'cookies!' } }
|
|
280
|
+
end.run!
|
|
281
|
+
}.should raise_error(SystemExit, /error: cookies!. Use --trace/)
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
it "should display callstack when using this switch" do
|
|
285
|
+
lambda {
|
|
286
|
+
new_command_runner 'foo', '--trace' do
|
|
287
|
+
command(:foo) { |c| c.when_called { raise 'cookies!' } }
|
|
288
|
+
end.run!
|
|
289
|
+
}.should raise_error(RuntimeError)
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
describe "--version" do
|
|
294
|
+
it "should output program version" do
|
|
295
|
+
run('--version').should eq("test 1.2.3\n")
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
describe "--help" do
|
|
300
|
+
it "should not output an invalid command message" do
|
|
301
|
+
run('--help').should_not == "invalid command. Use --help for more information\n"
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it "can be used before or after the command and options" do
|
|
305
|
+
run('test', '--help').should eq("Implement help for test here\n")
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
describe "with invalid options" do
|
|
310
|
+
it "should output an invalid option message" do
|
|
311
|
+
pending("JRuby's Kernel.abort implementation is not testable") if Commander::Platform::jruby?
|
|
312
|
+
lambda {
|
|
313
|
+
run('test', '--invalid-option')
|
|
314
|
+
}.should raise_error(SystemExit, /invalid option: --invalid-option/)
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
describe "with invalid command passed" do
|
|
319
|
+
it "should output an invalid command message" do
|
|
320
|
+
pending("JRuby's Kernel.abort implementation is not testable") if Commander::Platform::jruby?
|
|
321
|
+
lambda {
|
|
322
|
+
run('foo')
|
|
323
|
+
}.should raise_error(SystemExit, /invalid command. Use --help for more information/)
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
describe "with invalid command passed to help" do
|
|
328
|
+
it "should output an invalid command message" do
|
|
329
|
+
pending("JRuby's Kernel.abort implementation is not testable") if Commander::Platform::jruby?
|
|
330
|
+
lambda {
|
|
331
|
+
run('help', 'does_not_exist')
|
|
332
|
+
}.should raise_error(SystemExit, /invalid command. Use --help for more information/)
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
describe "with invalid command passed to --help" do
|
|
337
|
+
it "should output an invalid command message" do
|
|
338
|
+
pending("JRuby's Kernel.abort implementation is not testable") if Commander::Platform::jruby?
|
|
339
|
+
lambda {
|
|
340
|
+
run('--help', 'does_not_exist')
|
|
341
|
+
}.should raise_error(SystemExit, /invalid command. Use --help for more information/)
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
describe "with invalid option passed to --help" do
|
|
346
|
+
it "should output an invalid option message" do
|
|
347
|
+
pending("JRuby's Kernel.abort implementation is not testable") if Commander::Platform::jruby?
|
|
348
|
+
lambda {
|
|
349
|
+
run('--help', 'test', '--invalid-option')
|
|
350
|
+
}.should raise_error(SystemExit, /invalid option: --invalid-option/)
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
describe "#valid_command_names_from" do
|
|
355
|
+
it "should return array of valid command names" do
|
|
356
|
+
command('foo bar') {}
|
|
357
|
+
command('foo bar foo') {}
|
|
358
|
+
command_runner.valid_command_names_from('foo', 'bar', 'foo').sort.should eq(['foo bar', 'foo bar foo'])
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
it "should return empty array when no possible command names exist" do
|
|
362
|
+
command_runner.valid_command_names_from('fake', 'command', 'name').should eq([])
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
it "should match exact commands only" do
|
|
366
|
+
command('foo') {}
|
|
367
|
+
command_runner.valid_command_names_from('foobar').should eq([])
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
describe "#command_name_from_args" do
|
|
372
|
+
it "should locate command within arbitrary arguments passed" do
|
|
373
|
+
new_command_runner '--help', '--arbitrary', 'test'
|
|
374
|
+
command_runner.command_name_from_args.should eq('test')
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
it "should support multi-word commands" do
|
|
378
|
+
new_command_runner '--help', '--arbitrary', 'some', 'long', 'command', 'foo'
|
|
379
|
+
command('some long command') {}
|
|
380
|
+
command_runner.command_name_from_args.should eq('some long command')
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
it "should match the longest possible command" do
|
|
384
|
+
new_command_runner '--help', '--arbitrary', 'foo', 'bar', 'foo'
|
|
385
|
+
command('foo bar') {}
|
|
386
|
+
command('foo bar foo') {}
|
|
387
|
+
command_runner.command_name_from_args.should eq('foo bar foo' )
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
it "should use the left-most command name when multiple are present" do
|
|
391
|
+
new_command_runner 'help', 'test'
|
|
392
|
+
command_runner.command_name_from_args.should eq('help' )
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
describe "#active_command" do
|
|
397
|
+
it "should resolve the active command" do
|
|
398
|
+
new_command_runner '--help', 'test'
|
|
399
|
+
command_runner.active_command.should be_instance_of(Commander::Command)
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
it "should resolve active command when invalid options are passed" do
|
|
403
|
+
new_command_runner '--help', 'test', '--arbitrary'
|
|
404
|
+
command_runner.active_command.should be_instance_of(Commander::Command)
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
it "should return nil when the command is not found" do
|
|
408
|
+
new_command_runner 'foo'
|
|
409
|
+
command_runner.active_command.should be_nil
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
describe "#default_command" do
|
|
414
|
+
it "should allow you to default any command when one is not explicitly passed" do
|
|
415
|
+
new_command_runner '--trace' do
|
|
416
|
+
default_command :meta
|
|
417
|
+
command(:meta).should_receive(:run).once
|
|
418
|
+
command_runner.active_command.should eq(command(:meta))
|
|
419
|
+
end.run!
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
it "should not prevent other commands from being called" do
|
|
423
|
+
new_command_runner 'foo', 'bar', '--trace' do
|
|
424
|
+
default_command :meta
|
|
425
|
+
command(:'foo bar'){}
|
|
426
|
+
command(:'foo bar').should_receive(:run).once
|
|
427
|
+
command_runner.active_command.should eq(command(:'foo bar'))
|
|
428
|
+
end.run!
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
it "should not prevent longer commands to use the same words as the default" do
|
|
432
|
+
new_command_runner 'foo', 'bar', 'something'
|
|
433
|
+
default_command :'foo bar'
|
|
434
|
+
command(:'foo bar'){}
|
|
435
|
+
command(:'foo bar something'){}
|
|
436
|
+
command_runner.active_command.should eq(command(:'foo bar something'))
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
it "should allow defaulting of command aliases" do
|
|
440
|
+
new_command_runner '--trace' do
|
|
441
|
+
default_command :foobar
|
|
442
|
+
alias_command :foobar, :meta
|
|
443
|
+
command(:meta).should_receive(:run).once
|
|
444
|
+
end.run!
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
describe "should function correctly" do
|
|
449
|
+
it "when options are passed before the command name" do
|
|
450
|
+
new_command_runner '--verbose', 'test', 'foo', 'bar' do
|
|
451
|
+
@command.when_called do |args, options|
|
|
452
|
+
args.should eq(['foo', 'bar'])
|
|
453
|
+
options.verbose.should be_true
|
|
454
|
+
end
|
|
455
|
+
end.run!
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
it "when options are passed after the command name" do
|
|
459
|
+
new_command_runner 'test', '--verbose', 'foo', 'bar' do
|
|
460
|
+
@command.when_called do |args, options|
|
|
461
|
+
args.should eq(['foo', 'bar'])
|
|
462
|
+
options.verbose.should be_true
|
|
463
|
+
end
|
|
464
|
+
end.run!
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
it "when an argument passed is the same name as the command" do
|
|
468
|
+
new_command_runner 'test', '--verbose', 'foo', 'test', 'bar' do
|
|
469
|
+
@command.when_called do |args, options|
|
|
470
|
+
args.should eq(['foo', 'test', 'bar'])
|
|
471
|
+
options.verbose.should be_true
|
|
472
|
+
end
|
|
473
|
+
end.run!
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
it "when using multi-word commands" do
|
|
477
|
+
new_command_runner '--verbose', 'my', 'command', 'something', 'foo', 'bar' do
|
|
478
|
+
command('my command') { |c| c.option('--verbose') }
|
|
479
|
+
command_runner.command_name_from_args.should eq('my command')
|
|
480
|
+
command_runner.args_without_command_name.should eq(['--verbose', 'something', 'foo', 'bar'])
|
|
481
|
+
end.run!
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
it "when using multi-word commands with parts of the command name as arguments" do
|
|
485
|
+
new_command_runner '--verbose', 'my', 'command', 'something', 'my', 'command' do
|
|
486
|
+
command('my command') { |c| c.option('--verbose') }
|
|
487
|
+
command_runner.command_name_from_args.should eq('my command')
|
|
488
|
+
command_runner.args_without_command_name.should eq(['--verbose', 'something', 'my', 'command'])
|
|
489
|
+
end.run!
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it "when using multi-word commands with other commands using the same words" do
|
|
493
|
+
new_command_runner '--verbose', 'my', 'command', 'something', 'my', 'command' do
|
|
494
|
+
command('my command') {}
|
|
495
|
+
command('my command something') { |c| c.option('--verbose') }
|
|
496
|
+
command_runner.command_name_from_args.should eq('my command something')
|
|
497
|
+
command_runner.args_without_command_name.should eq(['--verbose', 'my', 'command'])
|
|
498
|
+
end.run!
|
|
499
|
+
end
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
describe "options with optional arguments" do
|
|
503
|
+
it "should return the argument when it is specified" do
|
|
504
|
+
new_command_runner 'foo', '--optional', 'arg1' do
|
|
505
|
+
command('foo') do |c|
|
|
506
|
+
c.option('--optional [argument]')
|
|
507
|
+
c.when_called do |_, options|
|
|
508
|
+
options.optional.should eq('arg1')
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
end.run!
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
it "should return true when no argument is specified for the option" do
|
|
515
|
+
new_command_runner 'foo', '--optional' do
|
|
516
|
+
command('foo') do |c|
|
|
517
|
+
c.option('--optional [argument]')
|
|
518
|
+
c.when_called do |_, options|
|
|
519
|
+
options.optional.should be_true
|
|
520
|
+
end
|
|
521
|
+
end
|
|
522
|
+
end.run!
|
|
523
|
+
end
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
end
|