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
data/lib/bovem/version.rb
CHANGED
@@ -11,13 +11,13 @@ module Bovem
|
|
11
11
|
# @see http://semver.org
|
12
12
|
module Version
|
13
13
|
# The major version.
|
14
|
-
MAJOR =
|
14
|
+
MAJOR = 4
|
15
15
|
|
16
16
|
# The minor version.
|
17
17
|
MINOR = 0
|
18
18
|
|
19
19
|
# The patch version.
|
20
|
-
PATCH =
|
20
|
+
PATCH = 0
|
21
21
|
|
22
22
|
# The current version number of Bovem.
|
23
23
|
STRING = [MAJOR, MINOR, PATCH].compact.join(".")
|
data/locales/en.yml
CHANGED
@@ -5,55 +5,56 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
---
|
8
|
+
en:
|
8
9
|
bovem:
|
9
10
|
configuration:
|
10
|
-
using: "Using configuration file %
|
11
|
-
invalid: "Config file %
|
12
|
-
not_found: "Config file %
|
11
|
+
using: "Using configuration file %s."
|
12
|
+
invalid: "Config file %s is not valid."
|
13
|
+
not_found: "Config file %s is not existing or not readable."
|
13
14
|
console:
|
14
15
|
prompt: "Please insert a value"
|
15
16
|
unknown_reply: "Sorry, your reply was not understood. Please try again."
|
16
17
|
shell:
|
17
|
-
error: "due to this error: [%
|
18
|
-
run: "Running command: {mark=bright}\"%
|
19
|
-
run_dry: "Will run command: {mark=bright}\"%
|
18
|
+
error: "due to this error: [%s] %s."
|
19
|
+
run: "Running command: {mark=bright}\"%s\"{/mark}..."
|
20
|
+
run_dry: "Will run command: {mark=bright}\"%s\"{/mark}..."
|
20
21
|
remove_dry: "Will remove file(s):"
|
21
|
-
remove_unwritable: "Cannot remove following non writable file: {mark=bright}%
|
22
|
-
remove_not_found: "Cannot remove following non existent file: {mark=bright}%
|
22
|
+
remove_unwritable: "Cannot remove following non writable file: {mark=bright}%s{/mark}"
|
23
|
+
remove_not_found: "Cannot remove following non existent file: {mark=bright}%s{/mark}"
|
23
24
|
remove_error: "Cannot remove following file(s):"
|
24
25
|
copy: "copy"
|
25
26
|
move: "move"
|
26
|
-
copy_move_single_dry: "Will %
|
27
|
-
copy_move_multi_dry: "Will %
|
28
|
-
copy_move_from: "From: {mark=bright}%
|
29
|
-
copy_move_to: "To: {mark=bright}%
|
30
|
-
copy_move_to_multi: "to directory: {mark=bright}%
|
31
|
-
copy_move_single_to_directory: "Cannot %
|
32
|
-
copy_move_src_not_found: "Cannot %
|
33
|
-
copy_move_dst_not_writable_single: "Cannot %
|
34
|
-
copy_move_dst_not_writable_multi: "Cannot %
|
35
|
-
copy_move_error_single: "Cannot %
|
36
|
-
copy_move_error_multi: "Cannot %
|
37
|
-
move_in: "Moving into directory {mark=bright}%
|
38
|
-
move_out: "Moving back into directory {mark=bright}%
|
27
|
+
copy_move_single_dry: "Will %s a file:"
|
28
|
+
copy_move_multi_dry: "Will %s following entries:"
|
29
|
+
copy_move_from: "From: {mark=bright}%s{/mark}"
|
30
|
+
copy_move_to: "To: {mark=bright}%s{/mark}"
|
31
|
+
copy_move_to_multi: "to directory: {mark=bright}%s{/mark}"
|
32
|
+
copy_move_single_to_directory: "Cannot %s file {mark=bright}%s{/mark} to {mark=bright}%s{/mark} because it is currently a directory."
|
33
|
+
copy_move_src_not_found: "Cannot %s non existent file {mark=bright}%s{/mark}."
|
34
|
+
copy_move_dst_not_writable_single: "Cannot %s file {mark=bright}%s{/mark} to non writable directory {mark=bright}%s{/mark}."
|
35
|
+
copy_move_dst_not_writable_multi: "Cannot %s following file(s) to non writable directory {mark=bright}%s{/mark}:"
|
36
|
+
copy_move_error_single: "Cannot %s file {mark=bright}%s{/mark} to directory {mark=bright}%s{/mark} due to this error: [%s] %s."
|
37
|
+
copy_move_error_multi: "Cannot %s following entries to {mark=bright}%s{/mark}:"
|
38
|
+
move_in: "Moving into directory {mark=bright}%s{/mark}"
|
39
|
+
move_out: "Moving back into directory {mark=bright}%s{/mark}"
|
39
40
|
mkdir_dry: "Will create directories:"
|
40
|
-
mkdir_existing: "The directory {mark=bright}%
|
41
|
-
mkdir_file: "Path {mark=bright}%
|
42
|
-
mkdir_denied: "Cannot create following directory due to permission denied: {mark=bright}%
|
41
|
+
mkdir_existing: "The directory {mark=bright}%s{/mark} already exists."
|
42
|
+
mkdir_file: "Path {mark=bright}%s{/mark} is currently a file."
|
43
|
+
mkdir_denied: "Cannot create following directory due to permission denied: {mark=bright}%s{/mark}."
|
43
44
|
mkdir_error: "Cannot create following directories:"
|
44
45
|
application:
|
45
46
|
default_application_name: "__APPLICATION__"
|
46
|
-
ambigous_command: "Command shortcut \"%
|
47
|
-
needless_argument: "Option %
|
48
|
-
missing_argument: "Option %
|
49
|
-
invalid_option: "Invalid option %
|
50
|
-
invalid_integer: "Option %
|
51
|
-
invalid_float: "Option %
|
52
|
-
conflicting_options: "Options %
|
53
|
-
missing_option: "Required option %
|
54
|
-
invalid_value: "Value of option %
|
55
|
-
invalid_for_regexp: "Value of option %
|
56
|
-
invalid_for_proc: "Value of option %
|
47
|
+
ambigous_command: "Command shortcut \"%s\" is ambiguous across commands %s. Please add some other characters."
|
48
|
+
needless_argument: "Option %s does not expects an argument."
|
49
|
+
missing_argument: "Option %s expects an argument."
|
50
|
+
invalid_option: "Invalid option %s."
|
51
|
+
invalid_integer: "Option %s expects a valid integer as argument."
|
52
|
+
invalid_float: "Option %s expects a valid floating number as argument."
|
53
|
+
conflicting_options: "Options %s and %s have conflicting forms."
|
54
|
+
missing_option: "Required option %s is missing."
|
55
|
+
invalid_value: "Value of option %s must be one of these values: %s."
|
56
|
+
invalid_for_regexp: "Value of option %s must match the regular expression: %s."
|
57
|
+
invalid_for_proc: "Value of option %s is invalid."
|
57
58
|
help_option_short_form: "-h"
|
58
59
|
help_option_long_form: "--help"
|
59
60
|
help_message: "Shows this message."
|
@@ -71,8 +72,8 @@
|
|
71
72
|
help_subcommand_invocation: "[command [sub-command ...]] "
|
72
73
|
help_subsubcommand_invocation: "[sub-command [sub-sub-command ...]] "
|
73
74
|
help_command_description: "Shows a help about a command."
|
74
|
-
existing_command: "The command \"%
|
75
|
-
existing_option_global: "The global option \"%
|
76
|
-
existing_option: "The option \"%
|
75
|
+
existing_command: "The command \"%s\" already exists."
|
76
|
+
existing_option_global: "The global option \"%s\" already exists."
|
77
|
+
existing_option: "The option \"%s\" already exists for the command \"%s\"."
|
77
78
|
missing_app_block: "You have to provide a block to the Bovem::Application constructor!"
|
78
79
|
join_separator: " and "
|
data/locales/it.yml
CHANGED
@@ -5,55 +5,56 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
---
|
8
|
+
it:
|
8
9
|
bovem:
|
9
10
|
configuration:
|
10
|
-
using: "Uso il file di configurazione %
|
11
|
-
invalid: "Il file di configurazione %
|
12
|
-
not_found: "Il file di configurazione %
|
11
|
+
using: "Uso il file di configurazione %s."
|
12
|
+
invalid: "Il file di configurazione %s non è valido."
|
13
|
+
not_found: "Il file di configurazione %s non esiste o non è leggibile."
|
13
14
|
console:
|
14
15
|
prompt: "Per favore inserisci un valore"
|
15
16
|
unknown_reply: "Mi dispiace, la tua risposta non è stata compresa. Per favore prova di nuovo."
|
16
17
|
shell:
|
17
|
-
error: "a causa di quest'errore: [%
|
18
|
-
run: "Eseguo il comando: {mark=bright}\"%
|
19
|
-
run_dry: "Eseguirò il comando: {mark=bright}\"%
|
18
|
+
error: "a causa di quest'errore: [%s] %s."
|
19
|
+
run: "Eseguo il comando: {mark=bright}\"%s\"{/mark}..."
|
20
|
+
run_dry: "Eseguirò il comando: {mark=bright}\"%s\"{/mark}..."
|
20
21
|
remove_dry: "Rimuoverò i files:"
|
21
|
-
remove_unwritable: "Non posso rimuovere il file di sola lettura: {mark=bright}%
|
22
|
-
remove_not_found: "Non posso rimuovere il file non esistente: {mark=bright}%
|
22
|
+
remove_unwritable: "Non posso rimuovere il file di sola lettura: {mark=bright}%s{/mark}"
|
23
|
+
remove_not_found: "Non posso rimuovere il file non esistente: {mark=bright}%s{/mark}"
|
23
24
|
remove_error: "Non posso rimuovere i seguenti file:"
|
24
25
|
copy: "la copia"
|
25
26
|
move: "lo spostamento"
|
26
|
-
copy_move_single_dry: "Eseguirò %
|
27
|
-
copy_move_multi_dry: "Eseguirò %
|
28
|
-
copy_move_from: "Da: {mark=bright}%
|
29
|
-
copy_move_to: "A: {mark=bright}%
|
30
|
-
copy_move_to_multi: "nella cartella: {mark=bright}%
|
31
|
-
copy_move_single_to_directory: "Impossibile eseguire %
|
32
|
-
copy_move_src_not_found: "Impossibile eseguire %
|
33
|
-
copy_move_dst_not_writable_single: "Impossibile eseguire %
|
34
|
-
copy_move_dst_not_writable_multi: "Impossibile eseguire %
|
35
|
-
copy_move_error_single: "Impossibile eseguire %
|
36
|
-
copy_move_error_multi: "Impossibile eseguire %
|
37
|
-
move_in: "Entro nella cartella {mark=bright}%
|
38
|
-
move_out: "Torno indietro alla cartella {mark=bright}%
|
27
|
+
copy_move_single_dry: "Eseguirò %s di un file:"
|
28
|
+
copy_move_multi_dry: "Eseguirò %s dei seguenti elementi:"
|
29
|
+
copy_move_from: "Da: {mark=bright}%s{/mark}"
|
30
|
+
copy_move_to: "A: {mark=bright}%s{/mark}"
|
31
|
+
copy_move_to_multi: "nella cartella: {mark=bright}%s{/mark}"
|
32
|
+
copy_move_single_to_directory: "Impossibile eseguire %s del file {mark=bright}%s{/mark} in {mark=bright}%s{/mark} perché è attualmente una cartella."
|
33
|
+
copy_move_src_not_found: "Impossibile eseguire %s del file non esistente {mark=bright}%s{/mark}."
|
34
|
+
copy_move_dst_not_writable_single: "Impossibile eseguire %s del file {mark=bright}%s{/mark} nella cartella di sola lettura {mark=bright}%s{/mark}."
|
35
|
+
copy_move_dst_not_writable_multi: "Impossibile eseguire %s dei seguenti elementi nella cartella di sola lettura {mark=bright}%s{/mark}:"
|
36
|
+
copy_move_error_single: "Impossibile eseguire %s file {mark=bright}%s{/mark} nella cartella {mark=bright}%s{/mark} a causa di quest'errore: [%s] %s."
|
37
|
+
copy_move_error_multi: "Impossibile eseguire %s dei seguenti elementi {mark=bright}%s{/mark}:"
|
38
|
+
move_in: "Entro nella cartella {mark=bright}%s{/mark}"
|
39
|
+
move_out: "Torno indietro alla cartella {mark=bright}%s{/mark}"
|
39
40
|
mkdir_dry: "Creerò le cartelle:"
|
40
|
-
mkdir_existing: "La cartella {mark=bright}%
|
41
|
-
mkdir_file: "Il percorso {mark=bright}%
|
42
|
-
mkdir_denied: "Impossible creare la seguente cartella a causa di permessi negati: {mark=bright}%
|
41
|
+
mkdir_existing: "La cartella {mark=bright}%s{/mark} è già esistente."
|
42
|
+
mkdir_file: "Il percorso {mark=bright}%s{/mark} è attualmente un file."
|
43
|
+
mkdir_denied: "Impossible creare la seguente cartella a causa di permessi negati: {mark=bright}%s{/mark}."
|
43
44
|
mkdir_error: "Impossibile creare le seguenti cartelle:"
|
44
45
|
application:
|
45
46
|
default_application_name: "__APPLICAZIONE__"
|
46
|
-
ambigous_command: "La scorciatoia di comando \"%
|
47
|
-
needless_argument: "L'opzione %
|
48
|
-
missing_argument: "L'opzione %
|
49
|
-
invalid_option: "L'opzione %
|
50
|
-
invalid_integer: "L'opzione %
|
51
|
-
invalid_float: "L'opzione %
|
52
|
-
conflicting_options: "Le opzioni %
|
53
|
-
missing_option: "L'opzione richiesta %
|
54
|
-
invalid_value: "Il valore dell'opzione %
|
55
|
-
invalid_for_regexp: "Il valore dell'opzione %
|
56
|
-
invalid_for_proc: "Il valore dell'opzione %
|
47
|
+
ambigous_command: "La scorciatoia di comando \"%s\" è ambigua tra i seguenti comandi %s. Per favore aggiungi qualche altro carattere."
|
48
|
+
needless_argument: "L'opzione %s non richiede un argomento."
|
49
|
+
missing_argument: "L'opzione %s richiede un argomento."
|
50
|
+
invalid_option: "L'opzione %s non è valida."
|
51
|
+
invalid_integer: "L'opzione %s richiede un numero intero valido come argomento."
|
52
|
+
invalid_float: "L'opzione %s richiede un numero decimale valido come argomento."
|
53
|
+
conflicting_options: "Le opzioni %s e %s hanno forme in conflitto."
|
54
|
+
missing_option: "L'opzione richiesta %s è mancante."
|
55
|
+
invalid_value: "Il valore dell'opzione %s deve essere uno dei seguenti valori: %s."
|
56
|
+
invalid_for_regexp: "Il valore dell'opzione %s deve soddisfare questa espressione regolare: %s."
|
57
|
+
invalid_for_proc: "Il valore dell'opzione %s non è valido."
|
57
58
|
help_option_short_form: "-h"
|
58
59
|
help_option_long_form: "--help"
|
59
60
|
help_message: "Mostra questo messaggio."
|
@@ -71,8 +72,8 @@
|
|
71
72
|
help_subcommand_invocation: "[comando [sotto-comando ...]] "
|
72
73
|
help_subsubcommand_invocation: "[sotto-comando [sotto-sotto-comando ...]] "
|
73
74
|
help_command_description: "Mostra aiuto riguardo un comando."
|
74
|
-
existing_command: "Il comando \"%
|
75
|
-
existing_option_global: "L'opzione globale \"%
|
76
|
-
existing_option: "L'opzione \"%
|
75
|
+
existing_command: "Il comando \"%s\" è già esistente."
|
76
|
+
existing_option_global: "L'opzione globale \"%s\" è già esistente."
|
77
|
+
existing_option: "L'opzione \"%s\" è già esistente per il comando \"%s\"."
|
77
78
|
missing_app_block: "Devi fornire un blocco per il costruttore di Bovem::Application!"
|
78
79
|
join_separator: " e "
|
@@ -21,9 +21,9 @@ describe Bovem::Application do
|
|
21
21
|
it "should set good defaults" do
|
22
22
|
expect(application.shell).to eq(Bovem::Shell.instance)
|
23
23
|
expect(application.console).to eq(application.shell.console)
|
24
|
-
expect(application.skip_commands).to
|
25
|
-
expect(application.show_commands).to
|
26
|
-
expect(application.output_commands).to
|
24
|
+
expect(application.skip_commands).to be_falsey
|
25
|
+
expect(application.show_commands).to be_falsey
|
26
|
+
expect(application.output_commands).to be_falsey
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -53,7 +53,7 @@ describe Bovem::Application do
|
|
53
53
|
|
54
54
|
describe "#executable_name" do
|
55
55
|
it "should return executable name" do
|
56
|
-
expect(application.executable_name).to eq($
|
56
|
+
expect(application.executable_name).to eq($PROGRAM_NAME)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -123,7 +123,7 @@ describe Bovem::Application do
|
|
123
123
|
check = false
|
124
124
|
|
125
125
|
application = Bovem::Application.create(options) { check = true }
|
126
|
-
expect(check).to
|
126
|
+
expect(check).to be_truthy
|
127
127
|
expect(application.name).to eq("OK")
|
128
128
|
end
|
129
129
|
|
@@ -134,6 +134,7 @@ describe Bovem::Application do
|
|
134
134
|
option("require", [], {})
|
135
135
|
option("format", [], {})
|
136
136
|
option("example", [], {})
|
137
|
+
option("pattern", [], {})
|
137
138
|
|
138
139
|
action do |command|
|
139
140
|
args = command.arguments.join("-")
|
data/spec/bovem/command_spec.rb
CHANGED
@@ -122,17 +122,17 @@ describe Bovem::Command do
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
describe "#
|
125
|
+
describe "#description?" do
|
126
126
|
it "should check if the command has a description" do
|
127
|
-
expect(Bovem::Command.new.
|
128
|
-
expect(Bovem::Command.new({description: "DESCRIPTION"}).
|
127
|
+
expect(Bovem::Command.new.description?).to be_falsey
|
128
|
+
expect(Bovem::Command.new({description: "DESCRIPTION"}).description?).to be_truthy
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
-
describe "#
|
132
|
+
describe "#banner?" do
|
133
133
|
it "should check if the command has a banner" do
|
134
|
-
expect(Bovem::Command.new.
|
135
|
-
expect(Bovem::Command.new({banner: "BANNER"}).
|
134
|
+
expect(Bovem::Command.new.banner?).to be_falsey
|
135
|
+
expect(Bovem::Command.new({banner: "BANNER"}).banner?).to be_truthy
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
@@ -201,11 +201,11 @@ describe Bovem::Command do
|
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
204
|
-
describe "#
|
204
|
+
describe "#commands?" do
|
205
205
|
it "should check if the command has subcommands" do
|
206
|
-
expect(command.
|
206
|
+
expect(command.commands?).to be_falsey
|
207
207
|
command.command("subcommand")
|
208
|
-
expect(command.
|
208
|
+
expect(command.commands?).to be_truthy
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
@@ -233,11 +233,11 @@ describe Bovem::Command do
|
|
233
233
|
end
|
234
234
|
end
|
235
235
|
|
236
|
-
describe "#
|
236
|
+
describe "#options?" do
|
237
237
|
it "should check if the command has options" do
|
238
|
-
expect(command.
|
238
|
+
expect(command.options?).to be_falsey
|
239
239
|
command.option("option")
|
240
|
-
expect(command.
|
240
|
+
expect(command.options?).to be_truthy
|
241
241
|
end
|
242
242
|
end
|
243
243
|
|
@@ -268,10 +268,10 @@ describe Bovem::Command do
|
|
268
268
|
end
|
269
269
|
end
|
270
270
|
|
271
|
-
describe "#
|
271
|
+
describe "#application?" do
|
272
272
|
it "should check if the command is an application" do
|
273
|
-
expect(command.
|
274
|
-
expect(application.
|
273
|
+
expect(command.application?).to be_falsey
|
274
|
+
expect(application.application?).to be_truthy
|
275
275
|
end
|
276
276
|
end
|
277
277
|
|
@@ -438,38 +438,38 @@ describe Bovem::Command do
|
|
438
438
|
it "should only return provided options if required to" do
|
439
439
|
Bovem::Parser.parse(reference.application, ["--aaa", "111"])
|
440
440
|
Bovem::Parser.parse(reference, ["--ccc", "2.0"])
|
441
|
-
expect(reference.get_options
|
441
|
+
expect(reference.get_options.symbolize_keys).to eq({application_aaa: 111, aaa: 456, ccc: ["2.0"]})
|
442
442
|
end
|
443
443
|
|
444
444
|
it "should skip application options if required to" do
|
445
445
|
Bovem::Parser.parse(reference.application, ["--aaa", "111", "--ddd", "2.0"])
|
446
446
|
Bovem::Parser.parse(reference, ["--bbb", "2.0", "--ccc", "A,B,C"])
|
447
|
-
expect(reference.get_options(true, false).symbolize_keys).to eq({aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
448
|
-
expect(reference.get_options(true, nil).symbolize_keys).to eq({aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
447
|
+
expect(reference.get_options(unprovided: true, application: false).symbolize_keys).to eq({aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
448
|
+
expect(reference.get_options(unprovided: true, application: nil).symbolize_keys).to eq({aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
449
449
|
end
|
450
450
|
|
451
451
|
it "should apply the requested prefix for command options" do
|
452
452
|
Bovem::Parser.parse(reference.application, ["--aaa", "111", "--ddd", "2.0"])
|
453
453
|
Bovem::Parser.parse(reference, ["--bbb", "2.0", "--ccc", "A,B,C"])
|
454
|
-
expect(reference.get_options(true, false, "PREFIX").symbolize_keys).to eq({PREFIXaaa: 456, PREFIXbbb: "2.0", PREFIXccc: ["A", "B", "C"]})
|
454
|
+
expect(reference.get_options(unprovided: true, application: false, prefix: "PREFIX").symbolize_keys).to eq({PREFIXaaa: 456, PREFIXbbb: "2.0", PREFIXccc: ["A", "B", "C"]})
|
455
455
|
end
|
456
456
|
|
457
457
|
it "should apply the requested prefix for application options" do
|
458
458
|
Bovem::Parser.parse(reference.application, ["--aaa", "111", "--ddd", "2.0"])
|
459
459
|
Bovem::Parser.parse(reference, ["--bbb", "2.0", "--ccc", "A,B,C"])
|
460
|
-
expect(reference.get_options(true, "APP").symbolize_keys).to eq({APPaaa: 111, APPddd: 2.0, aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
460
|
+
expect(reference.get_options(unprovided: true, application: "APP").symbolize_keys).to eq({APPaaa: 111, APPddd: 2.0, aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
461
461
|
end
|
462
462
|
|
463
463
|
it "should only return requested options" do
|
464
464
|
Bovem::Parser.parse(reference.application, ["--aaa", "111", "--ddd", "2.0"])
|
465
465
|
Bovem::Parser.parse(reference, ["--bbb", "2.0", "--ccc", "A,B,C"])
|
466
|
-
expect(reference.get_options(true,
|
466
|
+
expect(reference.get_options(unprovided: true, whitelist: [:aaa, :bbb]).symbolize_keys).to eq({application_aaa: 111, aaa: 456, bbb: "2.0"})
|
467
467
|
end
|
468
468
|
|
469
469
|
it "should apply higher precedence to command options in case of conflicts" do
|
470
470
|
Bovem::Parser.parse(reference.application, ["--aaa", "111", "--ddd", "2.0"])
|
471
471
|
Bovem::Parser.parse(reference, ["--bbb", "2.0", "--ccc", "A,B,C"])
|
472
|
-
expect(reference.get_options(true,
|
472
|
+
expect(reference.get_options(unprovided: true, application: "").symbolize_keys).to eq({ddd: 2.0, aaa: 456, bbb: "2.0", ccc: ["A", "B", "C"]})
|
473
473
|
end
|
474
474
|
end
|
475
475
|
|
@@ -517,7 +517,7 @@ describe Bovem::Command do
|
|
517
517
|
|
518
518
|
it "should exit" do
|
519
519
|
allow(Kernel).to receive(:puts)
|
520
|
-
|
520
|
+
allow_any_instance_of(Bovem::Console).to receive(:write)
|
521
521
|
|
522
522
|
expect(Kernel).to receive(:exit).with(0).exactly(1)
|
523
523
|
application.show_help
|
data/spec/bovem/console_spec.rb
CHANGED
@@ -7,11 +7,7 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Bovem::Console do
|
10
|
-
let(:console) {
|
11
|
-
c = Bovem::Console.new
|
12
|
-
c.i18n = :en
|
13
|
-
c
|
14
|
-
}
|
10
|
+
let(:console) { Bovem::Console.new }
|
15
11
|
|
16
12
|
before(:each) do
|
17
13
|
ENV["TERM"] = "xterm-256color"
|
@@ -74,7 +70,7 @@ describe Bovem::Console do
|
|
74
70
|
it "should return a Fixnum greater than 0" do
|
75
71
|
w = console.line_width
|
76
72
|
expect(w).to be_a(Fixnum)
|
77
|
-
expect(w >= 0).to
|
73
|
+
expect(w >= 0).to be_truthy
|
78
74
|
end
|
79
75
|
|
80
76
|
it "should use $stdin.winsize if available" do
|
@@ -124,10 +120,10 @@ describe Bovem::Console do
|
|
124
120
|
describe "#wrap" do
|
125
121
|
it "should correct wrap text" do
|
126
122
|
message = " ABC__DEF GHI JKL"
|
127
|
-
expect(console.wrap(message, 2)).to eq("ABC__DEF\nGHI\nJKL")
|
128
|
-
expect(console.wrap(message, 3)).to eq("ABC__DEF\nGHI\nJKL")
|
129
|
-
expect(console.wrap(message, 4)).to eq("ABC__DEF\nGHI\nJKL")
|
130
|
-
expect(console.wrap(message, 5)).to eq("ABC__DEF\nGHI\nJKL")
|
123
|
+
expect(console.wrap(message, 2)).to eq(" ABC__DEF\nGHI\nJKL")
|
124
|
+
expect(console.wrap(message, 3)).to eq(" ABC__DEF\nGHI\nJKL")
|
125
|
+
expect(console.wrap(message, 4)).to eq(" ABC__DEF\nGHI\nJKL")
|
126
|
+
expect(console.wrap(message, 5)).to eq(" ABC__DEF\nGHI\nJKL")
|
131
127
|
expect(console.wrap(message, 20)).to eq(" ABC__DEF GHI JKL")
|
132
128
|
|
133
129
|
expect(console.wrap(message, nil)).to eq(message)
|
@@ -137,7 +133,7 @@ describe Bovem::Console do
|
|
137
133
|
it "should work well with #indent" do
|
138
134
|
message = "AB CD"
|
139
135
|
console.set_indentation(2)
|
140
|
-
expect(console.wrap(console.indent(message), 2)).to eq("AB\
|
136
|
+
expect(console.wrap(console.indent(message), 2)).to eq(" AB\n CD")
|
141
137
|
end
|
142
138
|
end
|
143
139
|
|
@@ -162,18 +158,11 @@ describe Bovem::Console do
|
|
162
158
|
it "should apply modifications to the message" do
|
163
159
|
message = "ABC"
|
164
160
|
console.set_indentation(2)
|
165
|
-
expect(console.format(message, "\n", false)).to eq("ABC\n")
|
166
|
-
expect(console.format(message, "A")).to eq(" ABCA")
|
167
|
-
expect(console.format(message, "A", 3)).to eq(" ABCA")
|
168
|
-
expect(console.format(message, "A", 3, 4)).to eq(" ABCA")
|
169
|
-
expect(console.format("{mark=red}ABC{/mark}",
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
describe "#replace_markers" do
|
174
|
-
it "should just forwards to .replace_markers" do
|
175
|
-
expect(Bovem::Console).to receive(:replace_markers).with("A", "B")
|
176
|
-
console.replace_markers("A", "B")
|
161
|
+
expect(console.format(message, suffix: "\n", indented: false)).to eq("ABC\n")
|
162
|
+
expect(console.format(message, suffix: "A")).to eq(" ABCA")
|
163
|
+
expect(console.format(message, suffix: "A", indented: 3)).to eq(" ABCA")
|
164
|
+
expect(console.format(message, suffix: "A", indented: 3, wrap: 4)).to eq(" ABCA")
|
165
|
+
expect(console.format("{mark=red}ABC{/mark}", plain: true)).to eq(" ABC\n")
|
177
166
|
end
|
178
167
|
end
|
179
168
|
|
@@ -184,14 +173,21 @@ describe Bovem::Console do
|
|
184
173
|
allow(console).to receive(:line_width).and_return(80)
|
185
174
|
|
186
175
|
expect(console.format_right(message)).to eq("\e[A\e[0G\e[#{75}CABCDE")
|
187
|
-
expect(console.format_right(message, 10)).to eq("\e[A\e[0G\e[#{-5}CABCDE")
|
176
|
+
expect(console.format_right(message, width: 10)).to eq("\e[A\e[0G\e[#{-5}CABCDE")
|
188
177
|
expect(console.format_right(extended_message)).to eq("\e[A\e[0G\e[#{75}CABC\e[AD\e[3mE")
|
189
|
-
expect(console.format_right(message, nil, false)).to eq("\e[0G\e[#{75}CABCDE")
|
178
|
+
expect(console.format_right(message, width: nil, go_up: false)).to eq("\e[0G\e[#{75}CABCDE")
|
190
179
|
allow(console).to receive(:line_width).and_return(10)
|
191
180
|
expect(console.format_right(message)).to eq("\e[A\e[0G\e[#{5}CABCDE")
|
192
181
|
end
|
193
182
|
end
|
194
183
|
|
184
|
+
describe "#replace_markers" do
|
185
|
+
it "should just forwards to .replace_markers" do
|
186
|
+
expect(Bovem::Console).to receive(:replace_markers).with("A", "B")
|
187
|
+
console.replace_markers("A", "B")
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
195
191
|
describe "#emphasize" do
|
196
192
|
it "should correctly emphasize messages" do
|
197
193
|
expect(console.emphasize("MSG")).to eq("{mark=bright}MSG{/mark}")
|
@@ -201,41 +197,41 @@ describe Bovem::Console do
|
|
201
197
|
|
202
198
|
describe "#write" do
|
203
199
|
it "should call #format" do
|
204
|
-
expect(console).to receive(:format).with("A", "B", "C", "D", "E")
|
205
|
-
console.write("A", "B", "C", "D", "E")
|
200
|
+
expect(console).to receive(:format).with("A", suffix: "B", indented: "C", wrap: "D", plain: "E")
|
201
|
+
console.write("A", suffix: "B", indented: "C", wrap: "D", plain: "E")
|
206
202
|
end
|
207
203
|
end
|
208
204
|
|
209
205
|
describe "#write_banner_aligned" do
|
210
206
|
it "should call #min_banner_length and #format" do
|
211
207
|
expect(Bovem::Console).to receive(:min_banner_length).and_return(1)
|
212
|
-
expect(console).to receive(:
|
213
|
-
console.write_banner_aligned("A", "B", "C", "D", "E")
|
208
|
+
expect(console).to receive(:write).with(" A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: "F")
|
209
|
+
console.write_banner_aligned("A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: "F")
|
214
210
|
end
|
215
211
|
end
|
216
212
|
|
217
213
|
describe "#get_banner" do
|
218
214
|
it "should correctly format arguments" do
|
219
215
|
expect(console.get_banner("LABEL", "red")).to eq("{mark=blue}[{mark=red}LABEL{/mark}]{/mark}")
|
220
|
-
expect(console.get_banner("LABEL", "red", true)).to eq("{mark=red}[{mark=red}LABEL{/mark}]{/mark}")
|
221
|
-
expect(console.get_banner("LABEL", "red",
|
222
|
-
expect(console.get_banner("LABEL", "red",
|
223
|
-
expect(console.get_banner("LABEL", "red",
|
224
|
-
expect(console.get_banner("LABEL", "red",
|
216
|
+
expect(console.get_banner("LABEL", "red", full_colored: true)).to eq("{mark=red}[{mark=red}LABEL{/mark}]{/mark}")
|
217
|
+
expect(console.get_banner("LABEL", "red", bracket_color: "yellow")).to eq("{mark=yellow}[{mark=red}LABEL{/mark}]{/mark}")
|
218
|
+
expect(console.get_banner("LABEL", "red", brackets: nil)).to eq("{mark=blue}{mark=red}LABEL{/mark}{/mark}")
|
219
|
+
expect(console.get_banner("LABEL", "red", brackets: "A")).to eq("{mark=blue}A{mark=red}LABEL{/mark}{/mark}")
|
220
|
+
expect(console.get_banner("LABEL", "red", brackets: ["A", "B"])).to eq("{mark=blue}A{mark=red}LABEL{/mark}B{/mark}")
|
225
221
|
end
|
226
222
|
end
|
227
223
|
|
228
224
|
describe "#info" do
|
229
225
|
it "should forward everything to #get_banner" do
|
230
|
-
expect(console).to receive(:get_banner).with("I", "bright cyan", false).at_least(1).and_return("")
|
231
|
-
console.info("OK", "\n",
|
232
|
-
expect(console).to receive(:get_banner).with("I", "bright cyan", true).at_least(1).and_return("")
|
233
|
-
console.info("OK", "\n",
|
226
|
+
expect(console).to receive(:get_banner).with("I", "bright cyan", full_colored: false).at_least(1).and_return("")
|
227
|
+
console.info("OK", suffix: "\n", full_colored: false)
|
228
|
+
expect(console).to receive(:get_banner).with("I", "bright cyan", full_colored: true).at_least(1).and_return("")
|
229
|
+
console.info("OK", suffix: "\n", full_colored: true)
|
234
230
|
end
|
235
231
|
|
236
232
|
it "should forward everything to #write" do
|
237
|
-
expect(console).to receive(:write).with(/.+/, "B",
|
238
|
-
console.info("A", "B", "C", "D", "E",
|
233
|
+
expect(console).to receive(:write).with(/.+/, suffix: "B", indented: 0, wrap: "D", plain: "E", print: false)
|
234
|
+
console.info("A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: false)
|
239
235
|
end
|
240
236
|
end
|
241
237
|
|
@@ -246,96 +242,98 @@ describe Bovem::Console do
|
|
246
242
|
end
|
247
243
|
|
248
244
|
it "should format good percentage progresses" do
|
249
|
-
expect(console.progress(1, 100, :percentage)).to eq(" 1 %")
|
250
|
-
expect(console.progress(33, 100, :percentage)).to eq(" 33 %")
|
251
|
-
expect(console.progress(1400, 100, :percentage)).to eq("1400 %")
|
252
|
-
expect(console.progress(50, 70, :percentage)).to eq(" 71 %")
|
253
|
-
expect(console.progress(50, 70, :percentage, 2)).to eq(" 71.43 %")
|
254
|
-
expect(console.progress(50, 70, :percentage, 3)).to eq(" 71.429 %")
|
255
|
-
expect(console.progress(0, 0, :percentage)).to eq("100 %")
|
256
|
-
expect(console.progress(1, 0, :percentage)).to eq("100 %")
|
257
|
-
expect(console.progress(0, 100, :percentage)).to eq(" 0 %")
|
245
|
+
expect(console.progress(1, 100, type: :percentage)).to eq(" 1 %")
|
246
|
+
expect(console.progress(33, 100, type: :percentage)).to eq(" 33 %")
|
247
|
+
expect(console.progress(1400, 100, type: :percentage)).to eq("1400 %")
|
248
|
+
expect(console.progress(50, 70, type: :percentage)).to eq(" 71 %")
|
249
|
+
expect(console.progress(50, 70, type: :percentage, precision: 2)).to eq(" 71.43 %")
|
250
|
+
expect(console.progress(50, 70, type: :percentage, precision: 3)).to eq(" 71.429 %")
|
251
|
+
expect(console.progress(0, 0, type: :percentage)).to eq("100 %")
|
252
|
+
expect(console.progress(1, 0, type: :percentage)).to eq("100 %")
|
253
|
+
expect(console.progress(0, 100, type: :percentage)).to eq(" 0 %")
|
258
254
|
end
|
259
255
|
end
|
260
256
|
|
261
257
|
describe "#begin" do
|
262
258
|
it "should forward everything to #get_banner" do
|
263
|
-
expect(console).to receive(:get_banner).with("*", "bright green", false).at_least(1).and_return("")
|
264
|
-
console.begin("OK", "\n",
|
259
|
+
expect(console).to receive(:get_banner).with("*", "bright green", full_colored: false).at_least(1).and_return("")
|
260
|
+
console.begin("OK", suffix: "\n", full_colored: false)
|
261
|
+
expect(console).to receive(:get_banner).with("*", "bright green", full_colored: true).at_least(1).and_return("")
|
262
|
+
console.begin("OK", suffix: "\n", full_colored: true)
|
265
263
|
end
|
266
264
|
|
267
265
|
it "should forward everything to #write" do
|
268
|
-
expect(console).to receive(:write).with(/.+/, "B",
|
269
|
-
console.begin("A", "B", "C", "D", "E",
|
266
|
+
expect(console).to receive(:write).with(/.+/, suffix: "B", indented: 0, wrap: "D", plain: "E", print: false)
|
267
|
+
console.begin("A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: false)
|
270
268
|
end
|
271
269
|
end
|
272
270
|
|
273
271
|
describe "#warn" do
|
274
272
|
it "should forward everything to #get_banner" do
|
275
|
-
expect(console).to receive(:get_banner).with("W", "bright yellow", false).at_least(1).and_return("")
|
276
|
-
console.warn("OK", "\n",
|
277
|
-
expect(console).to receive(:get_banner).with("W", "bright yellow", true).at_least(1).and_return("")
|
278
|
-
console.warn("OK", "\n",
|
273
|
+
expect(console).to receive(:get_banner).with("W", "bright yellow", full_colored: false).at_least(1).and_return("")
|
274
|
+
console.warn("OK", suffix: "\n", full_colored: false)
|
275
|
+
expect(console).to receive(:get_banner).with("W", "bright yellow", full_colored: true).at_least(1).and_return("")
|
276
|
+
console.warn("OK", suffix: "\n", full_colored: true)
|
279
277
|
end
|
280
278
|
|
281
279
|
it "should forward everything to #write" do
|
282
|
-
expect(console).to receive(:write).with(/.+/, "B",
|
283
|
-
console.warn("A", "B", "C", "D", "E",
|
280
|
+
expect(console).to receive(:write).with(/.+/, suffix: "B", indented: 0, wrap: "D", plain: "E", print: false)
|
281
|
+
console.warn("A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: false)
|
284
282
|
end
|
285
283
|
end
|
286
284
|
|
287
285
|
describe "#error" do
|
288
286
|
it "should forward everything to #get_banner" do
|
289
|
-
expect(console).to receive(:get_banner).with("E", "bright red", false).at_least(1).and_return("")
|
290
|
-
console.error("OK", "\n",
|
291
|
-
expect(console).to receive(:get_banner).with("E", "bright red", true).at_least(1).and_return("")
|
292
|
-
console.error("OK", "\n",
|
287
|
+
expect(console).to receive(:get_banner).with("E", "bright red", full_colored: false).at_least(1).and_return("")
|
288
|
+
console.error("OK", suffix: "\n", full_colored: false)
|
289
|
+
expect(console).to receive(:get_banner).with("E", "bright red", full_colored: true).at_least(1).and_return("")
|
290
|
+
console.error("OK", suffix: "\n", full_colored: true)
|
293
291
|
end
|
294
292
|
|
295
293
|
it "should forward everything to #write" do
|
296
|
-
expect(console).to receive(:write).with(/.+/, "B",
|
297
|
-
console.error("A", "B", "C", "D", "E",
|
294
|
+
expect(console).to receive(:write).with(/.+/, suffix: "B", indented: 0, wrap: "D", plain: "E", print: false)
|
295
|
+
console.error("A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: false)
|
298
296
|
end
|
299
297
|
end
|
300
298
|
|
301
299
|
describe "#fatal" do
|
302
300
|
it "should forward anything to #error" do
|
303
301
|
allow(Kernel).to receive(:exit).and_return(true)
|
304
|
-
expect(console).to receive(:error).with("A", "B", "C", "D", "E", "F", "G",
|
305
|
-
console.fatal("A", "B", "C", "D", "E", "F", "G"
|
302
|
+
expect(console).to receive(:error).with("A", suffix: "B", indented: "C", wrap: "D", plain: "E", indented_banner: "F", full_colored: "G", print: true)
|
303
|
+
console.fatal("A", suffix: "B", indented: "C", wrap: "D", plain: "E", indented_banner: "F", full_colored: "G")
|
306
304
|
end
|
307
305
|
|
308
306
|
it "should call abort with the right error code" do
|
309
307
|
allow(Kernel).to receive(:exit).and_return(true)
|
310
308
|
|
311
309
|
expect(Kernel).to receive(:exit).with(-1).exactly(2)
|
312
|
-
console.fatal("A", "B", "C", "D", "E", "F", "G", -1, false)
|
313
|
-
console.fatal("A", "B", "C", "D", "E", "F", "G", "H", false)
|
310
|
+
console.fatal("A", suffix: "B", indented: "C", wrap: "D", plain: "E", indented_banner: "F", full_colored: "G", return_code: -1, print: false)
|
311
|
+
console.fatal("A", suffix: "B", indented: "C", wrap: "D", plain: "E", indented_banner: "F", full_colored: "G", return_code: "H", print: false)
|
314
312
|
end
|
315
313
|
end
|
316
314
|
|
317
315
|
describe "#debug" do
|
318
316
|
it "should forward everything to #get_banner" do
|
319
|
-
expect(console).to receive(:get_banner).with("D", "bright magenta", false).at_least(1).and_return("")
|
320
|
-
console.debug("OK", "\n",
|
321
|
-
expect(console).to receive(:get_banner).with("D", "bright magenta", true).at_least(1).and_return("")
|
322
|
-
console.debug("OK", "\n",
|
317
|
+
expect(console).to receive(:get_banner).with("D", "bright magenta", full_colored: false).at_least(1).and_return("")
|
318
|
+
console.debug("OK", suffix: "\n", full_colored: false)
|
319
|
+
expect(console).to receive(:get_banner).with("D", "bright magenta", full_colored: true).at_least(1).and_return("")
|
320
|
+
console.debug("OK", suffix: "\n", full_colored: true)
|
323
321
|
end
|
324
322
|
|
325
323
|
it "should forward everything to #write" do
|
326
|
-
expect(console).to receive(:write).with(/.+/, "B",
|
327
|
-
console.debug("A", "B", "C", "D", "E",
|
324
|
+
expect(console).to receive(:write).with(/.+/, suffix: "B", indented: 0, wrap: "D", plain: "E", print: false)
|
325
|
+
console.debug("A", suffix: "B", indented: "C", wrap: "D", plain: "E", print: false)
|
328
326
|
end
|
329
327
|
end
|
330
328
|
|
331
329
|
describe "#status" do
|
332
330
|
it "should get the right status" do
|
333
|
-
expect(console.status(:ok,
|
334
|
-
expect(console.status(:pass,
|
335
|
-
expect(console.status(:warn,
|
336
|
-
expect(console.status(:fail,
|
337
|
-
expect(console.status("NO",
|
338
|
-
expect(console.status(nil,
|
331
|
+
expect(console.status(:ok, print: false)).to eq({label: " OK ", color: "bright green"})
|
332
|
+
expect(console.status(:pass, print: false)).to eq({label: "PASS", color: "bright cyan"})
|
333
|
+
expect(console.status(:warn, print: false)).to eq({label: "WARN", color: "bright yellow"})
|
334
|
+
expect(console.status(:fail, print: false)).to eq({label: "FAIL", color: "bright red"})
|
335
|
+
expect(console.status("NO", print: false)).to eq({label: " OK ", color: "bright green"})
|
336
|
+
expect(console.status(nil, print: false)).to eq({label: " OK ", color: "bright green"})
|
339
337
|
end
|
340
338
|
|
341
339
|
it "should create the banner" do
|
@@ -344,10 +342,11 @@ describe Bovem::Console do
|
|
344
342
|
end
|
345
343
|
|
346
344
|
it "should format correctly" do
|
347
|
-
expect(console).to receive(:format_right).with(/.+/, true, true, false)
|
348
|
-
console.
|
349
|
-
|
350
|
-
console.status(:ok
|
345
|
+
expect(console).to receive(:format_right).with(/.+/, width: true, go_up: true, plain: false)
|
346
|
+
expect(console).to receive(:format).with(/.+/, suffix: "\n", indent: true, wrap: true, plain: false)
|
347
|
+
|
348
|
+
console.status(:ok)
|
349
|
+
console.status(:ok, right: false)
|
351
350
|
end
|
352
351
|
end
|
353
352
|
|
@@ -357,30 +356,30 @@ describe Bovem::Console do
|
|
357
356
|
|
358
357
|
prompt = "PROMPT"
|
359
358
|
expect(Kernel).to receive(:print).with("Please insert a value: ")
|
360
|
-
console.read(true)
|
359
|
+
console.read(prompt: true)
|
361
360
|
expect(Kernel).to receive(:print).with(prompt + ": ")
|
362
|
-
console.read(prompt)
|
361
|
+
console.read(prompt: prompt)
|
363
362
|
expect(Kernel).not_to receive("print")
|
364
|
-
console.read(nil)
|
363
|
+
console.read(prompt: nil)
|
365
364
|
end
|
366
365
|
|
367
366
|
it "should read a value or a default" do
|
368
367
|
allow($stdin).to receive(:gets).and_return("VALUE\n")
|
369
|
-
expect(console.read(nil, "DEFAULT")).to eq("VALUE")
|
368
|
+
expect(console.read(prompt: nil, default_value: "DEFAULT")).to eq("VALUE")
|
370
369
|
allow($stdin).to receive(:gets).and_return("\n")
|
371
|
-
expect(console.read(nil, "DEFAULT")).to eq("DEFAULT")
|
370
|
+
expect(console.read(prompt: nil, default_value: "DEFAULT")).to eq("DEFAULT")
|
372
371
|
end
|
373
372
|
|
374
373
|
it "should return the default value if the user quits" do
|
375
374
|
allow($stdin).to receive(:gets).and_raise(Interrupt)
|
376
|
-
expect(console.read(nil, "DEFAULT")).to eq("DEFAULT")
|
375
|
+
expect(console.read(prompt: nil, default_value: "DEFAULT")).to eq("DEFAULT")
|
377
376
|
end
|
378
377
|
|
379
378
|
it "should validate against an object or array validator" do
|
380
379
|
count = 0
|
381
380
|
|
382
381
|
allow($stdin).to receive(:gets) do
|
383
|
-
if count == 0
|
382
|
+
if count == 0
|
384
383
|
count += 1
|
385
384
|
"2\n"
|
386
385
|
else
|
@@ -390,13 +389,13 @@ describe Bovem::Console do
|
|
390
389
|
|
391
390
|
expect(console).to receive(:write).with("Sorry, your reply was not understood. Please try again.", false, false).exactly(4)
|
392
391
|
count = 0
|
393
|
-
console.read(
|
392
|
+
console.read(prompt: nil, validator: "A")
|
394
393
|
count = 0
|
395
|
-
console.read(
|
394
|
+
console.read(prompt: nil, validator: "1")
|
396
395
|
count = 0
|
397
|
-
console.read(
|
396
|
+
console.read(prompt: nil, validator: "nil")
|
398
397
|
count = 0
|
399
|
-
console.read(
|
398
|
+
console.read(prompt: nil, validator: ["A", 1])
|
400
399
|
end
|
401
400
|
|
402
401
|
it "should validate against an regexp validator" do
|
@@ -412,12 +411,12 @@ describe Bovem::Console do
|
|
412
411
|
end
|
413
412
|
|
414
413
|
expect(console).to receive(:write).with("Sorry, your reply was not understood. Please try again.", false, false)
|
415
|
-
console.read(
|
414
|
+
console.read(prompt: nil, validator: /[abc]/)
|
416
415
|
end
|
417
416
|
|
418
417
|
it "should hide echo to the user when the terminal shows echo" do
|
419
418
|
expect($stdin).to receive(:noecho).and_return("VALUE")
|
420
|
-
console.read(
|
419
|
+
console.read(prompt: nil, echo: false)
|
421
420
|
end
|
422
421
|
end
|
423
422
|
|
@@ -428,9 +427,9 @@ describe Bovem::Console do
|
|
428
427
|
end
|
429
428
|
|
430
429
|
it "should print the message and indentate correctly" do
|
431
|
-
expect(console).to receive(:begin).with("A", "B", "C", "D", "E", "F", "G")
|
430
|
+
expect(console).to receive(:begin).with("A", suffix: "B", indented: "C", wrap: "D", plain: "E", indented_banner: "F", full_colored: "G")
|
432
431
|
expect(console).to receive(:with_indentation).with("H", "I")
|
433
|
-
console.task("A", "B", "C", "D", "E", "F", "G", "H", "I") { :ok }
|
432
|
+
console.task("A", suffix: "B", indented: "C", wrap: "D", plain: "E", indented_banner: "F", full_colored: "G", block_indentation: "H", block_indentation_absolute: "I") { :ok }
|
434
433
|
end
|
435
434
|
|
436
435
|
it "should execute the given block" do
|
@@ -440,9 +439,9 @@ describe Bovem::Console do
|
|
440
439
|
|
441
440
|
it "should write the correct status" do
|
442
441
|
allow(console).to receive(:begin)
|
443
|
-
expect(console).to receive(:status).with(:ok, false)
|
442
|
+
expect(console).to receive(:status).with(:ok, plain: false)
|
444
443
|
console.task("OK") { :ok }
|
445
|
-
expect(console).to receive(:status).with(:fail, false)
|
444
|
+
expect(console).to receive(:status).with(:fail, plain: false)
|
446
445
|
expect { console.task("") { :fatal }}.to raise_error(SystemExit)
|
447
446
|
end
|
448
447
|
|