thor 0.16.0 → 0.17.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.
Files changed (52) hide show
  1. data/.rspec +1 -0
  2. data/.travis.yml +2 -1
  3. data/CHANGELOG.rdoc +8 -0
  4. data/Gemfile +12 -8
  5. data/lib/thor.rb +79 -10
  6. data/lib/thor/actions.rb +13 -13
  7. data/lib/thor/actions/directory.rb +29 -10
  8. data/lib/thor/actions/file_manipulation.rb +8 -2
  9. data/lib/thor/base.rb +24 -11
  10. data/lib/thor/core_ext/hash_with_indifferent_access.rb +5 -0
  11. data/lib/thor/group.rb +5 -5
  12. data/lib/thor/parser/options.rb +63 -25
  13. data/lib/thor/rake_compat.rb +3 -2
  14. data/lib/thor/runner.rb +1 -1
  15. data/lib/thor/shell/basic.rb +16 -16
  16. data/lib/thor/shell/color.rb +9 -9
  17. data/lib/thor/shell/html.rb +9 -9
  18. data/lib/thor/task.rb +2 -2
  19. data/lib/thor/version.rb +1 -1
  20. data/spec/actions/create_file_spec.rb +30 -30
  21. data/spec/actions/create_link_spec.rb +12 -12
  22. data/spec/actions/directory_spec.rb +34 -27
  23. data/spec/actions/empty_directory_spec.rb +16 -16
  24. data/spec/actions/file_manipulation_spec.rb +62 -50
  25. data/spec/actions/inject_into_file_spec.rb +18 -18
  26. data/spec/actions_spec.rb +56 -56
  27. data/spec/base_spec.rb +69 -69
  28. data/spec/core_ext/hash_with_indifferent_access_spec.rb +19 -14
  29. data/spec/core_ext/ordered_hash_spec.rb +29 -29
  30. data/spec/exit_condition_spec.rb +3 -3
  31. data/spec/fixtures/preserve/script.sh +3 -0
  32. data/spec/fixtures/script.thor +5 -0
  33. data/spec/group_spec.rb +55 -55
  34. data/spec/invocation_spec.rb +26 -26
  35. data/spec/parser/argument_spec.rb +12 -12
  36. data/spec/parser/arguments_spec.rb +12 -12
  37. data/spec/parser/option_spec.rb +47 -47
  38. data/spec/parser/options_spec.rb +137 -72
  39. data/spec/rake_compat_spec.rb +11 -11
  40. data/spec/register_spec.rb +70 -8
  41. data/spec/runner_spec.rb +38 -38
  42. data/spec/shell/basic_spec.rb +49 -37
  43. data/spec/shell/color_spec.rb +13 -13
  44. data/spec/shell/html_spec.rb +3 -3
  45. data/spec/shell_spec.rb +7 -7
  46. data/spec/spec_helper.rb +4 -0
  47. data/spec/task_spec.rb +11 -11
  48. data/spec/thor_spec.rb +161 -91
  49. data/spec/util_spec.rb +42 -42
  50. data/thor.gemspec +1 -7
  51. metadata +8 -118
  52. data/lib/thor/core_ext/dir_escape.rb +0 -0
@@ -7,37 +7,42 @@ describe Thor::CoreExt::HashWithIndifferentAccess do
7
7
  end
8
8
 
9
9
  it "has values accessible by either strings or symbols" do
10
- @hash['foo'].should == 'bar'
11
- @hash[:foo].should == 'bar'
10
+ expect(@hash['foo']).to eq('bar')
11
+ expect(@hash[:foo]).to eq('bar')
12
12
 
13
- @hash.values_at(:foo, :baz).should == ['bar', 'bee']
14
- @hash.delete(:foo).should == 'bar'
13
+ expect(@hash.values_at(:foo, :baz)).to eq(['bar', 'bee'])
14
+ expect(@hash.delete(:foo)).to eq('bar')
15
15
  end
16
16
 
17
17
  it "handles magic boolean predicates" do
18
- @hash.force?.should be_true
19
- @hash.foo?.should be_true
20
- @hash.nothing?.should be_false
18
+ expect(@hash.force?).to be_true
19
+ expect(@hash.foo?).to be_true
20
+ expect(@hash.nothing?).to be_false
21
21
  end
22
22
 
