thor 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +13 -7
  3. data/Thorfile +4 -5
  4. data/bin/thor +1 -1
  5. data/lib/thor.rb +78 -67
  6. data/lib/thor/actions.rb +57 -56
  7. data/lib/thor/actions/create_file.rb +33 -35
  8. data/lib/thor/actions/create_link.rb +2 -3
  9. data/lib/thor/actions/directory.rb +37 -38
  10. data/lib/thor/actions/empty_directory.rb +67 -69
  11. data/lib/thor/actions/file_manipulation.rb +17 -15
  12. data/lib/thor/actions/inject_into_file.rb +27 -29
  13. data/lib/thor/base.rb +193 -189
  14. data/lib/thor/command.rb +20 -23
  15. data/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -24
  16. data/lib/thor/core_ext/io_binary_read.rb +2 -4
  17. data/lib/thor/core_ext/ordered_hash.rb +9 -11
  18. data/lib/thor/error.rb +5 -1
  19. data/lib/thor/group.rb +53 -54
  20. data/lib/thor/invocation.rb +44 -38
  21. data/lib/thor/line_editor.rb +17 -0
  22. data/lib/thor/line_editor/basic.rb +35 -0
  23. data/lib/thor/line_editor/readline.rb +88 -0
  24. data/lib/thor/parser.rb +4 -4
  25. data/lib/thor/parser/argument.rb +28 -29
  26. data/lib/thor/parser/arguments.rb +102 -98
  27. data/lib/thor/parser/option.rb +26 -22
  28. data/lib/thor/parser/options.rb +86 -86
  29. data/lib/thor/rake_compat.rb +9 -10
  30. data/lib/thor/runner.rb +141 -141
  31. data/lib/thor/shell.rb +27 -34
  32. data/lib/thor/shell/basic.rb +91 -63
  33. data/lib/thor/shell/color.rb +44 -43
  34. data/lib/thor/shell/html.rb +59 -60
  35. data/lib/thor/util.rb +24 -27
  36. data/lib/thor/version.rb +1 -1
  37. data/spec/actions/create_file_spec.rb +25 -27
  38. data/spec/actions/create_link_spec.rb +19 -18
  39. data/spec/actions/directory_spec.rb +31 -31
  40. data/spec/actions/empty_directory_spec.rb +18 -18
  41. data/spec/actions/file_manipulation_spec.rb +38 -28
  42. data/spec/actions/inject_into_file_spec.rb +13 -13
  43. data/spec/actions_spec.rb +43 -43
  44. data/spec/base_spec.rb +45 -38
  45. data/spec/command_spec.rb +13 -14
  46. data/spec/core_ext/hash_with_indifferent_access_spec.rb +19 -19
  47. data/spec/core_ext/ordered_hash_spec.rb +6 -6
  48. data/spec/exit_condition_spec.rb +4 -4
  49. data/spec/fixtures/invoke.thor +19 -0
  50. data/spec/fixtures/script.thor +1 -1
  51. data/spec/group_spec.rb +30 -24
  52. data/spec/helper.rb +28 -15
  53. data/spec/invocation_spec.rb +39 -19
  54. data/spec/line_editor/basic_spec.rb +28 -0
  55. data/spec/line_editor/readline_spec.rb +69 -0
  56. data/spec/line_editor_spec.rb +43 -0
  57. data/spec/parser/argument_spec.rb +12 -12
  58. data/spec/parser/arguments_spec.rb +11 -11
  59. data/spec/parser/option_spec.rb +33 -25
  60. data/spec/parser/options_spec.rb +66 -52
  61. data/spec/quality_spec.rb +75 -0
  62. data/spec/rake_compat_spec.rb +10 -10
  63. data/spec/register_spec.rb +60 -30
  64. data/spec/runner_spec.rb +67 -62
  65. data/spec/sandbox/application.rb +2 -0
  66. data/spec/sandbox/app{1}/README +3 -0
  67. data/spec/sandbox/bundle/execute.rb +6 -0
  68. data/spec/sandbox/bundle/main.thor +1 -0
  69. data/spec/sandbox/command.thor +10 -0
  70. data/spec/sandbox/doc/%file_name%.rb.tt +1 -0
  71. data/spec/sandbox/doc/COMMENTER +11 -0
  72. data/spec/sandbox/doc/README +3 -0
  73. data/spec/sandbox/doc/block_helper.rb +3 -0
  74. data/spec/sandbox/doc/config.rb +1 -0
  75. data/spec/sandbox/doc/config.yaml.tt +1 -0
  76. data/spec/sandbox/doc/excluding/%file_name%.rb.tt +1 -0
  77. data/spec/sandbox/enum.thor +10 -0
  78. data/spec/sandbox/group.thor +128 -0
  79. data/spec/sandbox/invoke.thor +131 -0
  80. data/spec/sandbox/path with spaces b/data/spec/sandbox/path with → spaces +0 -0
  81. data/spec/sandbox/preserve/script.sh +3 -0
  82. data/spec/sandbox/script.thor +220 -0
  83. data/spec/sandbox/subcommand.thor +17 -0
  84. data/spec/shell/basic_spec.rb +107 -86
  85. data/spec/shell/color_spec.rb +32 -8
  86. data/spec/shell/html_spec.rb +3 -4
  87. data/spec/shell_spec.rb +7 -7
  88. data/spec/subcommand_spec.rb +20 -2
  89. data/spec/thor_spec.rb +111 -97
  90. data/spec/util_spec.rb +30 -30
  91. data/thor.gemspec +14 -14
  92. metadata +69 -25
