bovem 3.0.5 → 4.0.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -3
- data/.rubocop.yml +82 -0
- data/.travis-gemfile +4 -5
- data/.travis.yml +8 -6
- data/CHANGELOG.md +12 -0
- data/Gemfile +9 -8
- data/README.md +1 -1
- data/Rakefile +22 -6
- data/bovem.gemspec +5 -5
- data/doc/Bovem.html +10 -10
- data/doc/Bovem/Application.html +670 -318
- data/doc/Bovem/Command.html +1447 -1125
- data/doc/Bovem/CommandMethods.html +4 -4
- data/doc/Bovem/CommandMethods/Children.html +173 -179
- data/doc/Bovem/CommandMethods/Help.html +9 -9
- data/doc/Bovem/Configuration.html +239 -24
- data/doc/Bovem/Console.html +267 -128
- data/doc/Bovem/ConsoleMethods.html +4 -4
- data/doc/Bovem/ConsoleMethods/Interactions.html +57 -70
- data/doc/Bovem/ConsoleMethods/Interactions/ClassMethods.html +9 -9
- data/doc/Bovem/ConsoleMethods/Logging.html +258 -298
- data/doc/Bovem/ConsoleMethods/Logging/ClassMethods.html +8 -8
- data/doc/Bovem/ConsoleMethods/Output.html +96 -118
- data/doc/Bovem/ConsoleMethods/StyleHandling.html +8 -8
- data/doc/Bovem/ConsoleMethods/StyleHandling/ClassMethods.html +26 -39
- data/doc/Bovem/Errors.html +4 -4
- data/doc/Bovem/Errors/Error.html +4 -4
- data/doc/Bovem/Errors/InvalidConfiguration.html +4 -4
- data/doc/Bovem/Errors/InvalidLogger.html +4 -4
- data/doc/Bovem/I18n.html +175 -0
- data/doc/Bovem/Logger.html +95 -83
- data/doc/Bovem/Option.html +669 -862
- data/doc/Bovem/Parser.html +10 -10
- data/doc/Bovem/ParserMethods.html +4 -4
- data/doc/Bovem/ParserMethods/General.html +4 -4
- data/doc/Bovem/ParserMethods/General/ClassMethods.html +26 -38
- data/doc/Bovem/Shell.html +169 -48
- data/doc/Bovem/ShellMethods.html +4 -4
- data/doc/Bovem/ShellMethods/Directories.html +46 -62
- data/doc/Bovem/ShellMethods/Execute.html +51 -99
- data/doc/Bovem/ShellMethods/General.html +4 -445
- data/doc/Bovem/ShellMethods/Read.html +56 -61
- data/doc/Bovem/ShellMethods/Write.html +22 -242
- data/doc/Bovem/Version.html +6 -6
- data/doc/_index.html +18 -18
- data/doc/class_list.html +6 -2
- data/doc/css/style.css +1 -0
- data/doc/file.README.html +5 -5
- data/doc/file_list.html +5 -1
- data/doc/frames.html +1 -1
- data/doc/index.html +5 -5
- data/doc/js/full_list.js +4 -1
- data/doc/method_list.html +161 -157
- data/doc/top-level-namespace.html +4 -4
- data/lib/bovem.rb +3 -4
- data/lib/bovem/application.rb +47 -39
- data/lib/bovem/command.rb +175 -193
- data/lib/bovem/configuration.rb +28 -29
- data/lib/bovem/console.rb +244 -171
- data/lib/bovem/errors.rb +1 -1
- data/lib/bovem/i18n.rb +18 -0
- data/lib/bovem/logger.rb +26 -26
- data/lib/bovem/option.rb +49 -58
- data/lib/bovem/parser.rb +174 -222
- data/lib/bovem/shell.rb +272 -320
- data/lib/bovem/version.rb +2 -2
- data/locales/en.yml +39 -38
- data/locales/it.yml +39 -38
- data/spec/bovem/application_spec.rb +6 -5
- data/spec/bovem/command_spec.rb +23 -23
- data/spec/bovem/console_spec.rb +101 -102
- data/spec/bovem/i18n_spec.rb +21 -0
- data/spec/bovem/logger_spec.rb +4 -4
- data/spec/bovem/option_spec.rb +43 -43
- data/spec/bovem/parser_spec.rb +13 -13
- data/spec/bovem/shell_spec.rb +106 -115
- data/spec/spec_helper.rb +19 -6
- metadata +14 -13
- data/doc/Bovem/Localizer.html +0 -376
- data/lib/bovem/localizer.rb +0 -27
- data/spec/coverage_helper.rb +0 -20
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the bovem gem. Copyright (C) 2013 and above Shogun <shogun@cowtech.it>.
|
4
|
+
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
|
+
#
|
6
|
+
|
7
|
+
require "spec_helper"
|
8
|
+
|
9
|
+
describe Bovem::I18n do
|
10
|
+
let(:subject) { Bovem::I18n.new(:it, root: "bovem.shell", path: Bovem::Application::LOCALE_ROOT) }
|
11
|
+
|
12
|
+
describe "#method_missing" do
|
13
|
+
it "should find translation and format them" do
|
14
|
+
expect(subject.copy_move_single_to_directory("A", "B", "C")).to eq("Impossibile eseguire A del file {mark=bright}B{/mark} in {mark=bright}C{/mark} perché è attualmente una cartella.")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should complain about missing translation" do
|
18
|
+
expect { subject.foo }.to raise_error(Lazier::Exceptions::MissingTranslation, "Unable to load the translation \"bovem.shell.foo\" for the locale \"it\".")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/bovem/logger_spec.rb
CHANGED
@@ -20,15 +20,15 @@ describe Bovem::Logger do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should create a logger with a custom file and level" do
|
23
|
-
logger = Bovem::Logger.create("/dev/null", ::Logger::WARN)
|
23
|
+
logger = Bovem::Logger.create("/dev/null", level: ::Logger::WARN)
|
24
24
|
expect(logger.device).to eq("/dev/null")
|
25
25
|
expect(logger.level).to eq(::Logger::WARN)
|
26
26
|
expect(logger.formatter).to eq(Bovem::Logger.default_formatter)
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should create a logger with a custom formatter" do
|
30
|
-
formatter = Proc.new {|
|
31
|
-
logger = Bovem::Logger.create("/dev/null", ::Logger::WARN, formatter)
|
30
|
+
formatter = Proc.new {|_, _, _, msg| msg }
|
31
|
+
logger = Bovem::Logger.create("/dev/null", level: ::Logger::WARN, formatter: formatter)
|
32
32
|
expect(logger.device).to eq("/dev/null")
|
33
33
|
expect(logger.level).to eq(::Logger::WARN)
|
34
34
|
expect(logger.formatter).to eq(formatter)
|
@@ -41,7 +41,7 @@ describe Bovem::Logger do
|
|
41
41
|
|
42
42
|
describe ".default_formatter" do
|
43
43
|
let(:output) { ::StringIO.new }
|
44
|
-
let(:logger) { Bovem::Logger.create(output, Logger::DEBUG) }
|
44
|
+
let(:logger) { Bovem::Logger.create(output, level: Logger::DEBUG) }
|
45
45
|
|
46
46
|
def get_last_line(buffer)
|
47
47
|
buffer.string.split("\n").last.strip.gsub(/ T\+\d+\.\d+/, "")
|
data/spec/bovem/option_spec.rb
CHANGED
@@ -46,7 +46,7 @@ describe Bovem::Option do
|
|
46
46
|
|
47
47
|
it "should set options" do
|
48
48
|
option = Bovem::Option.new("NAME", ["O", "OPTION"], {required: true, help: "HELP", unused: "UNUSED"})
|
49
|
-
expect(option.help).to
|
49
|
+
expect(option.help).to be_truthy
|
50
50
|
expect(option.help).to eq("HELP")
|
51
51
|
end
|
52
52
|
end
|
@@ -164,74 +164,74 @@ describe Bovem::Option do
|
|
164
164
|
|
165
165
|
describe "#set" do
|
166
166
|
it "should set the value" do
|
167
|
-
expect(option.set("VALUE")).to
|
167
|
+
expect(option.set("VALUE")).to be_truthy
|
168
168
|
expect(option.value).to eq("VALUE")
|
169
|
-
expect(option.provided?).to
|
169
|
+
expect(option.provided?).to be_truthy
|
170
170
|
end
|
171
171
|
|
172
172
|
it "should match against a regexp validator" do
|
173
173
|
option.validator = /^A|B$/
|
174
174
|
|
175
175
|
expect{ option.set("VALUE") }.to raise_error(Bovem::Errors::Error)
|
176
|
-
expect(option.value).to
|
177
|
-
expect(option.provided?).to
|
176
|
+
expect(option.value).to be_falsey
|
177
|
+
expect(option.provided?).to be_falsey
|
178
178
|
|
179
|
-
expect(option.set("VALUE", false)).to
|
180
|
-
expect(option.value).to
|
181
|
-
expect(option.provided?).to
|
179
|
+
expect(option.set("VALUE", false)).to be_falsey
|
180
|
+
expect(option.value).to be_falsey
|
181
|
+
expect(option.provided?).to be_falsey
|
182
182
|
|
183
183
|
option.set("A")
|
184
184
|
expect(option.value).to eq("A")
|
185
|
-
expect(option.provided?).to
|
185
|
+
expect(option.provided?).to be_truthy
|
186
186
|
|
187
187
|
option.set("B")
|
188
188
|
expect(option.value).to eq("B")
|
189
|
-
expect(option.provided?).to
|
189
|
+
expect(option.provided?).to be_truthy
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should match against an array validator" do
|
193
193
|
option.validator = ["A", "B"]
|
194
194
|
|
195
195
|
expect{ option.set("VALUE") }.to raise_error(Bovem::Errors::Error)
|
196
|
-
expect(option.value).to
|
197
|
-
expect(option.provided?).to
|
196
|
+
expect(option.value).to be_falsey
|
197
|
+
expect(option.provided?).to be_falsey
|
198
198
|
|
199
|
-
expect(option.set("VALUE", false)).to
|
200
|
-
expect(option.value).to
|
201
|
-
expect(option.provided?).to
|
199
|
+
expect(option.set("VALUE", false)).to be_falsey
|
200
|
+
expect(option.value).to be_falsey
|
201
|
+
expect(option.provided?).to be_falsey
|
202
202
|
|
203
203
|
option.set("A")
|
204
204
|
expect(option.value).to eq("A")
|
205
|
-
expect(option.provided?).to
|
205
|
+
expect(option.provided?).to be_truthy
|
206
206
|
|
207
207
|
option.set("B")
|
208
208
|
expect(option.value).to eq("B")
|
209
|
-
expect(option.provided?).to
|
209
|
+
expect(option.provided?).to be_truthy
|
210
210
|
|
211
211
|
option.validator = [1, 2]
|
212
212
|
expect{ option.set("VALUE") }.to raise_error(Bovem::Errors::Error)
|
213
|
-
expect(option.value).to
|
214
|
-
expect(option.provided?).to
|
213
|
+
expect(option.value).to be_falsey
|
214
|
+
expect(option.provided?).to be_falsey
|
215
215
|
|
216
216
|
option.set(1)
|
217
217
|
expect(option.value).to eq(1)
|
218
|
-
expect(option.provided?).to
|
218
|
+
expect(option.provided?).to be_truthy
|
219
219
|
end
|
220
220
|
|
221
221
|
it "should match against a Proc validator" do
|
222
222
|
option.validator = ->(v) { v % 2 == 0 }
|
223
223
|
|
224
224
|
expect{ option.set(1) }.to raise_error(Bovem::Errors::Error)
|
225
|
-
expect(option.value).to
|
226
|
-
expect(option.provided?).to
|
225
|
+
expect(option.value).to be_falsey
|
226
|
+
expect(option.provided?).to be_falsey
|
227
227
|
|
228
228
|
option.set(2)
|
229
229
|
expect(option.value).to eq(2)
|
230
|
-
expect(option.provided?).to
|
230
|
+
expect(option.provided?).to be_truthy
|
231
231
|
|
232
232
|
option.set(4)
|
233
233
|
expect(option.value).to eq(4)
|
234
|
-
expect(option.provided?).to
|
234
|
+
expect(option.provided?).to be_truthy
|
235
235
|
end
|
236
236
|
end
|
237
237
|
|
@@ -241,42 +241,42 @@ describe Bovem::Option do
|
|
241
241
|
option = Bovem::Option.new("NAME") { |_, _| check = true }
|
242
242
|
option.execute_action
|
243
243
|
|
244
|
-
expect(check).to
|
245
|
-
expect(option.provided?).to
|
244
|
+
expect(check).to be_truthy
|
245
|
+
expect(option.provided?).to be_truthy
|
246
246
|
end
|
247
247
|
|
248
248
|
it "should result in a no-op if the action is missing or doesn't take enough arguments" do
|
249
249
|
option.execute_action
|
250
|
-
expect(option.provided?).to
|
250
|
+
expect(option.provided?).to be_falsey
|
251
251
|
|
252
252
|
option = Bovem::Option.new("NAME")
|
253
|
-
expect(option.provided?).to
|
253
|
+
expect(option.provided?).to be_falsey
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
257
|
describe "#requires_argument?" do
|
258
258
|
it "should check if the option requires argument" do
|
259
|
-
expect(Bovem::Option.new("NAME", []).requires_argument?).to
|
260
|
-
expect(Bovem::Option.new("NAME", [], {type: String}).requires_argument?).to
|
261
|
-
expect(Bovem::Option.new("NAME", [], {type: Integer}).requires_argument?).to
|
262
|
-
expect(Bovem::Option.new("NAME", [], {type: Float}).requires_argument?).to
|
263
|
-
expect(Bovem::Option.new("NAME", [], {type: Array}).requires_argument?).to
|
264
|
-
expect(Bovem::Option.new("NAME").requires_argument?).to
|
259
|
+
expect(Bovem::Option.new("NAME", []).requires_argument?).to be_falsey
|
260
|
+
expect(Bovem::Option.new("NAME", [], {type: String}).requires_argument?).to be_truthy
|
261
|
+
expect(Bovem::Option.new("NAME", [], {type: Integer}).requires_argument?).to be_truthy
|
262
|
+
expect(Bovem::Option.new("NAME", [], {type: Float}).requires_argument?).to be_truthy
|
263
|
+
expect(Bovem::Option.new("NAME", [], {type: Array}).requires_argument?).to be_truthy
|
264
|
+
expect(Bovem::Option.new("NAME").requires_argument?).to be_falsey
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|
268
268
|
describe "#provided?" do
|
269
269
|
it "should check if the option was provided" do
|
270
|
-
expect(Bovem::Option.new("NAME").provided?).to
|
270
|
+
expect(Bovem::Option.new("NAME").provided?).to be_falsey
|
271
271
|
option.set(true)
|
272
|
-
expect(option.provided?).to
|
272
|
+
expect(option.provided?).to be_truthy
|
273
273
|
end
|
274
274
|
end
|
275
275
|
|
276
|
-
describe "#
|
276
|
+
describe "#help?" do
|
277
277
|
it "should check if the option has a help" do
|
278
|
-
expect(Bovem::Option.new("NAME").
|
279
|
-
expect(Bovem::Option.new("NAME", [], help: "HELP").
|
278
|
+
expect(Bovem::Option.new("NAME").help?).to be_falsey
|
279
|
+
expect(Bovem::Option.new("NAME", [], help: "HELP").help?).to be_truthy
|
280
280
|
end
|
281
281
|
end
|
282
282
|
|
@@ -286,18 +286,18 @@ describe Bovem::Option do
|
|
286
286
|
expect(option.value).to eq("DEFAULT VALUE")
|
287
287
|
|
288
288
|
option.default = nil
|
289
|
-
expect(option.value).to
|
289
|
+
expect(option.value).to be_falsey
|
290
290
|
|
291
291
|
option.set(true)
|
292
|
-
expect(option.value).to
|
292
|
+
expect(option.value).to be_truthy
|
293
293
|
|
294
294
|
option.set("VALUE")
|
295
295
|
expect(option.value).to eq("VALUE")
|
296
296
|
end
|
297
297
|
|
298
298
|
it "should return good defaults" do
|
299
|
-
expect(Bovem::Option.new("NAME").value).to
|
300
|
-
expect(Bovem::Option.new("NAME", [], {type: Regexp}).value).to
|
299
|
+
expect(Bovem::Option.new("NAME").value).to be_falsey
|
300
|
+
expect(Bovem::Option.new("NAME", [], {type: Regexp}).value).to be_falsey
|
301
301
|
expect(Bovem::Option.new("NAME", [], {type: String}).value).to eq("")
|
302
302
|
expect(Bovem::Option.new("NAME", [], {type: Integer}).value).to eq(0)
|
303
303
|
expect(Bovem::Option.new("NAME", [], {type: Float}).value).to eq(0.0)
|
data/spec/bovem/parser_spec.rb
CHANGED
@@ -41,13 +41,13 @@ describe Bovem::Parser do
|
|
41
41
|
describe ".smart_join" do
|
42
42
|
it "should correctly join arrays" do
|
43
43
|
expect(Bovem::Parser.smart_join([])).to eq("")
|
44
|
-
expect(Bovem::Parser.smart_join(["A"],
|
45
|
-
expect(Bovem::Parser.smart_join(1,
|
46
|
-
expect(Bovem::Parser.smart_join(["A", 1],
|
47
|
-
expect(Bovem::Parser.smart_join(["A", 1, true],
|
48
|
-
expect(Bovem::Parser.smart_join(["A", "B", "C"], "-", " and ", nil)).to eq("A-B and C")
|
49
|
-
expect(Bovem::Parser.smart_join(["A", "B", "C"], "-", "@", nil)).to eq("A-B@C")
|
50
|
-
expect(Bovem::Parser.smart_join(["A", "B", "C"],
|
44
|
+
expect(Bovem::Parser.smart_join(["A"], quote: nil)).to eq("A")
|
45
|
+
expect(Bovem::Parser.smart_join(1, quote: nil)).to eq("1")
|
46
|
+
expect(Bovem::Parser.smart_join(["A", 1], quote: nil)).to eq("A and 1")
|
47
|
+
expect(Bovem::Parser.smart_join(["A", 1, true], quote: nil)).to eq("A, 1 and true")
|
48
|
+
expect(Bovem::Parser.smart_join(["A", "B", "C"], separator: "-", last_separator: " and ", quote: nil)).to eq("A-B and C")
|
49
|
+
expect(Bovem::Parser.smart_join(["A", "B", "C"], separator: "-", last_separator: "@", quote: nil)).to eq("A-B@C")
|
50
|
+
expect(Bovem::Parser.smart_join(["A", "B", "C"], quote: "@")).to eq("@A@, @B@ and @C@")
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -58,12 +58,12 @@ describe Bovem::Parser do
|
|
58
58
|
s2 = command.command("abd")
|
59
59
|
s1.command("def")
|
60
60
|
|
61
|
-
expect(Bovem::Parser.find_command("abc", command, args)).to eq({name: "abc", args: args})
|
62
|
-
expect(Bovem::Parser.find_command("abc:def", command, args)).to eq({name: "abc", args: ["def"] + args})
|
63
|
-
expect(Bovem::Parser.find_command("abc def", command, args, " ")).to eq({name: "abc", args: ["def"] + args})
|
64
|
-
expect(Bovem::Parser.find_command("d", s1, args)).to eq({name: "def", args: args})
|
65
|
-
expect{ Bovem::Parser.find_command("ab", command, args) }.to raise_error(Bovem::Errors::Error)
|
66
|
-
expect(Bovem::Parser.find_command("abc", s2, args)).to be_nil
|
61
|
+
expect(Bovem::Parser.find_command("abc", command, args: args)).to eq({name: "abc", args: args})
|
62
|
+
expect(Bovem::Parser.find_command("abc:def", command, args: args)).to eq({name: "abc", args: ["def"] + args})
|
63
|
+
expect(Bovem::Parser.find_command("abc def", command, args: args, separator: " ")).to eq({name: "abc", args: ["def"] + args})
|
64
|
+
expect(Bovem::Parser.find_command("d", s1, args: args)).to eq({name: "def", args: args})
|
65
|
+
expect{ Bovem::Parser.find_command("ab", command, args: args) }.to raise_error(Bovem::Errors::Error)
|
66
|
+
expect(Bovem::Parser.find_command("abc", s2, args: args)).to be_nil
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
data/spec/bovem/shell_spec.rb
CHANGED
@@ -7,11 +7,7 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Bovem::Shell do
|
10
|
-
let(:shell) {
|
11
|
-
s = Bovem::Shell.new
|
12
|
-
s.i18n = :en
|
13
|
-
s
|
14
|
-
}
|
10
|
+
let(:shell) { Bovem::Shell.new }
|
15
11
|
let(:temp_file_1) { "/tmp/bovem-test-1-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
|
16
12
|
let(:temp_file_2) { "/tmp/bovem-test-2-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
|
17
13
|
let(:temp_file_3) { "/tmp/bovem-test-3-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
|
@@ -42,25 +38,20 @@ describe Bovem::Shell do
|
|
42
38
|
|
43
39
|
it "should show a message" do
|
44
40
|
expect(shell.console).to receive("begin").with("MESSAGE")
|
45
|
-
shell.run("echo OK", "MESSAGE",
|
41
|
+
shell.run("echo OK", "MESSAGE", show_exit: false)
|
46
42
|
expect(shell.console).not_to receive("begin").with("MESSAGE")
|
47
|
-
shell.run("echo OK",
|
43
|
+
shell.run("echo OK", show_exit: false)
|
48
44
|
end
|
49
45
|
|
50
46
|
it "should print the command line" do
|
51
47
|
expect(shell.console).to receive("info").with("Running command: {mark=bright}\"echo OK\"{/mark}...")
|
52
|
-
shell.run("echo OK",
|
48
|
+
shell.run("echo OK", show_exit: true, show_command: true)
|
53
49
|
end
|
54
50
|
|
55
51
|
it "should only print the command if requested to" do
|
56
52
|
expect(shell.console).to receive("warn").with("Will run command: {mark=bright}\"echo OK\"{/mark}...")
|
57
53
|
expect(::Open4).not_to receive("popen4")
|
58
|
-
shell.run("echo OK",
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should only execute a command" do
|
62
|
-
expect(shell.console).not_to receive("warn").with("Will run command: {mark=bright}\"echo OK\"{/mark}...")
|
63
|
-
shell.run("echo OK", nil, true, false)
|
54
|
+
shell.run("echo OK", run: false)
|
64
55
|
end
|
65
56
|
|
66
57
|
it "should show a exit message" do
|
@@ -71,9 +62,9 @@ describe Bovem::Shell do
|
|
71
62
|
end
|
72
63
|
|
73
64
|
expect(shell.console).to receive(:status).with(:ok)
|
74
|
-
shell.run("echo OK",
|
65
|
+
shell.run("echo OK", show_exit: true, fatal_errors: false)
|
75
66
|
expect(shell.console).to receive(:status).with(:fail)
|
76
|
-
shell.run("echo1 OK",
|
67
|
+
shell.run("echo1 OK", show_exit: true, fatal_errors: false)
|
77
68
|
end
|
78
69
|
|
79
70
|
it "should print output" do
|
@@ -83,27 +74,27 @@ describe Bovem::Shell do
|
|
83
74
|
allow(stdout).to receive(:each_line).and_yield("OK\n")
|
84
75
|
allow(::Open4).to receive(:popen4).and_yield(nil, nil, stdout, nil).and_return(OpenStruct.new(exitstatus: 0))
|
85
76
|
|
86
|
-
shell.run("echo OK",
|
77
|
+
shell.run("echo OK", show_output: true)
|
87
78
|
end
|
88
79
|
|
89
80
|
it "should raise a exception for failures" do
|
90
81
|
allow(::Open4).to receive(:popen4) {|_, _, _, _| OpenStruct.new(exitstatus: 1) }
|
91
|
-
expect { shell.run("echo1 OK",
|
92
|
-
expect { shell.run("echo1 OK"
|
82
|
+
expect { shell.run("echo1 OK", fatal_errors: false) }.not_to raise_error
|
83
|
+
expect { shell.run("echo1 OK") }.to raise_error(SystemExit)
|
93
84
|
end
|
94
85
|
end
|
95
86
|
|
96
87
|
describe "#check" do
|
97
88
|
it "executes all tests" do
|
98
|
-
expect(shell.check("/",
|
99
|
-
expect(shell.check("/dev/null", :write)).to
|
100
|
-
expect(shell.check("/bin/sh",
|
101
|
-
expect(shell.check("/",
|
102
|
-
expect(shell.check("/",
|
89
|
+
expect(shell.check("/", :read, :dir)).to be_truthy
|
90
|
+
expect(shell.check("/dev/null", :write)).to be_truthy
|
91
|
+
expect(shell.check("/bin/sh", :execute, :exec)).to be_truthy
|
92
|
+
expect(shell.check("/", :read, :directory)).to be_truthy
|
93
|
+
expect(shell.check("/", :writable?, :directory?)).to be_falsey
|
103
94
|
end
|
104
95
|
|
105
96
|
it "returns false when some tests are invalid" do
|
106
|
-
expect(shell.check("/",
|
97
|
+
expect(shell.check("/", :read, :none)).to be_falsey
|
107
98
|
end
|
108
99
|
end
|
109
100
|
|
@@ -112,45 +103,45 @@ describe Bovem::Shell do
|
|
112
103
|
File.unlink(temp_file_1) if File.exists?(temp_file_1)
|
113
104
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
114
105
|
|
115
|
-
expect(File.exists?(temp_file_1)).to
|
116
|
-
expect(shell.delete(temp_file_1,
|
117
|
-
expect(File.exists?(temp_file_1)).to
|
106
|
+
expect(File.exists?(temp_file_1)).to be_truthy
|
107
|
+
expect(shell.delete(temp_file_1, show_errors: false)).to be_truthy
|
108
|
+
expect(File.exists?(temp_file_1)).to be_falsey
|
118
109
|
File.unlink(temp_file_1) if File.exists?(temp_file_1)
|
119
110
|
end
|
120
111
|
|
121
112
|
it "should only print the list of files" do
|
122
113
|
expect(shell.console).to receive(:warn).with("Will remove file(s):")
|
123
114
|
expect(FileUtils).not_to receive(:rm_r)
|
124
|
-
expect(shell.delete(temp_file_1, false)).to
|
115
|
+
expect(shell.delete(temp_file_1, run: false)).to be_truthy
|
125
116
|
end
|
126
117
|
|
127
118
|
it "should complain about non existing files" do
|
128
119
|
expect(shell.console).to receive(:error).with("Cannot remove following non existent file: {mark=bright}#{temp_file_1}{/mark}")
|
129
|
-
expect(shell.delete(temp_file_1,
|
120
|
+
expect(shell.delete(temp_file_1, fatal_errors: false)).to be_falsey
|
130
121
|
end
|
131
122
|
|
132
123
|
it "should complain about non writeable files" do
|
133
124
|
expect(shell.console).to receive(:error).with("Cannot remove following non writable file: {mark=bright}/dev/null{/mark}")
|
134
|
-
expect(shell.delete("/dev/null",
|
125
|
+
expect(shell.delete("/dev/null", fatal_errors: false)).to be_falsey
|
135
126
|
end
|
136
127
|
|
137
128
|
it "should complain about other exceptions" do
|
138
129
|
allow(FileUtils).to receive(:rm_r).and_raise(ArgumentError.new("ERROR"))
|
139
130
|
expect(shell.console).to receive(:error).with("Cannot remove following file(s):")
|
140
131
|
expect(shell.console).to receive(:write).at_least(2)
|
141
|
-
expect(shell.delete("/dev/null",
|
132
|
+
expect(shell.delete("/dev/null", show_errors: true, fatal_errors: false)).to be_falsey
|
142
133
|
end
|
143
134
|
|
144
135
|
describe "should exit when requested to" do
|
145
136
|
it "by calling :fatal" do
|
146
137
|
expect(shell.console).to receive(:fatal).with("Cannot remove following non writable file: {mark=bright}/dev/null{/mark}")
|
147
|
-
expect(shell.delete("/dev/null")).to
|
138
|
+
expect(shell.delete("/dev/null")).to be_falsey
|
148
139
|
end
|
149
140
|
|
150
141
|
it "by calling Kernel#exit" do
|
151
142
|
allow(FileUtils).to receive(:rm_r).and_raise(ArgumentError.new("ERROR"))
|
152
143
|
expect(Kernel).to receive(:exit).with(-1)
|
153
|
-
expect(shell.delete("/dev/null", true, true)).to
|
144
|
+
expect(shell.delete("/dev/null", show_errors: true, fatal_errors: true)).to be_falsey
|
154
145
|
end
|
155
146
|
end
|
156
147
|
end
|
@@ -174,16 +165,16 @@ describe Bovem::Shell do
|
|
174
165
|
|
175
166
|
it "should copy a file" do
|
176
167
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
177
|
-
expect(shell.copy_or_move
|
178
|
-
expect(File.exists?(temp_file_1)).to
|
179
|
-
expect(File.exists?(temp_file_2)).to
|
168
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :copy)).to eq(true)
|
169
|
+
expect(File.exists?(temp_file_1)).to be_truthy
|
170
|
+
expect(File.exists?(temp_file_2)).to be_truthy
|
180
171
|
end
|
181
172
|
|
182
173
|
it "should move a file" do
|
183
174
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
184
|
-
expect(shell.copy_or_move
|
185
|
-
expect(File.exists?(temp_file_1)).to
|
186
|
-
expect(File.exists?(temp_file_2)).to
|
175
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :move, true)).to eq(true)
|
176
|
+
expect(File.exists?(temp_file_1)).to be_falsey
|
177
|
+
expect(File.exists?(temp_file_2)).to be_truthy
|
187
178
|
end
|
188
179
|
|
189
180
|
it "should copy multiple entries" do
|
@@ -192,11 +183,11 @@ describe Bovem::Shell do
|
|
192
183
|
shell.create_directories(temp_dir_1)
|
193
184
|
File.open(temp_dir_1 + "/temp", "w") {|f| f.write("OK") }
|
194
185
|
|
195
|
-
expect(shell.copy_or_move
|
196
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_1))).to
|
197
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_2))).to
|
198
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1))).to
|
199
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1) + "/temp")).to
|
186
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2, temp_dir_1], temp_dir_2, :copy)).to be_truthy
|
187
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_1))).to be_truthy
|
188
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_2))).to be_truthy
|
189
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1))).to be_truthy
|
190
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1) + "/temp")).to be_truthy
|
200
191
|
end
|
201
192
|
|
202
193
|
it "should move multiple entries" do
|
@@ -205,23 +196,23 @@ describe Bovem::Shell do
|
|
205
196
|
shell.create_directories(temp_dir_1)
|
206
197
|
File.open(temp_dir_1 + "/temp", "w") {|f| f.write("OK") }
|
207
198
|
|
208
|
-
expect(shell.copy_or_move
|
209
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_1))).to
|
210
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_2))).to
|
211
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1))).to
|
212
|
-
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1) + "/temp")).to
|
213
|
-
expect(File.exists?(temp_file_1)).to
|
214
|
-
expect(File.exists?(temp_file_2)).to
|
215
|
-
expect(File.exists?(temp_dir_1)).to
|
216
|
-
expect(File.exists?(temp_dir_1 + "/temp")).to
|
199
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2, temp_dir_1], temp_dir_2, :move, true)).to be_truthy
|
200
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_1))).to be_truthy
|
201
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_file_2))).to be_truthy
|
202
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1))).to be_truthy
|
203
|
+
expect(File.exists?(temp_dir_2 + "/" + File.basename(temp_dir_1) + "/temp")).to be_truthy
|
204
|
+
expect(File.exists?(temp_file_1)).to be_falsey
|
205
|
+
expect(File.exists?(temp_file_2)).to be_falsey
|
206
|
+
expect(File.exists?(temp_dir_1)).to be_falsey
|
207
|
+
expect(File.exists?(temp_dir_1 + "/temp")).to be_falsey
|
217
208
|
end
|
218
209
|
|
219
210
|
it "should complain about non existing source" do
|
220
211
|
expect(shell.console).to receive(:error).with("Cannot copy non existent file {mark=bright}#{temp_file_1}{/mark}.")
|
221
|
-
expect(shell.copy_or_move
|
212
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :copy, true, false, false)).to be_falsey
|
222
213
|
|
223
214
|
expect(shell.console).to receive(:error).with("Cannot move non existent file {mark=bright}#{temp_file_1}{/mark}.")
|
224
|
-
expect(shell.copy_or_move
|
215
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :move, true, false, false)).to be_falsey
|
225
216
|
end
|
226
217
|
|
227
218
|
it "should not copy a file to a path which is currently a directory" do
|
@@ -229,18 +220,18 @@ describe Bovem::Shell do
|
|
229
220
|
shell.create_directories(temp_file_2)
|
230
221
|
|
231
222
|
expect(shell.console).to receive(:error).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to {mark=bright}#{temp_file_2}{/mark} because it is currently a directory.")
|
232
|
-
expect(shell.copy_or_move
|
223
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :copy, true, false, false)).to be_falsey
|
233
224
|
|
234
225
|
expect(shell.console).to receive(:error).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to {mark=bright}#{temp_file_2}{/mark} because it is currently a directory.")
|
235
|
-
expect(shell.copy_or_move
|
226
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :move, true, false, false)).to be_falsey
|
236
227
|
end
|
237
228
|
|
238
229
|
it "should create the parent directory if needed" do
|
239
|
-
expect(shell.check(temp_dir_1, :dir)).to
|
230
|
+
expect(shell.check(temp_dir_1, :dir)).to be_falsey
|
240
231
|
|
241
232
|
expect(shell).to receive(:create_directories).exactly(2)
|
242
|
-
expect(shell.copy_or_move
|
243
|
-
expect(shell.copy_or_move
|
233
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_dir_1 + "/test-1", :copy)).to be_falsey
|
234
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_dir_1 + "/test-1", :move)).to be_falsey
|
244
235
|
end
|
245
236
|
|
246
237
|
it "should only print the list of files" do
|
@@ -248,24 +239,24 @@ describe Bovem::Shell do
|
|
248
239
|
expect(FileUtils).not_to receive(:mv)
|
249
240
|
|
250
241
|
expect(shell.console).to receive(:warn).with("Will copy a file:")
|
251
|
-
expect(shell.copy_or_move
|
242
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :copy, false)).to be_truthy
|
252
243
|
expect(shell.console).to receive(:warn).with("Will copy following entries:")
|
253
|
-
expect(shell.copy_or_move
|
244
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2], temp_dir_1, :copy, false)).to be_truthy
|
254
245
|
|
255
246
|
expect(shell.console).to receive(:warn).with("Will move a file:")
|
256
|
-
expect(shell.copy_or_move
|
247
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :move, false)).to be_truthy
|
257
248
|
expect(shell.console).to receive(:warn).with("Will move following entries:")
|
258
|
-
expect(shell.copy_or_move
|
249
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2], temp_dir_1, :move, false)).to be_truthy
|
259
250
|
end
|
260
251
|
|
261
252
|
it "should complain about non writeable parent directory" do
|
262
253
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
263
254
|
|
264
|
-
expect(shell.console).to receive(:error).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to non writable directory {mark=bright}/dev{/mark}.", "\n", 5)
|
265
|
-
expect(shell.copy_or_move
|
255
|
+
expect(shell.console).to receive(:error).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to non writable directory {mark=bright}/dev{/mark}.", suffix: "\n", indented: 5)
|
256
|
+
expect(shell.send(:copy_or_move, temp_file_1, "/dev/bovem", :copy, true, true, false)).to be_falsey
|
266
257
|
|
267
|
-
expect(shell.console).to receive(:error).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to non writable directory {mark=bright}/dev{/mark}.", "\n", 5)
|
268
|
-
expect(shell.copy_or_move
|
258
|
+
expect(shell.console).to receive(:error).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to non writable directory {mark=bright}/dev{/mark}.", suffix: "\n", indented: 5)
|
259
|
+
expect(shell.send(:copy_or_move, temp_file_1, "/dev/bovem", :move, true, true, false)).to be_falsey
|
269
260
|
end
|
270
261
|
|
271
262
|
it "should complain about other exceptions" do
|
@@ -273,33 +264,33 @@ describe Bovem::Shell do
|
|
273
264
|
allow(FileUtils).to receive(:mv).and_raise(ArgumentError.new("ERROR"))
|
274
265
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
275
266
|
|
276
|
-
expect(shell.console).to receive(:error).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}#{File.dirname(temp_file_2)}{/mark} due to this error: [ArgumentError] ERROR.", "\n", 5)
|
277
|
-
expect(shell.copy_or_move
|
267
|
+
expect(shell.console).to receive(:error).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}#{File.dirname(temp_file_2)}{/mark} due to this error: [ArgumentError] ERROR.", suffix: "\n", indented: 5)
|
268
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :copy, true, true, false)).to be_falsey
|
278
269
|
|
279
|
-
expect(shell.console).to receive(:error).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}#{File.dirname(temp_file_2)}{/mark} due to this error: [ArgumentError] ERROR.", "\n", 5)
|
280
|
-
expect(shell.copy_or_move
|
270
|
+
expect(shell.console).to receive(:error).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}#{File.dirname(temp_file_2)}{/mark} due to this error: [ArgumentError] ERROR.", suffix: "\n", indented: 5)
|
271
|
+
expect(shell.send(:copy_or_move, temp_file_1, temp_file_2, :move, true, true, false)).to be_falsey
|
281
272
|
end
|
282
273
|
|
283
274
|
describe "should exit when requested to" do
|
284
275
|
it "by calling :fatal" do
|
285
276
|
allow(FileUtils).to receive(:cp_r).and_raise(ArgumentError.new("ERROR"))
|
286
277
|
allow(FileUtils).to receive(:mv).and_raise(ArgumentError.new("ERROR"))
|
278
|
+
allow(Kernel).to receive(:exit).and_return(true)
|
287
279
|
|
288
280
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
289
281
|
File.open(temp_file_2, "w") {|f| f.write("OK") }
|
290
282
|
|
291
|
-
expect(shell.console).to receive(:fatal).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}/dev{/mark} due to this error: [ArgumentError] ERROR.", "\n", 5)
|
292
|
-
expect(shell.copy_or_move
|
283
|
+
expect(shell.console).to receive(:fatal).with("Cannot copy file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}/dev{/mark} due to this error: [ArgumentError] ERROR.", suffix: "\n", indented: 5)
|
284
|
+
expect(shell.send(:copy_or_move, temp_file_1, "/dev/bovem", :copy, true, true, true)).to be_falsey
|
293
285
|
|
294
|
-
expect(shell.console).to receive(:fatal).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}/dev{/mark} due to this error: [ArgumentError] ERROR.", "\n", 5)
|
295
|
-
expect(shell.copy_or_move
|
286
|
+
expect(shell.console).to receive(:fatal).with("Cannot move file {mark=bright}#{temp_file_1}{/mark} to directory {mark=bright}/dev{/mark} due to this error: [ArgumentError] ERROR.", suffix: "\n", indented: 5)
|
287
|
+
expect(shell.send(:copy_or_move, temp_file_1, "/dev/bovem", :move, true, true, true)).to be_falsey
|
296
288
|
|
297
|
-
allow(Kernel).to receive(:exit).and_return(true)
|
298
289
|
expect(shell.console).to receive(:error).with("Cannot copy following entries to {mark=bright}/dev{/mark}:")
|
299
|
-
expect(shell.copy_or_move
|
290
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2], "/dev", :copy, true, true, true)).to be_falsey
|
300
291
|
|
301
292
|
expect(shell.console).to receive(:error).with("Cannot move following entries to {mark=bright}/dev{/mark}:")
|
302
|
-
expect(shell.copy_or_move
|
293
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2], "/dev", :move, true, true, true)).to be_falsey
|
303
294
|
end
|
304
295
|
|
305
296
|
it "by calling Kernel#exit" do
|
@@ -307,25 +298,25 @@ describe Bovem::Shell do
|
|
307
298
|
File.open(temp_file_2, "w") {|f| f.write("OK") }
|
308
299
|
|
309
300
|
expect(Kernel).to receive(:exit).with(-1).exactly(4).and_return(true)
|
310
|
-
expect(shell.copy_or_move
|
311
|
-
expect(shell.copy_or_move
|
312
|
-
expect(shell.copy_or_move
|
313
|
-
expect(shell.copy_or_move
|
301
|
+
expect(shell.send(:copy_or_move, temp_file_1, "/dev/bovem", :copy, true, false, true)).to be_falsey
|
302
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2], "/dev", :copy, true, false, true)).to be_falsey
|
303
|
+
expect(shell.send(:copy_or_move, temp_file_1, "/dev/bovem", :move, true, false, true)).to be_falsey
|
304
|
+
expect(shell.send(:copy_or_move, [temp_file_1, temp_file_2], "/dev", :move, true, false, true)).to be_falsey
|
314
305
|
end
|
315
306
|
end
|
316
307
|
end
|
317
308
|
|
318
309
|
describe "#copy" do
|
319
310
|
it "should forward everything to #copy_or_move" do
|
320
|
-
expect(shell).to receive(:copy_or_move).with("A", "B", :copy, "C", "D", "E")
|
321
|
-
shell.copy("A", "B", "C", "D", "E")
|
311
|
+
expect(shell).to receive(:copy_or_move).with("A", "B", operation: :copy, run: "C", show_errors: "D", fatal_errors: "E")
|
312
|
+
shell.copy("A", "B", run: "C", show_errors: "D", fatal_errors: "E")
|
322
313
|
end
|
323
314
|
end
|
324
315
|
|
325
316
|
describe "#move" do
|
326
317
|
it "should forward everything to #copy_or_move" do
|
327
|
-
expect(shell).to receive(:copy_or_move).with("A", "B", :move, "C", "D", "E")
|
328
|
-
shell.move("A", "B", "C", "D", "E")
|
318
|
+
expect(shell).to receive(:copy_or_move).with("A", "B", operation: :move, run: "C", show_errors: "D", fatal_errors: "E")
|
319
|
+
shell.move("A", "B", run: "C", show_errors: "D", fatal_errors: "E")
|
329
320
|
end
|
330
321
|
end
|
331
322
|
|
@@ -356,7 +347,7 @@ describe Bovem::Shell do
|
|
356
347
|
it "should change but not restore directory" do
|
357
348
|
owd = Dir.pwd
|
358
349
|
|
359
|
-
shell.within_directory(target, false) do
|
350
|
+
shell.within_directory(target, restore: false) do
|
360
351
|
expect(Dir.pwd).to eq(target)
|
361
352
|
end
|
362
353
|
|
@@ -365,21 +356,21 @@ describe Bovem::Shell do
|
|
365
356
|
|
366
357
|
it "should show messages" do
|
367
358
|
expect(shell.console).to receive(:info).with(/Moving (.*)into directory \{mark=bright\}(.+)\{\/mark\}/).exactly(2)
|
368
|
-
shell.within_directory(target,
|
359
|
+
shell.within_directory(target, show_messages: true) { "OK" }
|
369
360
|
end
|
370
361
|
|
371
362
|
it "should return false and not execute code in case of invalid directory" do
|
372
363
|
dir = ""
|
373
364
|
|
374
|
-
expect(shell.within_directory("/invalid") { dir = "OK" }).to
|
365
|
+
expect(shell.within_directory("/invalid") { dir = "OK" }).to be_falsey
|
375
366
|
expect(dir).to eq("")
|
376
367
|
|
377
368
|
allow(Dir).to receive(:chdir).and_raise(ArgumentError)
|
378
|
-
expect(shell.within_directory("/") { true }).to
|
369
|
+
expect(shell.within_directory("/") { true }).to be_falsey
|
379
370
|
|
380
371
|
allow(Dir).to receive(:chdir)
|
381
372
|
allow(Dir).to receive(:pwd).and_return("/invalid")
|
382
|
-
expect(shell.within_directory("/") { true }).to
|
373
|
+
expect(shell.within_directory("/") { true }).to be_falsey
|
383
374
|
end
|
384
375
|
end
|
385
376
|
|
@@ -401,52 +392,52 @@ describe Bovem::Shell do
|
|
401
392
|
end
|
402
393
|
|
403
394
|
it "should create directory" do
|
404
|
-
expect(shell.create_directories([temp_dir_1, temp_dir_2])).to
|
405
|
-
expect(shell.check(temp_dir_1, :directory)).to
|
406
|
-
expect(shell.check(temp_dir_2, :directory)).to
|
395
|
+
expect(shell.create_directories([temp_dir_1, temp_dir_2])).to be_truthy
|
396
|
+
expect(shell.check(temp_dir_1, :directory)).to be_truthy
|
397
|
+
expect(shell.check(temp_dir_2, :directory)).to be_truthy
|
407
398
|
end
|
408
399
|
|
409
400
|
it "should only print the list of files" do
|
410
401
|
expect(shell.console).to receive(:warn).with("Will create directories:")
|
411
402
|
expect(FileUtils).not_to receive(:mkdir_p)
|
412
|
-
expect(shell.create_directories(temp_file_1,
|
403
|
+
expect(shell.create_directories(temp_file_1, run: false)).to be_truthy
|
413
404
|
end
|
414
405
|
|
415
406
|
it "should complain about directory already existing" do
|
416
|
-
shell.create_directories(temp_dir_1,
|
407
|
+
shell.create_directories(temp_dir_1, fatal_errors: false)
|
417
408
|
expect(shell.console).to receive(:error).with("The directory {mark=bright}#{temp_dir_1}{/mark} already exists.")
|
418
|
-
expect(shell.create_directories(temp_dir_1,
|
409
|
+
expect(shell.create_directories(temp_dir_1, show_errors: true, fatal_errors: false)).to be_falsey
|
419
410
|
end
|
420
411
|
|
421
412
|
it "should complain about paths already existing as a file." do
|
422
413
|
File.open(temp_file_1, "w") {|f| f.write("OK") }
|
423
414
|
|
424
415
|
expect(shell.console).to receive(:error).with("Path {mark=bright}#{temp_file_1}{/mark} is currently a file.")
|
425
|
-
expect(shell.create_directories(temp_file_1,
|
416
|
+
expect(shell.create_directories(temp_file_1, show_errors: true, fatal_errors: false)).to be_falsey
|
426
417
|
end
|
427
418
|
|
428
419
|
it "should complain about non writable parents" do
|
429
420
|
expect(shell.console).to receive(:error).with("Cannot create following directory due to permission denied: {mark=bright}/dev/bovem{/mark}.")
|
430
|
-
expect(shell.create_directories("/dev/bovem",
|
421
|
+
expect(shell.create_directories("/dev/bovem", show_errors: true, fatal_errors: false)).to be_falsey
|
431
422
|
end
|
432
423
|
|
433
424
|
it "should complain about other exceptions" do
|
434
425
|
allow(FileUtils).to receive(:mkdir_p).and_raise(ArgumentError.new("ERROR"))
|
435
426
|
expect(shell.console).to receive(:error).with("Cannot create following directories:")
|
436
427
|
expect(shell.console).to receive(:write).at_least(2)
|
437
|
-
expect(shell.create_directories(temp_dir_1,
|
428
|
+
expect(shell.create_directories(temp_dir_1, show_errors: true, fatal_errors: false)).to be_falsey
|
438
429
|
end
|
439
430
|
|
440
431
|
describe "should exit when requested to" do
|
441
432
|
it "by calling :fatal" do
|
442
433
|
expect(shell.console).to receive(:fatal).with("Path {mark=bright}/dev/null{/mark} is currently a file.")
|
443
|
-
expect(shell.create_directories("/dev/null")).to
|
434
|
+
expect(shell.create_directories("/dev/null")).to be_falsey
|
444
435
|
end
|
445
436
|
|
446
437
|
it "by calling Kernel#exit" do
|
447
438
|
allow(FileUtils).to receive(:mkdir_p).and_raise(ArgumentError.new("ERROR"))
|
448
439
|
expect(Kernel).to receive(:exit).with(-1)
|
449
|
-
expect(shell.create_directories(temp_dir_1,
|
440
|
+
expect(shell.create_directories(temp_dir_1, show_errors: true, fatal_errors: true)).to be_falsey
|
450
441
|
end
|
451
442
|
end
|
452
443
|
end
|
@@ -455,7 +446,7 @@ describe Bovem::Shell do
|
|
455
446
|
let(:root) {File.expand_path(File.dirname(__FILE__) + "/../../") }
|
456
447
|
|
457
448
|
it "it should return [] for invalid or empty directories" do
|
458
|
-
expect(shell.find("/invalid", /rb/)).to eq([])
|
449
|
+
expect(shell.find("/invalid", patterns: /rb/)).to eq([])
|
459
450
|
end
|
460
451
|
|
461
452
|
it "it should return every file for empty patterns" do
|
@@ -465,7 +456,7 @@ describe Bovem::Shell do
|
|
465
456
|
files << file
|
466
457
|
end
|
467
458
|
|
468
|
-
expect(shell.find(root, nil)).to eq(files)
|
459
|
+
expect(shell.find(root, patterns: nil)).to eq(files)
|
469
460
|
end
|
470
461
|
|
471
462
|
it "should find files basing on pattern" do
|
@@ -475,10 +466,10 @@ describe Bovem::Shell do
|
|
475
466
|
files << file if !File.directory?(file)
|
476
467
|
end
|
477
468
|
|
478
|
-
expect(shell.find(root, /lib\/bovem\/.+rb/)).to eq(files)
|
479
|
-
expect(shell.find(root, /lib\/BOVEM\/.+rb/)).to eq(files)
|
480
|
-
expect(shell.find(root, "lib\/bovem/")).to eq(files)
|
481
|
-
expect(shell.find(root, /lib\/BOVEM\/.+rb/,
|
469
|
+
expect(shell.find(root, patterns: /lib\/bovem\/.+rb/)).to eq(files)
|
470
|
+
expect(shell.find(root, patterns: /lib\/BOVEM\/.+rb/)).to eq(files)
|
471
|
+
expect(shell.find(root, patterns: "lib\/bovem/")).to eq(files)
|
472
|
+
expect(shell.find(root, patterns: /lib\/BOVEM\/.+rb/, case_sensitive: true)).to eq([])
|
482
473
|
end
|
483
474
|
|
484
475
|
it "should find files basing on extension" do
|
@@ -488,9 +479,9 @@ describe Bovem::Shell do
|
|
488
479
|
files << file if !File.directory?(file)
|
489
480
|
end
|
490
481
|
|
491
|
-
expect(shell.find(root + "/lib/bovem", /rb/, true)).to eq(files)
|
492
|
-
expect(shell.find(root + "/lib/bovem", /bovem/, true)).to eq([])
|
493
|
-
expect(shell.find(root + "/lib/bovem", "RB", true, true)).to eq([])
|
482
|
+
expect(shell.find(root + "/lib/bovem", patterns: /rb/, extension_only: true)).to eq(files)
|
483
|
+
expect(shell.find(root + "/lib/bovem", patterns: /bovem/, extension_only: true)).to eq([])
|
484
|
+
expect(shell.find(root + "/lib/bovem", patterns: "RB", extension_only: true, case_sensitive: true)).to eq([])
|
494
485
|
end
|
495
486
|
|
496
487
|
it "should filter files basing using a block" do
|
@@ -500,10 +491,10 @@ describe Bovem::Shell do
|
|
500
491
|
files << file if !File.directory?(file)
|
501
492
|
end
|
502
493
|
|
503
|
-
expect(shell.find(root + "/lib/bovem", /rb/, true) { |file|
|
494
|
+
expect(shell.find(root + "/lib/bovem", patterns: /rb/, extension_only: true) { |file|
|
504
495
|
!File.directory?(file)
|
505
496
|
}).to eq(files)
|
506
|
-
expect(shell.find(root + "/lib/bovem", /bovem/, true) { |file|
|
497
|
+
expect(shell.find(root + "/lib/bovem", patterns: /bovem/, extension_only: true) { |file|
|
507
498
|
false
|
508
499
|
}).to eq([])
|
509
500
|
end
|