23
23
  it "handles magic comparisions" do
24
- @hash.foo?('bar').should be_true
25
- @hash.foo?('bee').should be_false
24
+ expect(@hash.foo?('bar')).to be_true
25
+ expect(@hash.foo?('bee')).to be_false
26
26
  end
27
27
 
28
28
  it "maps methods to keys" do
29
- @hash.foo.should == @hash['foo']
29
+ expect(@hash.foo).to eq(@hash['foo'])
30
30
  end
31
31
 
32
32
  it "merges keys independent if they are symbols or strings" do
33
33
  @hash.merge!('force' => false, :baz => "boom")
34
- @hash[:force].should == false
35
- @hash[:baz].should == "boom"
34
+ expect(@hash[:force]).to eq(false)
35
+ expect(@hash[:baz]).to eq("boom")
36
36
  end
37
37
 
38
38
  it "creates a new hash by merging keys independent if they are symbols or strings" do
39
39
  other = @hash.merge('force' => false, :baz => "boom")
40
- other[:force].should == false
41
- other[:baz].should == "boom"
40
+ expect(other[:force]).to eq(false)
41
+ expect(other[:baz]).to eq("boom")
42
+ end
43
+
44
+ it "converts to a traditional hash" do
45
+ expect(@hash.to_hash.class).to eq(Hash)
46
+ expect(@hash).to eq({ 'foo' => 'bar', 'baz' => 'bee', 'force' => true })
42
47
  end
43
48
  end
@@ -8,7 +8,7 @@ describe Thor::CoreExt::OrderedHash do
8
8
 
9
9
  describe "without any items" do
10
10
  it "returns nil for an undefined key" do
11
- @hash["foo"].should be_nil
11
+ expect(@hash["foo"]).to be_nil
12
12
  end
13
13
 
14
14
  it "doesn't iterate through any items" do
@@ -16,12 +16,12 @@ describe Thor::CoreExt::OrderedHash do
16
16
  end
17
17
 
18
18
  it "has an empty key and values list" do
19
- @hash.keys.should be_empty
20
- @hash.values.should be_empty
19
+ expect(@hash.keys).to be_empty
20
+ expect(@hash.values).to be_empty
21
21
  end
22
22
 
23
23
  it "must be empty" do
24
- @hash.should be_empty
24
+ expect(@hash).to be_empty
25
25
  end
26
26
  end
27
27
 
@@ -35,15 +35,15 @@ describe Thor::CoreExt::OrderedHash do
35
35
  end
36
36
 
37
37
  it "returns nil for an undefined key" do
38
- @hash[:boom].should be_nil
38
+ expect(@hash[:boom]).to be_nil
39
39
  end
40
40
 
41
41
  it "returns the value for each key" do
42
- @hash[:foo].should == "Foo!"
43
- @hash[:bar].should == "Bar!"
44
- @hash[:baz].should == "Baz!"
45
- @hash[:bop].should == "Bop!"
46
- @hash[:bat].should == "Bat!"
42
+ expect(@hash[:foo]).to eq("Foo!")
43
+ expect(@hash[:bar]).to eq("Bar!")
44
+ expect(@hash[:baz]).to eq("Baz!")
45
+ expect(@hash[:bop]).to eq("Bop!")
46
+ expect(@hash[:bat]).to eq("Bat!")
47
47
  end
48
48
 
49
49
  it "iterates through the keys and values in order of assignment" do
@@ -51,27 +51,27 @@ describe Thor::CoreExt::OrderedHash do
51
51
  @hash.each do |key, value|
52
52
  arr << [key, value]
53
53
  end
54
- arr.should == [[:foo, "Foo!"], [:bar, "Bar!"], [:baz, "Baz!"],
55
- [:bop, "Bop!"], [:bat, "Bat!"]]
54
+ expect(arr).to eq([[:foo, "Foo!"], [:bar, "Bar!"], [:baz, "Baz!"],
55
+ [:bop, "Bop!"], [:bat, "Bat!"]])
56
56
  end
57
57
 
58
58
  it "returns the keys in order of insertion" do
59
- @hash.keys.should == [:foo, :bar, :baz, :bop, :bat]
59
+ expect(@hash.keys).to eq([:foo, :bar, :baz, :bop, :bat])
60
60
  end
61
61
 