@@ -1,22 +1,23 @@
1
- require 'helper'
2
- require 'thor/actions'
3
- require 'tempfile'
1
+ require "helper"
2
+ require "thor/actions"
3
+ require "tempfile"
4
4
 
5
5
  describe Thor::Actions::CreateLink do
6
6
  before do
7
- @hardlink_to = File.join(Dir.tmpdir, 'linkdest.rb')
7
+ @silence = false
8
+ @hardlink_to = File.join(Dir.tmpdir, "linkdest.rb")
8
9
  ::FileUtils.rm_rf(destination_root)
9
10
  ::FileUtils.rm_rf(@hardlink_to)
10
11
  end
11
12
 
12
- def create_link(destination=nil, config={}, options={})
13
- @base = MyCounter.new([1,2], options, { :destination_root => destination_root })
14
- @base.stub!(:file_name).and_return('rdoc')
13
+ def create_link(destination = nil, config = {}, options = {})
14
+ @base = MyCounter.new([1, 2], options, :destination_root => destination_root)
15
+ allow(@base).to receive(:file_name).and_return("rdoc")
15
16
 
16
17
  @tempfile = Tempfile.new("config.rb")
17
18
 
18
19
  @action = Thor::Actions::CreateLink.new(@base, destination, @tempfile.path,
19
- { :verbose => !@silence }.merge(config))
20
+ {:verbose => !@silence}.merge(config))
20
21
  end
21
22
 
22
23
  def invoke!
@@ -36,30 +37,30 @@ describe Thor::Actions::CreateLink do
36
37
  create_link("doc/config.rb", :symbolic => true)
37
38
  invoke!
38
39
  destination_path = File.join(destination_root, "doc/config.rb")
39
- expect(File.exists?(destination_path)).to be_true
40
- expect(File.symlink?(destination_path)).to be_true
40
+ expect(File.exist?(destination_path)).to be true
41
+ expect(File.symlink?(destination_path)).to be true
41
42
  end
42
43
 
43
44
  it "creates a hard link for :symbolic => false" do
44
45
  create_link(@hardlink_to, :symbolic => false)
45
46
  invoke!
46
47
  destination_path = @hardlink_to
47
- expect(File.exists?(destination_path)).to be_true
48
- expect(File.symlink?(destination_path)).to be_false
48
+ expect(File.exist?(destination_path)).to be true
49
+ expect(File.symlink?(destination_path)).to be false
49
50
  end
