thor 0.17.0 → 0.18.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 (70) hide show
  1. data/{CHANGELOG.rdoc → CHANGELOG.md} +30 -36
  2. data/README.md +10 -3
  3. data/lib/thor.rb +205 -180
  4. data/lib/thor/actions.rb +5 -5
  5. data/lib/thor/actions/create_link.rb +3 -0
  6. data/lib/thor/actions/directory.rb +2 -0
  7. data/lib/thor/actions/file_manipulation.rb +1 -1
  8. data/lib/thor/base.rb +84 -95
  9. data/lib/thor/{task.rb → command.rb} +17 -13
  10. data/lib/thor/core_ext/io_binary_read.rb +12 -0
  11. data/lib/thor/error.rb +4 -7
  12. data/lib/thor/group.rb +30 -33
  13. data/lib/thor/invocation.rb +28 -26
  14. data/lib/thor/parser/options.rb +3 -1
  15. data/lib/thor/runner.rb +21 -20
  16. data/lib/thor/shell/basic.rb +5 -1
  17. data/lib/thor/shell/color.rb +4 -0
  18. data/lib/thor/shell/html.rb +4 -0
  19. data/lib/thor/util.rb +214 -210
  20. data/lib/thor/version.rb +1 -1
  21. data/spec/actions/create_file_spec.rb +1 -1
  22. data/spec/actions/create_link_spec.rb +15 -1
  23. data/spec/actions/directory_spec.rb +18 -5
  24. data/spec/actions/empty_directory_spec.rb +1 -1
  25. data/spec/actions/file_manipulation_spec.rb +13 -13
  26. data/spec/actions/inject_into_file_spec.rb +1 -1
  27. data/spec/actions_spec.rb +1 -1
  28. data/spec/base_spec.rb +40 -24
  29. data/spec/command_spec.rb +80 -0
  30. data/spec/core_ext/hash_with_indifferent_access_spec.rb +1 -1
  31. data/spec/core_ext/ordered_hash_spec.rb +1 -1
  32. data/spec/exit_condition_spec.rb +3 -3
  33. data/spec/fixtures/{task.thor → command.thor} +0 -0
  34. data/spec/fixtures/doc/%file_name%.rb.tt +1 -0
  35. data/spec/fixtures/doc/COMMENTER +11 -0
  36. data/spec/fixtures/doc/README +3 -0
  37. data/spec/fixtures/doc/block_helper.rb +3 -0
  38. data/spec/fixtures/doc/config.rb +1 -0
  39. data/spec/fixtures/doc/config.yaml.tt +1 -0
  40. data/spec/fixtures/doc/excluding/%file_name%.rb.tt +1 -0
  41. data/spec/fixtures/group.thor +24 -10
  42. data/spec/fixtures/invoke.thor +3 -3
  43. data/spec/fixtures/script.thor +40 -15
  44. data/spec/fixtures/subcommand.thor +17 -0
  45. data/spec/group_spec.rb +13 -13
  46. data/spec/{spec_helper.rb → helper.rb} +11 -7
  47. data/spec/invocation_spec.rb +16 -16
  48. data/spec/parser/argument_spec.rb +4 -4
  49. data/spec/parser/arguments_spec.rb +1 -1
  50. data/spec/parser/option_spec.rb +1 -1
  51. data/spec/parser/options_spec.rb +6 -1
  52. data/spec/rake_compat_spec.rb +1 -1
  53. data/spec/register_spec.rb +12 -12
  54. data/spec/runner_spec.rb +36 -36
  55. data/spec/shell/basic_spec.rb +9 -10
  56. data/spec/shell/color_spec.rb +16 -2
  57. data/spec/shell/html_spec.rb +1 -1
  58. data/spec/shell_spec.rb +1 -1
  59. data/spec/subcommand_spec.rb +30 -0
  60. data/spec/thor_spec.rb +81 -78
  61. data/spec/util_spec.rb +10 -10
  62. data/thor.gemspec +22 -18
  63. metadata +49 -38
  64. data/.gitignore +0 -44
  65. data/.rspec +0 -3
  66. data/.travis.yml +0 -8
  67. data/Gemfile +0 -19
  68. data/bin/rake2thor +0 -86
  69. data/lib/thor/core_ext/file_binary_read.rb +0 -9
  70. data/spec/task_spec.rb +0 -80
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'helper'
2
2
 