62
62
  it "returns the values in order of insertion" do
63
- @hash.values.should == ["Foo!", "Bar!", "Baz!", "Bop!", "Bat!"]
63
+ expect(@hash.values).to eq(["Foo!", "Bar!", "Baz!", "Bop!", "Bat!"])
64
64
  end
65
65
 
66
66
  it "does not move an overwritten node to the end of the ordering" do
67
67
  @hash[:baz] = "Bip!"
68
- @hash.values.should == ["Foo!", "Bar!", "Bip!", "Bop!", "Bat!"]
68
+ expect(@hash.values).to eq(["Foo!", "Bar!", "Bip!", "Bop!", "Bat!"])
69
69
 
70
70
  @hash[:foo] = "Bip!"
71
- @hash.values.should == ["Bip!", "Bar!", "Bip!", "Bop!", "Bat!"]
71
+ expect(@hash.values).to eq(["Bip!", "Bar!", "Bip!", "Bop!", "Bat!"])
72
72
 
73
73
  @hash[:bat] = "Bip!"
74
- @hash.values.should == ["Bip!", "Bar!", "Bip!", "Bop!", "Bip!"]
74
+ expect(@hash.values).to eq(["Bip!", "Bar!", "Bip!", "Bop!", "Bip!"])
75
75
  end
76
76
 
77
77
  it "appends another ordered hash while preserving ordering" do
@@ -79,37 +79,37 @@ describe Thor::CoreExt::OrderedHash do
79
79
  other_hash[1] = "one"
80
80
  other_hash[2] = "two"
81
81
  other_hash[3] = "three"
82
- @hash.merge(other_hash).values.should == ["Foo!", "Bar!", "Baz!", "Bop!", "Bat!", "one", "two", "three"]
82
+ expect(@hash.merge(other_hash).values).to eq(["Foo!", "Bar!", "Baz!", "Bop!", "Bat!", "one", "two", "three"])
83
83
  end
84
84
 
85
85
  it "overwrites hash keys with matching appended keys" do
86
86
  other_hash = Thor::CoreExt::OrderedHash.new
87
87
  other_hash[:bar] = "bar"
88
- @hash.merge(other_hash)[:bar].should == "bar"
89
- @hash[:bar].should == "Bar!"
88
+ expect(@hash.merge(other_hash)[:bar]).to eq("bar")
89
+ expect(@hash[:bar]).to eq("Bar!")
90
90
  end
91
91
 
92
92
  it "converts to an array" do
93
- @hash.to_a.should == [[:foo, "Foo!"], [:bar, "Bar!"], [:baz, "Baz!"], [:bop, "Bop!"], [:bat, "Bat!"]]
93
+ expect(@hash.to_a).to eq([[:foo, "Foo!"], [:bar, "Bar!"], [:baz, "Baz!"], [:bop, "Bop!"], [:bat, "Bat!"]])
94
94
  end
95
95
 
96
96
  it "must not be empty" do
97
- @hash.should_not be_empty
97
+ expect(@hash).not_to be_empty
98
98
  end
99
99
 
100
100
  it "deletes values from hash" do
101
- @hash.delete(:baz).should == "Baz!"
102
- @hash.values.should == ["Foo!", "Bar!", "Bop!", "Bat!"]
101
+ expect(@hash.delete(:baz)).to eq("Baz!")
102
+ expect(@hash.values).to eq(["Foo!", "Bar!", "Bop!", "Bat!"])
103
103
 
104
- @hash.delete(:foo).should == "Foo!"
105
- @hash.values.should == ["Bar!", "Bop!", "Bat!"]
104
+ expect(@hash.delete(:foo)).to eq("Foo!")
105
+ expect(@hash.values).to eq(["Bar!", "Bop!", "Bat!"])
106
106
 
107
- @hash.delete(:bat).should == "Bat!"
108
- @hash.values.should == ["Bar!", "Bop!"]
107
+ expect(@hash.delete(:bat)).to eq("Bat!")
108
+ expect(@hash.values).to eq(["Bar!", "Bop!"])
109
109
  end
110
110
 
111
111
  it "returns nil if the value to be deleted can't be found" do
112
- @hash.delete(:nothing).should be_nil
112
+ expect(@hash.delete(:nothing)).to be_nil
113
113
  end
114
114
  end