50
51
 
51
52
  it "creates a symbolic link by default" do
52
53
  create_link("doc/config.rb")
53
54
  invoke!
54
55
  destination_path = File.join(destination_root, "doc/config.rb")
55
- expect(File.exists?(destination_path)).to be_true
56
- expect(File.symlink?(destination_path)).to be_true
56
+ expect(File.exist?(destination_path)).to be true
57
+ expect(File.symlink?(destination_path)).to be true
57
58
  end
58
59
 
59
60
  it "does not create a link if pretending" do
60
61
  create_link("doc/config.rb", {}, :pretend => true)
61
62
  invoke!
62
- expect(File.exists?(File.join(destination_root, "doc/config.rb"))).to be_false
63
+ expect(File.exist?(File.join(destination_root, "doc/config.rb"))).to be false
63
64
  end
64
65
 
65
66
  it "shows created status to the user" do
@@ -77,9 +78,9 @@ describe Thor::Actions::CreateLink do
77
78
  describe "#identical?" do
78
79
  it "returns true if the destination link exists and is identical" do
79
80
  create_link("doc/config.rb")
80
- expect(@action.identical?).to be_false
81
+ expect(@action.identical?).to be false
81
82
  invoke!
82
- expect(@action.identical?).to be_true
83
+ expect(@action.identical?).to be true
83
84
  end
84
85
  end
85
86
 
@@ -89,7 +90,7 @@ describe Thor::Actions::CreateLink do
89
90
  invoke!
90
91
  File.delete(@tempfile.path)
91
92
  revoke!
92
- expect(File.symlink?(@action.destination)).to be_false
93
+ expect(File.symlink?(@action.destination)).to be false
93
94
  end
94
95
  end
95
96
  end
@@ -1,48 +1,48 @@
1
- require 'helper'
2
- require 'thor/actions'
1
+ require "helper"
2
+ require "thor/actions"
3
3
 
4
4
  describe Thor::Actions::Directory do
5
5
  before do
6
6
  ::FileUtils.rm_rf(destination_root)
7
- invoker.stub!(:file_name).and_return("rdoc")
7
+ allow(invoker).to receive(:file_name).and_return("rdoc")
8
8
  end
9
9
 
10
10
  def invoker
11
- @invoker ||= WhinyGenerator.new([1,2], {}, { :destination_root => destination_root })
11
+ @invoker ||= WhinyGenerator.new([1, 2], {}, :destination_root => destination_root)
12
12
  end
13
13
 
14
14
  def revoker
15
- @revoker ||= WhinyGenerator.new([1,2], {}, { :destination_root => destination_root, :behavior => :revoke })
15
+ @revoker ||= WhinyGenerator.new([1, 2], {}, :destination_root => destination_root, :behavior => :revoke)
16
16
  end
17
17
 
18
18
  def invoke!(*args, &block)
19
- capture(:stdout){ invoker.directory(*args, &block) }
19
+ capture(:stdout) { invoker.directory(*args, &block) }
20
20
  end
21
21
 
22
22
  def revoke!(*args, &block)
23
- capture(:stdout){ revoker.directory(*args, &block) }
23
+ capture(:stdout) { revoker.directory(*args, &block) }
24
24
  end
25
25
 
26
26
  def exists_and_identical?(source_path, destination_path)
27
- %w(config.rb README).each do |file|
27
+ %w[config.rb README].each do |file|
28
28
  source = File.join(source_root, source_path, file)
29
29
  destination = File.join(destination_root, destination_path, file)
30
30
 
31
- expect(File.exists?(destination)).to be_true
32
- expect(FileUtils.identical?(source, destination)).to be_true
31
+ expect(File.exist?(destination)).to be true
32
+ expect(FileUtils.identical?(source, destination)).to be true
33
33
  end
34
34
  end
35
35
 
36
36
  describe "#invoke!" do
37
37
  it "raises an error if the source does not exist" do
