thor 0.19.1 → 0.19.2
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/CHANGELOG.md +24 -0
- data/CONTRIBUTING.md +15 -0
- data/README.md +7 -1
- data/lib/thor.rb +31 -23
- data/lib/thor/actions.rb +21 -22
- data/lib/thor/actions/create_file.rb +1 -1
- data/lib/thor/actions/create_link.rb +1 -1
- data/lib/thor/actions/directory.rb +2 -2
- data/lib/thor/actions/empty_directory.rb +8 -8
- data/lib/thor/actions/file_manipulation.rb +23 -12
- data/lib/thor/actions/inject_into_file.rb +10 -14
- data/lib/thor/base.rb +33 -33
- data/lib/thor/command.rb +9 -9
- data/lib/thor/core_ext/hash_with_indifferent_access.rb +9 -1
- data/lib/thor/core_ext/io_binary_read.rb +7 -5
- data/lib/thor/core_ext/ordered_hash.rb +94 -63
- data/lib/thor/error.rb +3 -3
- data/lib/thor/group.rb +12 -12
- data/lib/thor/invocation.rb +4 -5
- data/lib/thor/parser/argument.rb +4 -7
- data/lib/thor/parser/arguments.rb +16 -16
- data/lib/thor/parser/option.rb +39 -19
- data/lib/thor/parser/options.rb +7 -5
- data/lib/thor/runner.rb +25 -25
- data/lib/thor/shell.rb +1 -1
- data/lib/thor/shell/basic.rb +41 -26
- data/lib/thor/shell/color.rb +1 -1
- data/lib/thor/shell/html.rb +4 -4
- data/lib/thor/util.rb +8 -7
- data/lib/thor/version.rb +1 -1
- data/thor.gemspec +6 -9
- metadata +6 -148
- data/Thorfile +0 -29
- data/spec/actions/create_file_spec.rb +0 -168
- data/spec/actions/create_link_spec.rb +0 -96
- data/spec/actions/directory_spec.rb +0 -169
- data/spec/actions/empty_directory_spec.rb +0 -129
- data/spec/actions/file_manipulation_spec.rb +0 -392
- data/spec/actions/inject_into_file_spec.rb +0 -135
- data/spec/actions_spec.rb +0 -331
- data/spec/base_spec.rb +0 -298
- data/spec/command_spec.rb +0 -79
- data/spec/core_ext/hash_with_indifferent_access_spec.rb +0 -48
- data/spec/core_ext/ordered_hash_spec.rb +0 -115
- data/spec/exit_condition_spec.rb +0 -19
- data/spec/fixtures/application.rb +0 -2
- data/spec/fixtures/app{1}/README +0 -3
- data/spec/fixtures/bundle/execute.rb +0 -6
- data/spec/fixtures/bundle/main.thor +0 -1
- data/spec/fixtures/command.thor +0 -10
- data/spec/fixtures/doc/%file_name%.rb.tt +0 -1
- data/spec/fixtures/doc/COMMENTER +0 -11
- data/spec/fixtures/doc/README +0 -3
- data/spec/fixtures/doc/block_helper.rb +0 -3
- data/spec/fixtures/doc/config.rb +0 -1
- data/spec/fixtures/doc/config.yaml.tt +0 -1
- data/spec/fixtures/doc/excluding/%file_name%.rb.tt +0 -1
- data/spec/fixtures/enum.thor +0 -10
- data/spec/fixtures/group.thor +0 -128
- data/spec/fixtures/invoke.thor +0 -131
- data/spec/fixtures/path with spaces b/data/spec/fixtures/path with → spaces +0 -0
- data/spec/fixtures/preserve/script.sh +0 -3
- data/spec/fixtures/script.thor +0 -220
- data/spec/fixtures/subcommand.thor +0 -17
- data/spec/group_spec.rb +0 -222
- data/spec/helper.rb +0 -80
- data/spec/invocation_spec.rb +0 -120
- data/spec/line_editor/basic_spec.rb +0 -28
- data/spec/line_editor/readline_spec.rb +0 -69
- data/spec/line_editor_spec.rb +0 -43
- data/spec/parser/argument_spec.rb +0 -53
- data/spec/parser/arguments_spec.rb +0 -66
- data/spec/parser/option_spec.rb +0 -210
- data/spec/parser/options_spec.rb +0 -414
- data/spec/quality_spec.rb +0 -75
- data/spec/rake_compat_spec.rb +0 -72
- data/spec/register_spec.rb +0 -227
- data/spec/runner_spec.rb +0 -246
- data/spec/sandbox/application.rb +0 -2
- data/spec/sandbox/app{1}/README +0 -3
- data/spec/sandbox/bundle/execute.rb +0 -6
- data/spec/sandbox/bundle/main.thor +0 -1
- data/spec/sandbox/command.thor +0 -10
- data/spec/sandbox/doc/%file_name%.rb.tt +0 -1
- data/spec/sandbox/doc/COMMENTER +0 -11
- data/spec/sandbox/doc/README +0 -3
- data/spec/sandbox/doc/block_helper.rb +0 -3
- data/spec/sandbox/doc/config.rb +0 -1
- data/spec/sandbox/doc/config.yaml.tt +0 -1
- data/spec/sandbox/doc/excluding/%file_name%.rb.tt +0 -1
- data/spec/sandbox/enum.thor +0 -10
- data/spec/sandbox/group.thor +0 -128
- data/spec/sandbox/invoke.thor +0 -131
- data/spec/sandbox/path with spaces b/data/spec/sandbox/path with → spaces +0 -0
- data/spec/sandbox/preserve/script.sh +0 -3
- data/spec/sandbox/script.thor +0 -220
- data/spec/sandbox/subcommand.thor +0 -17
- data/spec/shell/basic_spec.rb +0 -337
- data/spec/shell/color_spec.rb +0 -119
- data/spec/shell/html_spec.rb +0 -31
- data/spec/shell_spec.rb +0 -47
- data/spec/subcommand_spec.rb +0 -48
- data/spec/thor_spec.rb +0 -505
- data/spec/util_spec.rb +0 -196
data/Thorfile
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
2
|
-
|
3
|
-
require "bundler"
|
4
|
-
require "thor/rake_compat"
|
5
|
-
|
6
|
-
class Default < Thor
|
7
|
-
include Thor::RakeCompat
|
8
|
-
Bundler::GemHelper.install_tasks
|
9
|
-
|
10
|
-
desc "build", "Build thor-#{Thor::VERSION}.gem into the pkg directory"
|
11
|
-
def build
|
12
|
-
Rake::Task["build"].execute
|
13
|
-
end
|
14
|
-
|
15
|
-
desc "install", "Build and install thor-#{Thor::VERSION}.gem into system gems"
|
16
|
-
def install
|
17
|
-
Rake::Task["install"].execute
|
18
|
-
end
|
19
|
-
|
20
|
-
desc "release", "Create tag v#{Thor::VERSION} and build and push thor-#{Thor::VERSION}.gem to Rubygems"
|
21
|
-
def release
|
22
|
-
Rake::Task["release"].execute
|
23
|
-
end
|
24
|
-
|
25
|
-
desc "spec", "Run RSpec code examples"
|
26
|
-
def spec
|
27
|
-
exec "rspec spec"
|
28
|
-
end
|
29
|
-
end
|
@@ -1,168 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
require "thor/actions"
|
3
|
-
|
4
|
-
describe Thor::Actions::CreateFile do
|
5
|
-
before do
|
6
|
-
@silence = false
|
7
|
-
::FileUtils.rm_rf(destination_root)
|
8
|
-
end
|
9
|
-
|
10
|
-
def create_file(destination = nil, config = {}, options = {})
|
11
|
-
@base = MyCounter.new([1, 2], options, :destination_root => destination_root)
|
12
|
-
allow(@base).to receive(:file_name).and_return("rdoc")
|
13
|
-
|
14
|
-
@action = Thor::Actions::CreateFile.new(@base, destination, "CONFIGURATION", {:verbose => !@silence}.merge(config))
|
15
|
-
end
|
16
|
-
|
17
|
-
def invoke!
|
18
|
-
capture(:stdout) { @action.invoke! }
|
19
|
-
end
|
20
|
-
|
21
|
-
def revoke!
|
22
|
-
capture(:stdout) { @action.revoke! }
|
23
|
-
end
|
24
|
-
|
25
|
-
def silence!
|
26
|
-
@silence = true
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#invoke!" do
|
30
|
-
it "creates a file" do
|
31
|
-
create_file("doc/config.rb")
|
32
|
-
invoke!
|
33
|
-
expect(File.exist?(File.join(destination_root, "doc/config.rb"))).to be true
|
34
|
-
end
|
35
|
-
|
36
|
-
it "does not create a file if pretending" do
|
37
|
-
create_file("doc/config.rb", {}, :pretend => true)
|
38
|
-
invoke!
|
39
|
-
expect(File.exist?(File.join(destination_root, "doc/config.rb"))).to be false
|
40
|
-
end
|
41
|
-
|
42
|
-
it "shows created status to the user" do
|
43
|
-
create_file("doc/config.rb")
|
44
|
-
expect(invoke!).to eq(" create doc/config.rb\n")
|
45
|
-
end
|
46
|
-
|
47
|
-
it "does not show any information if log status is false" do
|
48
|
-
silence!
|
49
|
-
create_file("doc/config.rb")
|
50
|
-
expect(invoke!).to be_empty
|
51
|
-
end
|
52
|
-
|
53
|
-
it "returns the given destination" do
|
54
|
-
capture(:stdout) do
|
55
|
-
expect(create_file("doc/config.rb").invoke!).to eq("doc/config.rb")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
it "converts encoded instructions" do
|
60
|
-
create_file("doc/%file_name%.rb.tt")
|
61
|
-
invoke!
|
62
|
-
expect(File.exist?(File.join(destination_root, "doc/rdoc.rb.tt"))).to be true
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "when file exists" do
|
66
|
-
before do
|
67
|
-
create_file("doc/config.rb")
|
68
|
-
invoke!
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "and is identical" do
|
72
|
-
it "shows identical status" do
|
73
|
-
create_file("doc/config.rb")
|
74
|
-
invoke!
|
75
|
-
expect(invoke!).to eq(" identical doc/config.rb\n")
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "and is not identical" do
|
80
|
-
before do
|
81
|
-
File.open(File.join(destination_root, "doc/config.rb"), "w") { |f| f.write("FOO = 3") }
|
82
|
-
end
|
83
|
-
|
84
|
-
it "shows forced status to the user if force is given" do
|
85
|
-
expect(create_file("doc/config.rb", {}, :force => true)).not_to be_identical
|
86
|
-
expect(invoke!).to eq(" force doc/config.rb\n")
|
87
|
-
end
|
88
|
-
|
89
|
-
it "shows skipped status to the user if skip is given" do
|
90
|
-
expect(create_file("doc/config.rb", {}, :skip => true)).not_to be_identical
|
91
|
-
expect(invoke!).to eq(" skip doc/config.rb\n")
|
92
|
-
end
|
93
|
-
|
94
|
-
it "shows forced status to the user if force is configured" do
|
95
|
-
expect(create_file("doc/config.rb", :force => true)).not_to be_identical
|
96
|
-
expect(invoke!).to eq(" force doc/config.rb\n")
|
97
|
-
end
|
98
|
-
|
99
|
-
it "shows skipped status to the user if skip is configured" do
|
100
|
-
expect(create_file("doc/config.rb", :skip => true)).not_to be_identical
|
101
|
-
expect(invoke!).to eq(" skip doc/config.rb\n")
|
102
|
-
end
|
103
|
-
|
104
|
-
it "shows conflict status to the user" do
|
105
|
-
file = File.join(destination_root, "doc/config.rb")
|
106
|
-
expect(create_file("doc/config.rb")).not_to be_identical
|
107
|
-
expect(Thor::LineEditor).to receive(:readline).with("Overwrite #{file}? (enter \"h\" for help) [Ynaqdh] ", anything).and_return("s")
|
108
|
-
|
109
|
-
content = invoke!
|
110
|
-
expect(content).to match(/conflict doc\/config\.rb/)
|
111
|
-
expect(content).to match(/skip doc\/config\.rb/)
|
112
|
-
end
|
113
|
-
|
114
|
-
it "creates the file if the file collision menu returns true" do
|
115
|
-
create_file("doc/config.rb")
|
116
|
-
expect(Thor::LineEditor).to receive(:readline).and_return("y")
|
117
|
-
expect(invoke!).to match(/force doc\/config\.rb/)
|
118
|
-
end
|
119
|
-
|
120
|
-
it "skips the file if the file collision menu returns false" do
|
121
|
-
create_file("doc/config.rb")
|
122
|
-
expect(Thor::LineEditor).to receive(:readline).and_return("n")
|
123
|
-
expect(invoke!).to match(/skip doc\/config\.rb/)
|
124
|
-
end
|
125
|
-
|
126
|
-
it "executes the block given to show file content" do
|
127
|
-
create_file("doc/config.rb")
|
128
|
-
expect(Thor::LineEditor).to receive(:readline).and_return("d", "n")
|
129
|
-
expect(@base.shell).to receive(:system).with(/diff -u/)
|
130
|
-
invoke!
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
describe "#revoke!" do
|
137
|
-
it "removes the destination file" do
|
138
|
-
create_file("doc/config.rb")
|
139
|
-
invoke!
|
140
|
-
revoke!
|
141
|
-
expect(File.exist?(@action.destination)).to be false
|
142
|
-
end
|
143
|
-
|
144
|
-
it "does not raise an error if the file does not exist" do
|
145
|
-
create_file("doc/config.rb")
|
146
|
-
revoke!
|
147
|
-
expect(File.exist?(@action.destination)).to be false
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
describe "#exists?" do
|
152
|
-
it "returns true if the destination file exists" do
|
153
|
-
create_file("doc/config.rb")
|
154
|
-
expect(@action.exists?).to be false
|
155
|
-
invoke!
|
156
|
-
expect(@action.exists?).to be true
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
describe "#identical?" do
|
161
|
-
it "returns true if the destination file exists and is identical" do
|
162
|
-
create_file("doc/config.rb")
|
163
|
-
expect(@action.identical?).to be false
|
164
|
-
invoke!
|
165
|
-
expect(@action.identical?).to be true
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
require "thor/actions"
|
3
|
-
require "tempfile"
|
4
|
-
|
5
|
-
describe Thor::Actions::CreateLink do
|
6
|
-
before do
|
7
|
-
@silence = false
|
8
|
-
@hardlink_to = File.join(Dir.tmpdir, "linkdest.rb")
|
9
|
-
::FileUtils.rm_rf(destination_root)
|
10
|
-
::FileUtils.rm_rf(@hardlink_to)
|
11
|
-
end
|
12
|
-
|
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")
|
16
|
-
|
17
|
-
@tempfile = Tempfile.new("config.rb")
|
18
|
-
|
19
|
-
@action = Thor::Actions::CreateLink.new(@base, destination, @tempfile.path,
|
20
|
-
{:verbose => !@silence}.merge(config))
|
21
|
-
end
|
22
|
-
|
23
|
-
def invoke!
|
24
|
-
capture(:stdout) { @action.invoke! }
|
25
|
-
end
|
26
|
-
|
27
|
-
def revoke!
|
28
|
-
capture(:stdout) { @action.revoke! }
|
29
|
-
end
|
30
|
-
|
31
|
-
def silence!
|
32
|
-
@silence = true
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#invoke!" do
|
36
|
-
it "creates a symbolic link for :symbolic => true" do
|
37
|
-
create_link("doc/config.rb", :symbolic => true)
|
38
|
-
invoke!
|
39
|
-
destination_path = File.join(destination_root, "doc/config.rb")
|
40
|
-
expect(File.exist?(destination_path)).to be true
|
41
|
-
expect(File.symlink?(destination_path)).to be true
|
42
|
-
end
|
43
|
-
|
44
|
-
it "creates a hard link for :symbolic => false" do
|
45
|
-
create_link(@hardlink_to, :symbolic => false)
|
46
|
-
invoke!
|
47
|
-
destination_path = @hardlink_to
|
48
|
-
expect(File.exist?(destination_path)).to be true
|
49
|
-
expect(File.symlink?(destination_path)).to be false
|
50
|
-
end
|
51
|
-
|
52
|
-
it "creates a symbolic link by default" do
|
53
|
-
create_link("doc/config.rb")
|
54
|
-
invoke!
|
55
|
-
destination_path = File.join(destination_root, "doc/config.rb")
|
56
|
-
expect(File.exist?(destination_path)).to be true
|
57
|
-
expect(File.symlink?(destination_path)).to be true
|
58
|
-
end
|
59
|
-
|
60
|
-
it "does not create a link if pretending" do
|
61
|
-
create_link("doc/config.rb", {}, :pretend => true)
|
62
|
-
invoke!
|
63
|
-
expect(File.exist?(File.join(destination_root, "doc/config.rb"))).to be false
|
64
|
-
end
|
65
|
-
|
66
|
-
it "shows created status to the user" do
|
67
|
-
create_link("doc/config.rb")
|
68
|
-
expect(invoke!).to eq(" create doc/config.rb\n")
|
69
|
-
end
|
70
|
-
|
71
|
-
it "does not show any information if log status is false" do
|
72
|
-
silence!
|
73
|
-
create_link("doc/config.rb")
|
74
|
-
expect(invoke!).to be_empty
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "#identical?" do
|
79
|
-
it "returns true if the destination link exists and is identical" do
|
80
|
-
create_link("doc/config.rb")
|
81
|
-
expect(@action.identical?).to be false
|
82
|
-
invoke!
|
83
|
-
expect(@action.identical?).to be true
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe "#revoke!" do
|
88
|
-
it "removes the symbolic link of non-existent destination" do
|
89
|
-
create_link("doc/config.rb")
|
90
|
-
invoke!
|
91
|
-
File.delete(@tempfile.path)
|
92
|
-
revoke!
|
93
|
-
expect(File.symlink?(@action.destination)).to be false
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,169 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
require "thor/actions"
|
3
|
-
|
4
|
-
describe Thor::Actions::Directory do
|
5
|
-
before do
|
6
|
-
::FileUtils.rm_rf(destination_root)
|
7
|
-
allow(invoker).to receive(:file_name).and_return("rdoc")
|
8
|
-
end
|
9
|
-
|
10
|
-
def invoker
|
11
|
-
@invoker ||= WhinyGenerator.new([1, 2], {}, :destination_root => destination_root)
|
12
|
-
end
|
13
|
-
|
14
|
-
def revoker
|
15
|
-
@revoker ||= WhinyGenerator.new([1, 2], {}, :destination_root => destination_root, :behavior => :revoke)
|
16
|
-
end
|
17
|
-
|
18
|
-
def invoke!(*args, &block)
|
19
|
-
capture(:stdout) { invoker.directory(*args, &block) }
|
20
|
-
end
|
21
|
-
|
22
|
-
def revoke!(*args, &block)
|
23
|
-
capture(:stdout) { revoker.directory(*args, &block) }
|
24
|
-
end
|
25
|
-
|
26
|
-
def exists_and_identical?(source_path, destination_path)
|
27
|
-
%w[config.rb README].each do |file|
|
28
|
-
source = File.join(source_root, source_path, file)
|
29
|
-
destination = File.join(destination_root, destination_path, file)
|
30
|
-
|
31
|
-
expect(File.exist?(destination)).to be true
|
32
|
-
expect(FileUtils.identical?(source, destination)).to be true
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "#invoke!" do
|
37
|
-
it "raises an error if the source does not exist" do
|
38
|
-
expect do
|
39
|
-
invoke! "unknown"
|
40
|
-
end.to raise_error(Thor::Error, /Could not find "unknown" in any of your source paths/)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "does not create a directory in pretend mode" do
|
44
|
-
invoke! "doc", "ghost", :pretend => true
|
45
|
-
expect(File.exist?("ghost")).to be false
|
46
|
-
end
|
47
|
-
|
48
|
-
it "copies the whole directory recursively to the default destination" do
|
49
|
-
invoke! "doc"
|
50
|
-
exists_and_identical?("doc", "doc")
|
51
|
-
end
|
52
|
-
|
53
|
-
it "copies the whole directory recursively to the specified destination" do
|
54
|
-
invoke! "doc", "docs"
|
55
|
-
exists_and_identical?("doc", "docs")
|
56
|
-
end
|
57
|
-
|
58
|
-
it "copies only the first level files if recursive" do
|
59
|
-
invoke! ".", "commands", :recursive => false
|
60
|
-
|
61
|
-
file = File.join(destination_root, "commands", "group.thor")
|
62
|
-
expect(File.exist?(file)).to be true
|
63
|
-
|
64
|
-
file = File.join(destination_root, "commands", "doc")
|
65
|
-
expect(File.exist?(file)).to be false
|
66
|
-
|
67
|
-
file = File.join(destination_root, "commands", "doc", "README")
|
68
|
-
expect(File.exist?(file)).to be false
|
69
|
-
end
|
70
|
-
|
71
|
-
it "ignores files within excluding/ directories when exclude_pattern is provided" do
|
72
|
-
invoke! "doc", "docs", :exclude_pattern => /excluding\//
|
73
|
-
file = File.join(destination_root, "docs", "excluding", "rdoc.rb")
|
74
|
-
expect(File.exist?(file)).to be false
|
75
|
-
end
|
76
|
-
|
77
|
-
it "copies and evaluates files within excluding/ directory when no exclude_pattern is present" do
|
78
|
-
invoke! "doc", "docs"
|
79
|
-
file = File.join(destination_root, "docs", "excluding", "rdoc.rb")
|
80
|
-
expect(File.exist?(file)).to be true
|
81
|
-
expect(File.read(file)).to eq("BAR = BAR\n")
|
82
|
-
end
|
83
|
-
|
84
|
-
it "copies files from the source relative to the current path" do
|
85
|
-
invoker.inside "doc" do
|
86
|
-
invoke! "."
|
87
|
-
end
|
88
|
-
exists_and_identical?("doc", "doc")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "copies and evaluates templates" do
|
92
|
-
invoke! "doc", "docs"
|
93
|
-
file = File.join(destination_root, "docs", "rdoc.rb")
|
94
|
-
expect(File.exist?(file)).to be true
|
95
|
-
expect(File.read(file)).to eq("FOO = FOO\n")
|
96
|
-
end
|
97
|
-
|
98
|
-
it "copies directories and preserves file mode" do
|
99
|
-
invoke! "preserve", "preserved", :mode => :preserve
|
100
|
-
original = File.join(source_root, "preserve", "script.sh")
|
101
|
-
copy = File.join(destination_root, "preserved", "script.sh")
|
102
|
-
expect(File.stat(original).mode).to eq(File.stat(copy).mode)
|
103
|
-
end
|
104
|
-
|
105
|
-
it "copies directories" do
|
106
|
-
invoke! "doc", "docs"
|
107
|
-
file = File.join(destination_root, "docs", "components")
|
108
|
-
expect(File.exist?(file)).to be true
|
109
|
-
expect(File.directory?(file)).to be true
|
110
|
-
end
|
111
|
-
|
112
|
-
it "does not copy .empty_directory files" do
|
113
|
-
invoke! "doc", "docs"
|
114
|
-
file = File.join(destination_root, "docs", "components", ".empty_directory")
|
115
|
-
expect(File.exist?(file)).to be false
|
116
|
-
end
|
117
|
-
|
118
|
-
it "copies directories even if they are empty" do
|
119
|
-
invoke! "doc/components", "docs/components"
|
120
|
-
file = File.join(destination_root, "docs", "components")
|
121
|
-
expect(File.exist?(file)).to be true
|
122
|
-
end
|
123
|
-
|
124
|
-
it "does not copy empty directories twice" do
|
125
|
-
content = invoke!("doc/components", "docs/components")
|
126
|
-
expect(content).not_to match(/exist/)
|
127
|
-
end
|
128
|
-
|
129
|
-
it "logs status" do
|
130
|
-
content = invoke!("doc")
|
131
|
-
expect(content).to match(/create doc\/README/)
|
132
|
-
expect(content).to match(/create doc\/config\.rb/)
|
133
|
-
expect(content).to match(/create doc\/rdoc\.rb/)
|
134
|
-
expect(content).to match(/create doc\/components/)
|
135
|
-
end
|
136
|
-
|
137
|
-
it "yields a block" do
|
138
|
-
checked = false
|
139
|
-
invoke!("doc") do |content|
|
140
|
-
checked ||= !!(content =~ /FOO/)
|
141
|
-
end
|
142
|
-
expect(checked).to be true
|
143
|
-
end
|
144
|
-
|
145
|
-
it "works with glob characters in the path" do
|
146
|
-
content = invoke!("app{1}")
|
147
|
-
expect(content).to match(/create app\{1\}\/README/)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
describe "#revoke!" do
|
152
|
-
it "removes the destination file" do
|
153
|
-
invoke! "doc"
|
154
|
-
revoke! "doc"
|
155
|
-
|
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
|
-
end
|
160
|
-
|
161
|
-
it "works with glob characters in the path" do
|
162
|
-
invoke! "app{1}"
|
163
|
-
expect(File.exist?(File.join(destination_root, "app{1}", "README"))).to be true
|
164
|
-
|
165
|
-
revoke! "app{1}"
|
166
|
-
expect(File.exist?(File.join(destination_root, "app{1}", "README"))).to be false
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|