115
115
  end
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'thor/base'
3
3
 
4
4
  describe "Exit conditions" do
5
- it "should exit 0, not bubble up EPIPE, if EPIPE is raised" do
5
+ it "exits 0, not bubble up EPIPE, if EPIPE is raised" do
6
6
  epiped = false
7
7
 
8
8
  task = Class.new(Thor) do
@@ -13,7 +13,7 @@ describe "Exit conditions" do
13
13
  end
14
14
  end
15
15
 
16
- lambda { task.start(["my_action"]) }.should raise_error(SystemExit)
17
- epiped.should == true
16
+ expect{ task.start(["my_action"]) }.to raise_error(SystemExit)
17
+ expect(epiped).to eq(true)
18
18
  end
19
19
  end
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+
3
+ exit 0
@@ -93,6 +93,11 @@ END
93
93
  end
94
94
  end
95
95
 
96
+ desc "send", "send as a task name"
97
+ def send
98
+ true
99
+ end
100
+
96
101
  private
97
102
 
98
103
  def method_missing(meth, *args)
data/spec/group_spec.rb CHANGED
@@ -3,36 +3,36 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
3
  describe Thor::Group do
4
4
  describe "task" do
5
5
  it "allows to use private methods from parent class as tasks" do
6
- ChildGroup.start.should == ["bar", "foo", "baz"]
7
- ChildGroup.new.baz("bar").should == "bar"
6
+ expect(ChildGroup.start).to eq(["bar", "foo", "baz"])
7
+ expect(ChildGroup.new.baz("bar")).to eq("bar")
8
8
  end
9
9
  end
10
10
 
11
11
  describe "#start" do
12
12
  it "invokes all the tasks under the Thor group" do
13
- MyCounter.start(["1", "2", "--third", "3"]).should == [ 1, 2, 3 ]
13
+ expect(MyCounter.start(["1", "2", "--third", "3"])).to eq([ 1, 2, 3 ])
14
14
  end
15
15
 
16
16
  it "uses argument default value" do
17
- MyCounter.start(["1", "--third", "3"]).should == [ 1, 2, 3 ]
17
+ expect(MyCounter.start(["1", "--third", "3"])).to eq([ 1, 2, 3 ])
18
18
  end
19
19
 
20
20
  it "invokes all the tasks in the Thor group and his parents" do
21
- BrokenCounter.start(["1", "2", "--third", "3"]).should == [ nil, 2, 3, false, 5 ]
21
+ expect(BrokenCounter.start(["1", "2", "--third", "3"])).to eq([ nil, 2, 3, false, 5 ])
22
22
  end
23
23
 
24
24
  it "raises an error if a required argument is added after a non-required" do
25
- lambda {
25
+ expect {
26
26
  MyCounter.argument(:foo, :type => :string)
27
- }.should raise_error(ArgumentError, 'You cannot have "foo" as required argument after the non-required argument "second".')
27
+ }.to raise_error(ArgumentError, 'You cannot have "foo" as required argument after the non-required argument "second".')
28
28
  end
29
29
 
30
30
  it "raises when an exception happens within the task call" do
31
- lambda { BrokenCounter.start(["1", "2", "--fail"]) }.should raise_error
31
+ expect{ BrokenCounter.start(["1", "2", "--fail"]) }.to raise_error
32
32
  end
33
33
 
34
34
  it "raises an error when a Thor group task expects arguments" do
35
- lambda { WhinyGenerator.start }.should raise_error(ArgumentError, /thor wrong_arity takes 1 argument, but it should not/)
35
+ expect{ WhinyGenerator.start }.to raise_error(ArgumentError, /thor wrong_arity takes 1 argument, but it should not/)
36
36
  end
37
37
 
38
38
  it "invokes help message if any of the shortcuts is given" do
@@ -43,135 +43,135 @@ describe Thor::Group do
43
43
 
44
44
  describe "#desc" do
45
45
  it "sets the description for a given class" do
46
- MyCounter.desc.should == "Description:\n This generator runs three tasks: one, two and three.\n"
46
+ expect(MyCounter.desc).to eq("Description:\n This generator runs three tasks: one, two and three.\n")
47
47
  end
48
48
 
49
49
  it "can be inherited" do