38
- expect {
38
+ expect do
39
39
  invoke! "unknown"
40
- }.to raise_error(Thor::Error, /Could not find "unknown" in any of your source paths/)
40
+ end.to raise_error(Thor::Error, /Could not find "unknown" in any of your source paths/)
41
41
  end
42
42
 
43
43
  it "does not create a directory in pretend mode" do
44
44
  invoke! "doc", "ghost", :pretend => true
45
- expect(File.exists?("ghost")).to be_false
45
+ expect(File.exist?("ghost")).to be false
46
46
  end
47
47
 
48
48
  it "copies the whole directory recursively to the default destination" do
@@ -59,25 +59,25 @@ describe Thor::Actions::Directory do
59
59
  invoke! ".", "commands", :recursive => false
60
60
 
61
61
  file = File.join(destination_root, "commands", "group.thor")
62
- expect(File.exists?(file)).to be_true
62
+ expect(File.exist?(file)).to be true
63
63
 
64
64
  file = File.join(destination_root, "commands", "doc")
65
- expect(File.exists?(file)).to be_false
65
+ expect(File.exist?(file)).to be false
66
66
 
67
67
  file = File.join(destination_root, "commands", "doc", "README")
68
- expect(File.exists?(file)).to be_false
68
+ expect(File.exist?(file)).to be false
69
69
  end
70
70
 
71
71
  it "ignores files within excluding/ directories when exclude_pattern is provided" do
72
72
  invoke! "doc", "docs", :exclude_pattern => /excluding\//
73
73
  file = File.join(destination_root, "docs", "excluding", "rdoc.rb")
74
- expect(File.exists?(file)).to be_false
74
+ expect(File.exist?(file)).to be false
75
75
  end
76
76
 
77
- it "copies and evalutes files within excluding/ directory when no exclude_pattern is present" do
77
+ it "copies and evaluates files within excluding/ directory when no exclude_pattern is present" do
78
78
  invoke! "doc", "docs"
79
79
  file = File.join(destination_root, "docs", "excluding", "rdoc.rb")
80
- expect(File.exists?(file)).to be_true
80
+ expect(File.exist?(file)).to be true
81
81
  expect(File.read(file)).to eq("BAR = BAR\n")
82
82
  end
83
83
 
@@ -91,11 +91,11 @@ describe Thor::Actions::Directory do
91
91
  it "copies and evaluates templates" do
92
92
  invoke! "doc", "docs"
93
93
  file = File.join(destination_root, "docs", "rdoc.rb")
94
- expect(File.exists?(file)).to be_true
94
+ expect(File.exist?(file)).to be true
95
95
  expect(File.read(file)).to eq("FOO = FOO\n")
96
96
  end
97
97
 
98
- it "copies directories and preserved file mode" do
98
+ it "copies directories and preserves file mode" do
99
99
  invoke! "preserve", "preserved", :mode => :preserve
100
100
  original = File.join(source_root, "preserve", "script.sh")
101
101
  copy = File.join(destination_root, "preserved", "script.sh")
@@ -105,20 +105,20 @@ describe Thor::Actions::Directory do
105
105
  it "copies directories" do
106
106
  invoke! "doc", "docs"
107
107
  file = File.join(destination_root, "docs", "components")
108
- expect(File.exists?(file)).to be_true
109
- expect(File.directory?(file)).to be_true
108
+ expect(File.exist?(file)).to be true
109
+ expect(File.directory?(file)).to be true
110
110
  end
111
111
 
112
112
  it "does not copy .empty_directory files" do
113
113
  invoke! "doc", "docs"
114
114
  file = File.join(destination_root, "docs", "components", ".empty_directory")
115
- expect(File.exists?(file)).to be_false
115
+ expect(File.exist?(file)).to be false
116
116
  end
117
117
 
118
118
  it "copies directories even if they are empty" do
119
119
  invoke! "doc/components", "docs/components"
120
120
  file = File.join(destination_root, "docs", "components")
121
- expect(File.exists?(file)).to be_true
121
+ expect(File.exist?(file)).to be true
122
122
  end