3
3
  describe Thor do
4
4
  describe "#method_option" do
@@ -48,44 +48,44 @@ describe Thor do
48
48
  end
49
49
 
50
50
  describe "when :for is supplied" do
51
- it "updates an already defined task" do
51
+ it "updates an already defined command" do
52
52
  args, options = MyChildScript.start(["animal", "horse", "--other=fish"])
53
53
  expect(options[:other]).to eq("fish")
54
54
  end
55
55
 
56
56
  describe "and the target is on the parent class" do
57
- it "updates an already defined task" do
58
- args = ["example_default_task", "my_param", "--new-option=verified"]
57
+ it "updates an already defined command" do
58
+ args = ["example_default_command", "my_param", "--new-option=verified"]
59
59
  options = Scripts::MyScript.start(args)
60
60
  expect(options[:new_option]).to eq("verified")
61
61
  end
62
62
 
63
- it "adds a task to the tasks list if the updated task is on the parent class" do
64
- expect(Scripts::MyScript.tasks["example_default_task"]).to be
63
+ it "adds a command to the command list if the updated command is on the parent class" do
64
+ expect(Scripts::MyScript.commands["example_default_command"]).to be
65
65
  end
66
66
 
67
- it "clones the parent task" do
68
- expect(Scripts::MyScript.tasks["example_default_task"]).not_to eq(MyChildScript.tasks["example_default_task"])
67
+ it "clones the parent command" do
68
+ expect(Scripts::MyScript.commands["example_default_command"]).not_to eq(MyChildScript.commands["example_default_command"])
69
69
  end
70
70
  end
71
71
  end
72
72
  end
73
73
 
74
- describe "#default_task" do
75
- it "sets a default task" do
76
- expect(MyScript.default_task).to eq("example_default_task")
74
+ describe "#default_command" do
75
+ it "sets a default command" do
76
+ expect(MyScript.default_command).to eq("example_default_command")
77
77
  end
78
78
 
79
- it "invokes the default task if no command is specified" do
80
- expect(MyScript.start([])).to eq("default task")
79
+ it "invokes the default command if no command is specified" do
80
+ expect(MyScript.start([])).to eq("default command")
81
81
  end
82
82
 
83
- it "invokes the default task if no command is specified even if switches are given" do
83
+ it "invokes the default command if no command is specified even if switches are given" do
84
84
  expect(MyScript.start(["--with", "option"])).to eq({"with"=>"option"})
85
85
  end
86
86
 
87
- it "inherits the default task from parent" do
88
- expect(MyChildScript.default_task).to eq("example_default_task")
87
+ it "inherits the default command from parent" do
88
+ expect(MyChildScript.default_command).to eq("example_default_command")
89
89
  end
90
90
  end
91
91
 
@@ -101,17 +101,17 @@ describe Thor do
101
101
  return options, args
102
102
  end
103
103
 
104
- desc "boring", "An ordinary task"
104
+ desc "boring", "An ordinary command"
105
105
  def boring(*args)
106
106
  return options, args
107
107
  end
108
108
  end
109
109
 
110
- it "passes remaining args to task when it encounters a non-option" do
110
+ it "passes remaining args to command when it encounters a non-option" do
111
111
  expect(my_script.start(%w[exec command --verbose])).to eq [{}, ["command", "--verbose"]]
112
112
  end
113
113
 
114
- it "passes remaining args to task when it encounters an unknown option" do
114
+ it "passes remaining args to command when it encounters an unknown option" do
115
115
  expect(my_script.start(%w[exec --foo command --bar])).to eq [{}, ["--foo", "command", "--bar"]]
116
116
  end
117
117
 
@@ -123,19 +123,19 @@ describe Thor do
123
123
  expect(my_script.start(%w[exec --mode rashly command])).to eq [{"mode" => "rashly"}, ["command"]]