50
- BrokenCounter.desc.should == "Description:\n This generator runs three tasks: one, two and three.\n"
50
+ expect(BrokenCounter.desc).to eq("Description:\n This generator runs three tasks: one, two and three.\n")
51
51
  end
52
52
 
53
53
  it "can be nil" do
54
- WhinyGenerator.desc.should be_nil
54
+ expect(WhinyGenerator.desc).to be_nil
55
55
  end
56
56
  end
57
57
 
58
58
  describe "#help" do
59
59
  before do
60
- @content = capture(:stdout){ MyCounter.help(Thor::Base.shell.new) }
60
+ @content = capture(:stdout) { MyCounter.help(Thor::Base.shell.new) }
61
61
  end
62
62
 
63
63
  it "provides usage information" do
64
- @content.should =~ /my_counter N \[N\]/
64
+ expect(@content).to match(/my_counter N \[N\]/)
65
65
  end
66
66
 
67
67
  it "shows description" do
68
- @content.should =~ /Description:/
69
- @content.should =~ /This generator runs three tasks: one, two and three./
68
+ expect(@content).to match(/Description:/)
69
+ expect(@content).to match(/This generator runs three tasks: one, two and three./)
70
70
  end
71
71
 
72
72
  it "shows options information" do
73
- @content.should =~ /Options/
74
- @content.should =~ /\[\-\-third=THREE\]/
73
+ expect(@content).to match(/Options/)
74
+ expect(@content).to match(/\[\-\-third=THREE\]/)
75
75
  end
76
76
  end
77
77
 
78
78
  describe "#invoke" do
79
79
  before do
80
- @content = capture(:stdout){ E.start }
80
+ @content = capture(:stdout) { E.start }
81
81
  end
82
82
 
83
83
  it "allows to invoke a class from the class binding" do
84
- @content.should =~ /1\n2\n3\n4\n5\n/
84
+ expect(@content).to match(/1\n2\n3\n4\n5\n/)
85
85
  end
86
86
 
87
87
  it "shows invocation information to the user" do
88
- @content.should =~ /invoke Defined/
88
+ expect(@content).to match(/invoke Defined/)
89
89
  end
90
90
 
91
91
  it "uses padding on status generated by the invoked class" do
92
- @content.should =~ /finished counting/
92
+ expect(@content).to match(/finished counting/)
93
93
  end
94
94
 
95
95
  it "allows invocation to be configured with blocks" do
96
96
  capture(:stdout) do
97
- F.start.should == ["Valim, Jose"]
97
+ expect(F.start).to eq(["Valim, Jose"])
98
98
  end
99
99
  end
100
100
 
101
101
  it "shows invoked options on help" do