123
123
 
124
124
  it "does not copy empty directories twice" do
@@ -139,7 +139,7 @@ describe Thor::Actions::Directory do
139
139
  invoke!("doc") do |content|
140
140
  checked ||= !!(content =~ /FOO/)
141
141
  end
142
- expect(checked).to be_true
142
+ expect(checked).to be true
143
143
  end
144
144
 
145
145
  it "works with glob characters in the path" do
@@ -153,17 +153,17 @@ describe Thor::Actions::Directory do
153
153
  invoke! "doc"
154
154
  revoke! "doc"
155
155
 
156
- expect(File.exists?(File.join(destination_root, "doc", "README"))).to be_false
157
- expect(File.exists?(File.join(destination_root, "doc", "config.rb"))).to be_false
158
- expect(File.exists?(File.join(destination_root, "doc", "components"))).to be_false
156
+ expect(File.exist?(File.join(destination_root, "doc", "README"))).to be false
157
+ expect(File.exist?(File.join(destination_root, "doc", "config.rb"))).to be false
158
+ expect(File.exist?(File.join(destination_root, "doc", "components"))).to be false
159
159
  end
160
160
 
161
161
  it "works with glob characters in the path" do
162
162
  invoke! "app{1}"
163
- expect(File.exists?(File.join(destination_root, "app{1}", "README"))).to be_true
163
+ expect(File.exist?(File.join(destination_root, "app{1}", "README"))).to be true
164
164
 
165
165
  revoke! "app{1}"
166
- expect(File.exists?(File.join(destination_root, "app{1}", "README"))).to be_false
166
+ expect(File.exist?(File.join(destination_root, "app{1}", "README"))).to be false
167
167
  end
168
168
  end
169
169
  end
@@ -1,12 +1,12 @@
1
- require 'helper'
2
- require 'thor/actions'
1
+ require "helper"
2
+ require "thor/actions"
3
3
 
4
4
  describe Thor::Actions::EmptyDirectory do
5
5
  before do
6
6
  ::FileUtils.rm_rf(destination_root)
7
7
  end
8
8
 
9
- def empty_directory(destination, options={})
9
+ def empty_directory(destination, options = {})
10
10
  @action = Thor::Actions::EmptyDirectory.new(base, destination)
11
11
  end
12
12
 
@@ -19,33 +19,33 @@ describe Thor::Actions::EmptyDirectory do
19
19
  end
20
20
 
21
21
  def base
22
- @base ||= MyCounter.new([1,2], {}, { :destination_root => destination_root })
22
+ @base ||= MyCounter.new([1, 2], {}, :destination_root => destination_root)
23
23
  end
24
24
 
25
25
  describe "#destination" do
26
26
  it "returns the full destination with the destination_root" do
27
- expect(empty_directory('doc').destination).to eq(File.join(destination_root, 'doc'))
27
+ expect(empty_directory("doc").destination).to eq(File.join(destination_root, "doc"))
28
28
  end
29
29
 
30
30
  it "takes relative root into account" do
31
- base.inside('doc') do
32
- expect(empty_directory('contents').destination).to eq(File.join(destination_root, 'doc', 'contents'))
31
+ base.inside("doc") do
32
+ expect(empty_directory("contents").destination).to eq(File.join(destination_root, "doc", "contents"))
33
33
  end
34
34
  end
35
35
  end
36
36
 
37
37
  describe "#relative_destination" do
38
38
  it "returns the relative destination to the original destination root" do
39
- base.inside('doc') do
40
- expect(empty_directory('contents').relative_destination).to eq('doc/contents')
39
+ base.inside("doc") do
40
+ expect(empty_directory("contents").relative_destination).to eq("doc/contents")
41
41
  end
42
42
  end
43
43
  end
44
44
 
45
45
  describe "#given_destination" do
46
46
  it "returns the destination supplied by the user" do
47
- base.inside('doc') do
48
- expect(empty_directory('contents').given_destination).to eq('contents')
47
+ base.inside("doc") do
48
+ expect(empty_directory("contents").given_destination).to eq("contents")
49
49
  end