124
124
  end
125
125
 
126
- it "still passes everything after -- to task" do
126
+ it "still passes everything after -- to command" do
127
127
  expect(my_script.start(%w[exec -- --verbose])).to eq [{}, ["--verbose"]]
128
128
  end
129
129
 
130
- it "does not affect ordinary tasks" do
130
+ it "does not affect ordinary commands" do
131
131
  expect(my_script.start(%w[boring command --verbose])).to eq [{"verbose" => true}, ["command"]]
132
132
  end
133
133
 
134
- context "when provided with multiple task names" do
134
+ context "when provided with multiple command names" do
135
135
  klass = Class.new(Thor) do
136
136
  stop_on_unknown_option! :foo, :bar
137
137
  end
138
- it "affects all specified tasks" do
138
+ it "affects all specified commands" do
139
139
  expect(klass.stop_on_unknown_option?(mock :name => "foo")).to be_true
140
140
  expect(klass.stop_on_unknown_option?(mock :name => "bar")).to be_true
141
141
  expect(klass.stop_on_unknown_option?(mock :name => "baz")).to be_false
@@ -147,7 +147,7 @@ describe Thor do
147
147
  stop_on_unknown_option! :foo
148
148
  stop_on_unknown_option! :bar
149
149
  end
150
- it "affects all specified tasks" do
150
+ it "affects all specified commands" do
151
151
  expect(klass.stop_on_unknown_option?(mock :name => "foo")).to be_true
152
152
  expect(klass.stop_on_unknown_option?(mock :name => "bar")).to be_true
153
153
  expect(klass.stop_on_unknown_option?(mock :name => "baz")).to be_false
@@ -166,12 +166,25 @@ describe Thor do
166
166
  end
167
167
 
168
168
  it "inherits all mappings from parent" do
169
- expect(MyChildScript.default_task).to eq("example_default_task")
169
+ expect(MyChildScript.default_command).to eq("example_default_command")
170
+ end
171
+ end
172
+
173
+ describe "#package_name" do
174
+ it "provides a proper description for a command when the package_name is assigned" do
175
+ content = capture(:stdout) { PackageNameScript.start(["help"]) }
176
+ expect(content).to match(/Baboon commands:/m)
177
+ end
178
+
179
+ # TODO: remove this, might be redundant, just wanted to prove full coverage
180
+ it "provides a proper description for a command when the package_name is NOT assigned" do
181
+ content = capture(:stdout) { MyScript.start(["help"]) }
182
+ expect(content).to match(/Commands:/m)
170
183
  end
171
184
  end
172
185
 
173
186
  describe "#desc" do
174
- it "provides description for a task" do
187
+ it "provides description for a command" do
175
188
  content = capture(:stdout) { MyScript.start(["help"]) }