102
- content = capture(:stdout){ E.help(Thor::Base.shell.new) }
103
- content.should =~ /Defined options:/
104
- content.should =~ /\[--unused\]/
105
- content.should =~ /# This option has no use/
102
+ content = capture(:stdout) { E.help(Thor::Base.shell.new) }
103
+ expect(content).to match(/Defined options:/)
104
+ expect(content).to match(/\[--unused\]/)
105
+ expect(content).to match(/# This option has no use/)
106
106
  end
107
107
  end
108
108
 
109
109
  describe "#invoke_from_option" do
110
110
  describe "with default type" do
111
111
  before do
112
- @content = capture(:stdout){ G.start }
112
+ @content = capture(:stdout) { G.start }
113
113
  end
114
114
 
115
115
  it "allows to invoke a class from the class binding by a default option" do
116
- @content.should =~ /1\n2\n3\n4\n5\n/
116
+ expect(@content).to match(/1\n2\n3\n4\n5\n/)
117
117
  end
118
118
 
119
119
  it "does not invoke if the option is nil" do
120
- capture(:stdout){ G.start(["--skip-invoked"]) }.should_not =~ /invoke/
120
+ expect(capture(:stdout) { G.start(["--skip-invoked"]) }).not_to match(/invoke/)
121
121
  end
122
122
 
123
123
  it "prints a message if invocation cannot be found" do
124
- content = capture(:stdout){ G.start(["--invoked", "unknown"]) }
125
- content.should =~ /error unknown \[not found\]/
124
+ content = capture(:stdout) { G.start(["--invoked", "unknown"]) }
125
+ expect(content).to match(/error unknown \[not found\]/)
126
126
  end
127
127
 
128
128
  it "allows to invoke a class from the class binding by the given option" do
129
- content = capture(:stdout){ G.start(["--invoked", "e"]) }
130
- content.should =~ /invoke e/
129
+ content = capture(:stdout) { G.start(["--invoked", "e"]) }
130
+ expect(content).to match(/invoke e/)
131
131
  end
132
132
 
133
133
  it "shows invocation information to the user" do
134
- @content.should =~ /invoke defined/
134
+ expect(@content).to match(/invoke defined/)
135
135
  end
136
136
 
137
137
  it "uses padding on status generated by the invoked class" do
138
- @content.should =~ /finished counting/
138
+ expect(@content).to match(/finished counting/)
139
139
  end
140
140
 
141
141
  it "shows invoked options on help" do
142
- content = capture(:stdout){ G.help(Thor::Base.shell.new) }
143
- content.should =~ /defined options:/
144
- content.should =~ /\[--unused\]/
145
- content.should =~ /# This option has no use/
142
+ content = capture(:stdout) { G.help(Thor::Base.shell.new) }
143
+ expect(content).to match(/defined options:/)
144
+ expect(content).to match(/\[--unused\]/)
145
+ expect(content).to match(/# This option has no use/)
146
146
  end
147
147
  end
148
148
 
149
149
  describe "with boolean type" do
150
150
  before do
151
- @content = capture(:stdout){ H.start }
151
+ @content = capture(:stdout) { H.start }
152
152
  end
153
153
 
154
154
  it "allows to invoke a class from the class binding by a default option" do
155
- @content.should =~ /1\n2\n3\n4\n5\n/
155
+ expect(@content).to match(/1\n2\n3\n4\n5\n/)
156
156
  end
157
157
 
158
158
  it "does not invoke if the option is false" do
159
- capture(:stdout){ H.start(["--no-defined"]) }.should_not =~ /invoke/
159
+ expect(capture(:stdout) { H.start(["--no-defined"]) }).not_to match(/invoke/)
160
160
  end
161
161
 
162
162
  it "shows invocation information to the user" do
163
- @content.should =~ /invoke defined/
163
+ expect(@content).to match(/invoke defined/)
164
164
  end
165
165
 
166
166
  it "uses padding on status generated by the invoked class" do
167
- @content.should =~ /finished counting/
167
+ expect(@content).to match(/finished counting/)
168
168
  end
169
169
 
170
170
  it "shows invoked options on help" do
171
- content = capture(:stdout){ H.help(Thor::Base.shell.new) }
172
- content.should =~ /defined options:/
173
- content.should =~ /\[--unused\]/
174
- content.should =~ /# This option has no use/
171
+ content = capture(:stdout) { H.help(Thor::Base.shell.new) }
172
+ expect(content).to match(/defined options:/)
173
+ expect(content).to match(/\[--unused\]/)
174
+ expect(content).to match(/# This option has no use/)
175
175
  end
176
176
  end
177
177
  end
@@ -189,9 +189,9 @@ describe Thor::Group do
189
189
  end
190
190
  end
191
191
 
192
- klass.start(["jose"]).should == ["Hi jose"]
193
- klass.start(["jose", "--loud"]).should == ["Hi JOSE"]
194
- klass.start(["--loud", "jose"]).should == ["Hi JOSE"]
192
+ expect(klass.start(["jose"])).to eq(["Hi jose"])
193
+ expect(klass.start(["jose", "--loud"])).to eq(["Hi JOSE"])
194
+ expect(klass.start(["--loud", "jose"])).to eq(["Hi JOSE"])
195
195
  end
196
196
 
197
197
  it "provides extra args as `args`" do
@@ -208,9 +208,9 @@ describe Thor::Group do
208
208
  end
209
209
  end
210
210
 
211
- klass.start(["jose"]).should == ["Hi jose"]
212
- klass.start(["jose", "--loud"]).should == ["Hi JOSE"]
213
- klass.start(["--loud", "jose"]).should == ["Hi JOSE"]
211
+ expect(klass.start(["jose"])).to eq(["Hi jose"])
212
+ expect(klass.start(["jose", "--loud"])).to eq(["Hi JOSE"])
213
+ expect(klass.start(["--loud", "jose"])).to eq(["Hi JOSE"])
214
214
  end
215
215
  end
216
216
  end