50
50
  end
51
51
  end
@@ -54,7 +54,7 @@ describe Thor::Actions::EmptyDirectory do
54
54
  it "copies the file to the specified destination" do
55
55
  empty_directory("doc")
56
56
  invoke!
57
- expect(File.exists?(File.join(destination_root, "doc"))).to be_true
57
+ expect(File.exist?(File.join(destination_root, "doc"))).to be true
58
58
  end
59
59
 
60
60
  it "shows created status to the user" do
@@ -66,7 +66,7 @@ describe Thor::Actions::EmptyDirectory do
66
66
  base.inside("foo", :pretend => true) do
67
67
  empty_directory("ghost")
68
68
  end
69
- expect(File.exists?(File.join(base.destination_root, "ghost"))).to be_false
69
+ expect(File.exist?(File.join(base.destination_root, "ghost"))).to be false
70
70
  end
71
71
 
72
72
  describe "when directory exists" do
@@ -83,16 +83,16 @@ describe Thor::Actions::EmptyDirectory do
83
83
  empty_directory("doc")
84
84
  invoke!
85
85
  revoke!
86
- expect(File.exists?(@action.destination)).to be_false
86
+ expect(File.exist?(@action.destination)).to be false
87
87
  end
88
88
  end
89
89
 
90
90
  describe "#exists?" do
91
91
  it "returns true if the destination file exists" do
92
92
  empty_directory("doc")
93
- expect(@action.exists?).to be_false
93
+ expect(@action.exists?).to be false
94
94
  invoke!
95
- expect(@action.exists?).to be_true
95
+ expect(@action.exists?).to be true
96
96
  end
97
97
  end
98
98
 
@@ -100,7 +100,7 @@ describe Thor::Actions::EmptyDirectory do
100
100
  describe "#convert_encoded_instructions" do
101
101
  before do
102
102
  empty_directory("test_dir")
103
- @action.base.stub!(:file_name).and_return("expected")
103
+ allow(@action.base).to receive(:file_name).and_return("expected")
104
104
  end
105
105
 
106
106
  it "accepts and executes a 'legal' %\w+% encoded instruction" do
@@ -109,10 +109,10 @@ describe Thor::Actions::EmptyDirectory do
109
109
 
110
110
  it "accepts and executes a private %\w+% encoded instruction" do
111
111
  @action.base.extend Module.new {
112
- private
113
112
  def private_file_name
114
113
  "expected"
115
114
  end
115
+ private :private_file_name
116
116
  }
117
117
  expect(@action.send(:convert_encoded_instructions, "%private_file_name%.txt")).to eq("expected.txt")
118
118
  end
@@ -1,10 +1,10 @@
1
- require 'helper'
1
+ require "helper"
2
2
 
3
3
  class Application; end
4
4
 
5
5
  describe Thor::Actions do
6
- def runner(options={})
7
- @runner ||= MyCounter.new([1], options, { :destination_root => destination_root })
6
+ def runner(options = {})
7
+ @runner ||= MyCounter.new([1], options, :destination_root => destination_root)
8
8
  end
9
9
 
10
10
  def action(*args, &block)
@@ -12,11 +12,11 @@ describe Thor::Actions do
12
12
  end
13
13
 
14
14
  def exists_and_identical?(source, destination)
15
- destination = File.join(destination_root, destination)
16
- expect(File.exists?(destination)).to be_true
15
+ destination = File.join(destination_root, destination)
16
+ expect(File.exist?(destination)).to be true
17
17
 
18
- source = File.join(source_root, source)
19
- expect(FileUtils).to be_identical(source, destination)
18
+ source = File.join(source_root, source)
19
+ expect(FileUtils).to be_identical(source, destination)
20
20
  end
21
21
 
22
22
  def file
@@ -29,23 +29,23 @@ describe Thor::Actions do
29
29
 
30
30
  describe "#chmod" do
31
31
  it "executes the command given" do