176
189
  expect(content).to match(/thor my_script:zoo\s+# zoo around/m)
177
190
  end
@@ -187,17 +200,17 @@ describe Thor do
187
200
  end
188
201
 
189
202
  describe "when :for is supplied" do
190
- it "overwrites a previous defined task" do
203
+ it "overwrites a previous defined command" do
191
204
  expect(capture(:stdout) { MyChildScript.start(["help"]) }).to match(/animal KIND \s+# fish around/m)
192
205
  end
193
206
  end
194
207
 
195
208
  describe "when :hide is supplied" do
196
- it "does not show the task in help" do
209
+ it "does not show the command in help" do
197
210
  expect(capture(:stdout) { MyScript.start(["help"]) }).not_to match(/this is hidden/m)
198
211
  end
199
212
 
200
- it "but the task is still invokcable not show the task in help" do
213
+ it "but the command is still invokcable not show the command in help" do
201
214
  expect(MyScript.start(["hidden", "yesyes"])).to eq(["yesyes"])
202
215
  end
203
216
  end
@@ -237,12 +250,21 @@ describe Thor do
237
250
  expect(MyScript.start(["with_optional", "--all"])).to eq([nil, { "all" => true }, []])
238
251
  end
239
252
 
240
- it "raises an error if a required param is not provided" do
241
- expect(capture(:stderr) { MyScript.start(["animal"]) }.strip).to eq('thor animal requires at least 1 argument: "thor my_script:animal TYPE".')
253
+ it "raises an error if the wrong number of params are provided" do
254
+ arity_asserter = lambda do |args, msg|
255
+ stderr = capture(:stderr) { Scripts::Arities.start(args) }
256
+ expect(stderr.strip).to eq(msg)
257
+ end
258
+ arity_asserter.call ["zero_args", "one" ], %Q'ERROR: thor zero_args was called with arguments ["one"]\nUsage: "thor scripts:arities:zero_args".'
259
+ arity_asserter.call ["one_arg" ], %Q'ERROR: thor one_arg was called with no arguments\nUsage: "thor scripts:arities:one_arg ARG".'
260
+ arity_asserter.call ["one_arg", "one", "two" ], %Q'ERROR: thor one_arg was called with arguments ["one", "two"]\nUsage: "thor scripts:arities:one_arg ARG".'
261
+ arity_asserter.call ["one_arg", "one", "two" ], %Q'ERROR: thor one_arg was called with arguments ["one", "two"]\nUsage: "thor scripts:arities:one_arg ARG".'
262
+ arity_asserter.call ["two_args", "one" ], %Q'ERROR: thor two_args was called with arguments ["one"]\nUsage: "thor scripts:arities:two_args ARG1 ARG2".'
263
+ arity_asserter.call ["optional_arg", "one", "two" ], %Q'ERROR: thor optional_arg was called with arguments ["one", "two"]\nUsage: "thor scripts:arities:optional_arg [ARG]".'
242
264
  end
243
265
 
244
- it "raises an error if the invoked task does not exist" do
245
- expect(capture(:stderr) { Amazing.start(["animal"]) }.strip).to eq('Could not find task "animal" in "amazing" namespace.')
266
+ it "raises an error if the invoked command does not exist" do
267
+ expect(capture(:stderr) { Amazing.start(["animal"]) }.strip).to eq('Could not find command "animal" in "amazing" namespace.')
246
268
  end
247
269
 
248
270
  it "calls method_missing if an unknown method is passed in" do
@@ -250,15 +272,15 @@ describe Thor do
250
272
  end
251
273
 
252
274
  it "does not call a private method no matter what" do
253
- expect(capture(:stderr) { MyScript.start(["what"]) }.strip).to eq('Could not find task "what" in "my_script" namespace.')
275
+ expect(capture(:stderr) { MyScript.start(["what"]) }.strip).to eq('Could not find command "what" in "my_script" namespace.')
254
276
  end
255
277
 
256
- it "uses task default options" do
278
+ it "uses command default options" do
257
279
  options = MyChildScript.start(["animal", "fish"]).last
258
280
  expect(options).to eq({ "other" => "method default" })
259
281
  end
260
282
 
261
- it "raises when an exception happens within the task call" do
283
+ it "raises when an exception happens within the command call" do
262
284
  expect{ MyScript.start(["call_myself_with_wrong_arity"]) }.to raise_error(ArgumentError)
263
285
  end
264
286
 
@@ -267,8 +289,8 @@ describe Thor do
267
289
  expect(MyScript.start(["z"])).to eq(MyScript.start(["zoo"]))
268
290
  end
269
291
 
270
- it "invokes a command, even when there's an alias the resolves to the same command" do
271
- expect(MyScript.start(["hi"])).to eq(MyScript.start(["hidden"]))
292
+ it "invokes a command, even when there's an alias it resolves to the same command" do
293
+ expect(MyScript.start(["hi", "arg"])).to eq(MyScript.start(["hidden", "arg"]))
272
294
  end
273
295
 
274
296
  it "invokes an alias" do
@@ -278,35 +300,16 @@ describe Thor do
278
300
 
279
301
  context "when the user enters an ambiguous substring of a command" do
280
302
  it "raises an exception that explains the ambiguity" do
281
- expect{ MyScript.start(["call"]) }.to raise_error(ArgumentError, 'Ambiguous task call matches [call_myself_with_wrong_arity, call_unexistent_method]')
303
+ expect{ MyScript.start(["call"]) }.to raise_error(ArgumentError, 'Ambiguous command call matches [call_myself_with_wrong_arity, call_unexistent_method]')
282
304
  end
283
305
 
284
306
  it "raises an exception when there is an alias" do
285
- expect{ MyScript.start(["f"]) }.to raise_error(ArgumentError, 'Ambiguous task f matches [foo, fu]')
307
+ expect{ MyScript.start(["f"]) }.to raise_error(ArgumentError, 'Ambiguous command f matches [foo, fu]')
286
308
  end
287
309
  end
288
310
 
289
311
  end
290
312
 
291
- describe "#subcommand" do
292
- it "maps a given subcommand to another Thor subclass" do
293
- barn_help = capture(:stdout) { Scripts::MyDefaults.start(["barn"]) }
294
- expect(barn_help).to include("barn help [COMMAND] # Describe subcommands or one specific subcommand")
295
- end
296
-
297
- it "passes commands to subcommand classes" do
298
- expect(capture(:stdout) { Scripts::MyDefaults.start(["barn", "open"]) }.strip).to eq("Open sesame!")
299
- end
300
-
301
- it "passes arguments to subcommand classes" do
302
- expect(capture(:stdout) { Scripts::MyDefaults.start(["barn", "open", "shotgun"]) }.strip).to eq("That's going to leave a mark.")
303
- end
304
-
305
- it "ignores unknown options (the subcommand class will handle them)" do
306
- expect(capture(:stdout) { Scripts::MyDefaults.start(["barn", "paint", "blue", "--coats", "4"])}.strip).to eq("4 coats of blue paint")
307
- end
308
- end
309
-
310
313
  describe "#help" do
311
314
  def shell
312
315
  @shell ||= Thor::Base.shell.new
@@ -318,24 +321,24 @@ describe Thor do
318
321
  end
319
322
 
320
323
  it "provides useful help info for the help method itself" do
321
- expect(@content).to match(/help \[TASK\]\s+# Describe available tasks/)
324
+ expect(@content).to match(/help \[COMMAND\]\s+# Describe available commands/)
322
325
  end
323
326
 
324
327
  it "provides useful help info for a method with params" do
325
328
  expect(@content).to match(/animal TYPE\s+# horse around/)
326
329
  end
327
330
 
328
- it "uses the maximum terminal size to show tasks" do
331
+ it "uses the maximum terminal size to show commands" do
329
332
  @shell.should_receive(:terminal_width).and_return(80)
330
333
  content = capture(:stdout) { MyScript.help(shell) }
331
334
  expect(content).to match(/aaa\.\.\.$/)
332
335
  end
333
336
 
334
- it "provides description for tasks from classes in the same namespace" do
337
+ it "provides description for commands from classes in the same namespace" do
335
338
  expect(@content).to match(/baz\s+# do some bazing/)
336
339
  end
337
340
 
338
- it "shows superclass tasks" do
341
+ it "shows superclass commands" do
339
342
  content = capture(:stdout) { MyChildScript.help(shell) }
340
343
  expect(content).to match(/foo BAR \s+# do some fooing/)
341
344
  end
@@ -352,9 +355,9 @@ describe Thor do
352
355
  end
353
356
  end
354
357
 
355
- describe "for a specific task" do
356
- it "provides full help info when talking about a specific task" do
357
- expect(capture(:stdout) { MyScript.task_help(shell, "foo") }).to eq(<<-END)
358
+ describe "for a specific command" do
359
+ it "provides full help info when talking about a specific command" do
360
+ expect(capture(:stdout) { MyScript.command_help(shell, "foo") }).to eq(<<-END)
358
361
  Usage:
359
362
  thor my_script:foo BAR
360
363
 
@@ -367,18 +370,18 @@ do some fooing
367
370
  END
368
371
  end
369
372
 
370
- it "raises an error if the task can't be found" do
373
+ it "raises an error if the command can't be found" do
371
374
  expect {
372
- MyScript.task_help(shell, "unknown")
373
- }.to raise_error(Thor::UndefinedTaskError, 'Could not find task "unknown" in "my_script" namespace.')
375
+ MyScript.command_help(shell, "unknown")
376
+ }.to raise_error(Thor::UndefinedCommandError, 'Could not find command "unknown" in "my_script" namespace.')
374
377
  end
375
378
 
376
379
  it "normalizes names before claiming they don't exist" do
377
- expect(capture(:stdout) { MyScript.task_help(shell, "name-with-dashes") }).to match(/thor my_script:name-with-dashes/)
380
+ expect(capture(:stdout) { MyScript.command_help(shell, "name-with-dashes") }).to match(/thor my_script:name-with-dashes/)
378
381
  end
379
382
 
380
383
  it "uses the long description if it exists" do
381
- expect(capture(:stdout) { MyScript.task_help(shell, "long_description") }).to eq(<<-HELP)
384
+ expect(capture(:stdout) { MyScript.command_help(shell, "long_description") }).to eq(<<-HELP)
382
385
  Usage:
383
386
  thor my_script:long_description
384
387
 
@@ -389,16 +392,16 @@ Description:
389
392
  HELP
390
393
  end
391
394
 
392
- it "doesn't assign the long description to the next task without one" do
395
+ it "doesn't assign the long description to the next command without one" do
393
396
  expect(capture(:stdout) {
394
- MyScript.task_help(shell, "name_with_dashes")
397
+ MyScript.command_help(shell, "name_with_dashes")
395
398
  }).not_to match(/so very long/i)
396
399
  end
397
400
  end
398
401
 
399
402
  describe "instance method" do
400
403
  it "calls the class method" do
401
- expect(capture(:stdout) { MyScript.start(["help"]) }).to match(/Tasks:/)
404
+ expect(capture(:stdout) { MyScript.start(["help"]) }).to match(/Commands:/)
402
405
  end
403
406
 
404
407
  it "calls the class method" do
@@ -407,15 +410,15 @@ HELP
407
410
  end
408
411
  end
409
412
 
410
- describe "when creating tasks" do
413
+ describe "when creating commands" do
411
414
  it "prints a warning if a public method is created without description or usage" do
412
415
  expect(capture(:stdout) {
413
416
  klass = Class.new(Thor)
414
417
  klass.class_eval "def hello_from_thor; end"
415
- }).to match(/\[WARNING\] Attempted to create task "hello_from_thor" without usage or description/)
418
+ }).to match(/\[WARNING\] Attempted to create command "hello_from_thor" without usage or description/)
416
419
  end
417
420
 
418
- it "does not print if overwriting a previous task" do
421
+ it "does not print if overwriting a previous command" do
419
422
  expect(capture(:stdout) {
420
423
  klass = Class.new(Thor)
421
424
  klass.class_eval "def help; end"
@@ -481,7 +484,7 @@ HELP
481
484
  expect(klass.start(["unknown", "foo", "--bar", "baz"])).to eq(["foo"])
482
485
  end
483
486
 
484
- it "send as a task name" do
487
+ it "send as a command name" do
485
488
  expect(MyScript.start(["send"])).to eq(true)
486
489
  end
487
490
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'helper'
2
2
 
3
3
  module Thor::Util
4
4
  def self.clear_user_home!
@@ -30,7 +30,7 @@ describe Thor::Util do
30
30
  end
31
31
 
32
32
  describe "#namespace_from_thor_class" do
33
- it "replaces constant nesting with task namespacing" do
33
+ it "replaces constant nesting with command namespacing" do
34
34
  expect(Thor::Util.namespace_from_thor_class("Foo::Bar::Baz")).to eq("foo:bar:baz")
35
35
  end
36
36
 
@@ -87,27 +87,27 @@ describe Thor::Util do
87
87
  end
88
88
  end
89
89
 
90
- describe "#find_class_and_task_by_namespace" do
90
+ describe "#find_class_and_command_by_namespace" do
91
91
  it "returns a Thor::Group class if full namespace matches" do
92
- expect(Thor::Util.find_class_and_task_by_namespace("my_counter")).to eq([MyCounter, nil])
92
+ expect(Thor::Util.find_class_and_command_by_namespace("my_counter")).to eq([MyCounter, nil])
93
93
  end
94
94
 
95
95
  it "returns a Thor class if full namespace matches" do
96
- expect(Thor::Util.find_class_and_task_by_namespace("thor")).to eq([Thor, nil])
96
+ expect(Thor::Util.find_class_and_command_by_namespace("thor")).to eq([Thor, nil])
97
97
  end
98
98
 
99
- it "returns a Thor class and the task name" do
100
- expect(Thor::Util.find_class_and_task_by_namespace("thor:help")).to eq([Thor, "help"])
99
+ it "returns a Thor class and the command name" do
100
+ expect(Thor::Util.find_class_and_command_by_namespace("thor:help")).to eq([Thor, "help"])
101
101
  end
102
102
 
103
- it "falls back in the namespace:task look up even if a full namespace does not match" do
103
+ it "falls back in the namespace:command look up even if a full namespace does not match" do
104
104
  Thor.const_set(:Help, Module.new)
105
- expect(Thor::Util.find_class_and_task_by_namespace("thor:help")).to eq([Thor, "help"])
105
+ expect(Thor::Util.find_class_and_command_by_namespace("thor:help")).to eq([Thor, "help"])
106
106
  Thor.send :remove_const, :Help
107
107
  end
108
108
 
109
109
  it "falls back on the default namespace class if nothing else matches" do
110
- expect(Thor::Util.find_class_and_task_by_namespace("test")).to eq([Scripts::MyDefaults, "test"])
110
+ expect(Thor::Util.find_class_and_command_by_namespace("test")).to eq([Scripts::MyDefaults, "test"])
111
111
  end
112
112
  end
113
113
 
@@ -1,20 +1,24 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/thor/version', __FILE__)
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $:.unshift lib unless $:.include?(lib)
4
+ require 'thor/version'
3
5
 
4
- Gem::Specification.new do |s|
5
- s.authors = ['Yehuda Katz', 'José Valim']
6
- s.description = %q{A scripting framework that replaces rake, sake and rubigen}
7
- s.email = 'ruby-thor@googlegroups.com'
8
- s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
9
- s.extra_rdoc_files = ['CHANGELOG.rdoc', 'LICENSE.md', 'README.md', 'Thorfile']
10
- s.files = `git ls-files`.split("\n")
11
- s.homepage = 'http://whatisthor.com/'
12
- s.licenses = ['MIT']
13
- s.name = 'thor'
14
- s.rdoc_options = ['--charset=UTF-8']
15
- s.require_paths = ['lib']
16
- s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
17
- s.summary = s.description
18
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
- s.version = Thor::VERSION
6
+ Gem::Specification.new do |spec|
7
+ spec.add_development_dependency 'bundler', '~> 1.0'
8
+ spec.authors = ['Yehuda Katz', 'José Valim']
9
+ spec.description = %q{A scripting framework that replaces rake, sake and rubigen}
10
+ spec.email = 'ruby-thor@googlegroups.com'
11
+ spec.executables = %w(thor)
12
+ spec.files = %w(.document CHANGELOG.md LICENSE.md README.md Thorfile thor.gemspec)
13
+ spec.files += Dir.glob("bin/**/*")
14
+ spec.files += Dir.glob("lib/**/*.rb")
15
+ spec.files += Dir.glob("spec/**/*")
16
+ spec.homepage = 'http://whatisthor.com/'
17
+ spec.licenses = ['MIT']
18
+ spec.name = 'thor'
19
+ spec.require_paths = ['lib']
20
+ spec.required_rubygems_version = '>= 1.3.6'
21
+ spec.summary = spec.description
22
+ spec.test_files = Dir.glob("spec/**/*")
23
+ spec.version = Thor::VERSION
20
24
  end