32
- FileUtils.should_receive(:chmod_R).with(0755, file)
32
+ expect(FileUtils).to receive(:chmod_R).with(0755, file) # rubocop:disable SymbolName
33
33
  action :chmod, "foo", 0755
34
34
  end
35
35
 
36
- it "does not execute the command if pretending given" do
37
- FileUtils.should_not_receive(:chmod_R)
36
+ it "does not execute the command if pretending" do
37
+ expect(FileUtils).not_to receive(:chmod_R) # rubocop:disable SymbolName
38
38
  runner(:pretend => true)
39
39
  action :chmod, "foo", 0755
40
40
  end
41
41
 
42
42
  it "logs status" do
43
- FileUtils.should_receive(:chmod_R).with(0755, file)
43
+ expect(FileUtils).to receive(:chmod_R).with(0755, file) # rubocop:disable SymbolName
44
44
  expect(action(:chmod, "foo", 0755)).to eq(" chmod foo\n")
45
45
  end
46
46
 
47
47
  it "does not log status if required" do
48
- FileUtils.should_receive(:chmod_R).with(0755, file)
48
+ expect(FileUtils).to receive(:chmod_R).with(0755, file) # rubocop:disable SymbolName
49
49
  expect(action(:chmod, "foo", 0755, :verbose => false)).to be_empty
50
50
  end
51
51
  end
@@ -122,7 +122,7 @@ describe Thor::Actions do
122
122
  end
123
123
 
124
124
  it "allows the destination to be set as a block result" do
125
- action(:get, "doc/README"){ |c| "docs/README" }
125
+ action(:get, "doc/README") { |c| "docs/README" }
126
126
  exists_and_identical?("doc/README", "docs/README")
127
127
  end
128
128
 
@@ -138,7 +138,7 @@ describe Thor::Actions do
138
138
 
139
139
  it "accepts http remote sources" do
140
140
  body = "__start__\nHTTPFILE\n__end__\n"
141
- FakeWeb.register_uri(:get, 'http://example.com/file.txt', :body => body)
141
+ FakeWeb.register_uri(:get, "http://example.com/file.txt", :body => body)
142
142
  action :get, "http://example.com/file.txt" do |content|
143
143
  expect(content).to eq(body)
144
144
  end
@@ -147,7 +147,7 @@ describe Thor::Actions do
147
147
 
148
148
  it "accepts https remote sources" do
149
149
  body = "__start__\nHTTPSFILE\n__end__\n"
150
- FakeWeb.register_uri(:get, 'https://example.com/file.txt', :body => body)
150
+ FakeWeb.register_uri(:get, "https://example.com/file.txt", :body => body)
151
151
  action :get, "https://example.com/file.txt" do |content|
152
152
  expect(content).to eq(body)
153
153
  end
@@ -172,23 +172,33 @@ describe Thor::Actions do
172
172
  end
173
173
 
174
174
  it "copies the template to the specified destination" do
175
+ runner.instance_variable_set("@klass", "Config")
175
176
  action :template, "doc/config.rb", "doc/configuration.rb"
176
177
  file = File.join(destination_root, "doc/configuration.rb")
177
- expect(File.exists?(file)).to be_true
178
+ expect(File.exist?(file)).to be true
178
179
  end
179
180
 
180
- it "converts enconded instructions" do
181
- runner.should_receive(:file_name).and_return("rdoc")
181
+ it "converts encoded instructions" do
182
+ expect(runner).to receive(:file_name).and_return("rdoc")
182
183
  action :template, "doc/%file_name%.rb.tt"
183
184
  file = File.join(destination_root, "doc/rdoc.rb")
184
- expect(File.exists?(file)).to be_true
185
+ expect(File.exist?(file)).to be true
186
+ end
187
+
188
+ it "accepts filename without .tt for template method" do
189
+ expect(runner).to receive(:file_name).and_return("rdoc")
190
+ action :template, "doc/%file_name%.rb"
191
+ file = File.join(destination_root, "doc/rdoc.rb")
192
+ expect(File.exist?(file)).to be true
185
193
  end
186
194
 
187
195
  it "logs status" do
196
+ runner.instance_variable_set("@klass", "Config")
188
197
  expect(capture(:stdout) { runner.template("doc/config.rb") }).to eq(" create doc/config.rb\n")
189
198
  end
190
199
 
191
200
  it "accepts a block to change output" do
201
+ runner.instance_variable_set("@klass", "Config")
192
202
  action :template, "doc/config.rb" do |content|
193
203
  "OMG" + content
194
204
  end
@@ -199,7 +209,7 @@ describe Thor::Actions do
199
209
  action :template, "doc/config.yaml.tt"
200
210
 
201
211
  file = File.join(destination_root, "doc/config.yaml")
202
- expect(File.exists?(file)).to be_true
212
+ expect(File.exist?(file)).to be true
203
213
  end
204
214
  end
205
215
 
@@ -215,18 +225,18 @@ describe Thor::Actions do
215
225
  describe "#remove_file" do
216
226
  it "removes the file given" do
217
227
  action :remove_file, "doc/README"
218
- expect(File.exists?(file)).to be_false
228
+ expect(File.exist?(file)).to be false
219
229
  end
220
230
 
221
231
  it "removes directories too" do
222
232
  action :remove_dir, "doc"
223
- expect(File.exists?(File.join(destination_root, "doc"))).to be_false
233
+ expect(File.exist?(File.join(destination_root, "doc"))).to be false
224
234
  end
225
235
 
226
236
  it "does not remove if pretending" do
227
237
  runner(:pretend => true)
228
238
  action :remove_file, "doc/README"
229
- expect(File.exists?(file)).to be_true
239
+ expect(File.exist?(file)).to be true
230
240
  end
231
241
 
232
242
  it "logs status" do
@@ -251,7 +261,7 @@ describe Thor::Actions do
251
261
  end
252
262
 
253
263
  it "accepts a block" do
254
- action(:gsub_file, "doc/README", "__start__"){ |match| match.gsub('__', '').upcase }
264
+ action(:gsub_file, "doc/README", "__start__") { |match| match.gsub("__", "").upcase }
255
265
  expect(File.binread(file)).to eq("START\nREADME\n__end__\n")
256
266
  end
257
267
 
@@ -260,7 +270,7 @@ describe Thor::Actions do
260
270
  end
261
271
 
262
272
  it "does not log status if required" do
263
- expect(action(:gsub_file, file, "__", :verbose => false){ |match| match * 2 }).to be_empty
273
+ expect(action(:gsub_file, file, "__", :verbose => false) { |match| match * 2 }).to be_empty
264
274
  end
265
275
  end
266
276
 
@@ -271,7 +281,7 @@ describe Thor::Actions do
271
281
  end
272
282
 
273
283
  it "accepts a block" do
274
- action(:append_to_file, "doc/README"){ "END\n" }
284
+ action(:append_to_file, "doc/README") { "END\n" }
275
285
  expect(File.binread(file)).to eq("__start__\nREADME\n__end__\nEND\n")
276
286
  end
277
287
 
@@ -287,7 +297,7 @@ describe Thor::Actions do
287
297
  end
288
298
 
289
299
  it "accepts a block" do
290
- action(:prepend_to_file, "doc/README"){ "START\n" }
300
+ action(:prepend_to_file, "doc/README") { "START\n" }
291
301
  expect(File.binread(file)).to eq("START\n__start__\nREADME\n__end__\n")
292
302
  end
293
303
 
@@ -307,7 +317,7 @@ describe Thor::Actions do
307
317
  end
308
318
 
309
319
  it "accepts a block" do
310
- action(:inject_into_class, "application.rb", Application){ " filter_parameters :password\n" }
320
+ action(:inject_into_class, "application.rb", Application) { " filter_parameters :password\n" }
311
321
  expect(File.binread(file)).to eq("class Application < Base\n filter_parameters :password\nend\n")
312
322
  end
313
323