bovem 2.4.1 → 3.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 +2 -1
- data/Gemfile +1 -1
- data/README.md +98 -2
- data/bovem.gemspec +3 -3
- data/doc/Bovem.html +25 -6
- data/doc/Bovem/Application.html +3057 -0
- data/doc/Bovem/Command.html +7031 -0
- data/doc/Bovem/CommandMethods.html +125 -0
- data/doc/Bovem/CommandMethods/Children.html +1285 -0
- data/doc/Bovem/CommandMethods/Help.html +209 -0
- data/doc/Bovem/Configuration.html +3 -3
- data/doc/Bovem/Console.html +8 -8
- data/doc/Bovem/ConsoleMethods.html +3 -3
- data/doc/Bovem/ConsoleMethods/Interactions.html +3 -3
- data/doc/Bovem/ConsoleMethods/Interactions/ClassMethods.html +3 -3
- data/doc/Bovem/ConsoleMethods/Logging.html +4 -4
- data/doc/Bovem/ConsoleMethods/Logging/ClassMethods.html +3 -3
- data/doc/Bovem/ConsoleMethods/Output.html +3 -3
- data/doc/Bovem/ConsoleMethods/StyleHandling.html +4 -4
- data/doc/Bovem/ConsoleMethods/StyleHandling/ClassMethods.html +8 -8
- data/doc/Bovem/Errors.html +4 -4
- data/doc/Bovem/Errors/Error.html +631 -0
- data/doc/Bovem/Errors/InvalidConfiguration.html +3 -3
- data/doc/Bovem/Errors/InvalidLogger.html +3 -3
- data/doc/Bovem/Localizer.html +376 -0
- data/doc/Bovem/Logger.html +64 -160
- data/doc/Bovem/Option.html +7009 -0
- data/doc/Bovem/Parser.html +276 -0
- data/doc/Bovem/ParserMethods.html +125 -0
- data/doc/Bovem/ParserMethods/General.html +134 -0
- data/doc/Bovem/ParserMethods/General/ClassMethods.html +574 -0
- data/doc/Bovem/Shell.html +8 -8
- data/doc/Bovem/ShellMethods.html +3 -3
- data/doc/Bovem/ShellMethods/Directories.html +3 -3
- data/doc/Bovem/ShellMethods/Execute.html +3 -3
- data/doc/Bovem/ShellMethods/General.html +3 -3
- data/doc/Bovem/ShellMethods/Read.html +3 -3
- data/doc/Bovem/ShellMethods/Write.html +3 -3
- data/doc/Bovem/Version.html +6 -6
- data/doc/_index.html +119 -11
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +98 -5
- data/doc/frames.html +1 -1
- data/doc/index.html +98 -5
- data/doc/method_list.html +476 -26
- data/doc/top-level-namespace.html +3 -3
- data/lib/bovem.rb +8 -1
- data/lib/bovem/application.rb +158 -0
- data/lib/bovem/command.rb +529 -0
- data/lib/bovem/console.rb +8 -8
- data/lib/bovem/errors.rb +27 -0
- data/lib/bovem/localizer.rb +27 -0
- data/lib/bovem/logger.rb +2 -8
- data/lib/bovem/option.rb +250 -0
- data/lib/bovem/parser.rb +317 -0
- data/lib/bovem/shell.rb +2 -2
- data/lib/bovem/version.rb +3 -3
- data/locales/en.yml +33 -0
- data/locales/it.yml +33 -0
- data/spec/bovem/application_spec.rb +170 -0
- data/spec/bovem/command_spec.rb +526 -0
- data/spec/bovem/configuration_spec.rb +4 -4
- data/spec/bovem/console_spec.rb +22 -22
- data/spec/bovem/errors_spec.rb +18 -0
- data/spec/bovem/logger_spec.rb +22 -12
- data/spec/bovem/option_spec.rb +307 -0
- data/spec/bovem/parser_spec.rb +126 -0
- data/spec/bovem/shell_spec.rb +4 -4
- metadata +32 -5
@@ -7,7 +7,7 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Bovem::Configuration do
|
10
|
-
class BaseConfiguration <
|
10
|
+
class BaseConfiguration < Bovem::Configuration
|
11
11
|
property :property
|
12
12
|
end
|
13
13
|
|
@@ -24,15 +24,15 @@ describe Bovem::Configuration do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "reject a missing or unreadable file" do
|
27
|
-
expect { BaseConfiguration.new("/non-existing")}.to raise_error(
|
27
|
+
expect { BaseConfiguration.new("/non-existing")}.to raise_error(Bovem::Errors::InvalidConfiguration)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "reject an invalid configuration" do
|
31
31
|
::File.open("#{test_prefix}-1", "w") {|f| f.write("config.property = ") }
|
32
32
|
::File.open("#{test_prefix}-2", "w") {|f| f.write("config.non_property = 1234") }
|
33
33
|
|
34
|
-
expect { BaseConfiguration.new("#{test_prefix}-1")}.to raise_error(
|
35
|
-
expect { BaseConfiguration.new("#{test_prefix}-2")}.to raise_error(
|
34
|
+
expect { BaseConfiguration.new("#{test_prefix}-1")}.to raise_error(Bovem::Errors::InvalidConfiguration)
|
35
|
+
expect { BaseConfiguration.new("#{test_prefix}-2")}.to raise_error(Bovem::Errors::InvalidConfiguration)
|
36
36
|
|
37
37
|
File.unlink("#{test_prefix}-1")
|
38
38
|
File.unlink("#{test_prefix}-2")
|
data/spec/bovem/console_spec.rb
CHANGED
@@ -8,7 +8,7 @@ require "spec_helper"
|
|
8
8
|
|
9
9
|
describe Bovem::Console do
|
10
10
|
let(:console) {
|
11
|
-
c =
|
11
|
+
c = Bovem::Console.new
|
12
12
|
c.i18n = :en
|
13
13
|
c
|
14
14
|
}
|
@@ -20,46 +20,46 @@ describe Bovem::Console do
|
|
20
20
|
|
21
21
|
describe ".instance" do
|
22
22
|
it "should always return the same instance" do
|
23
|
-
instance =
|
24
|
-
expect(
|
23
|
+
instance = Bovem::Console.instance
|
24
|
+
expect(Bovem::Console.instance).to be(instance)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
describe ".parse_style" do
|
29
29
|
it "should correctly parse styles" do
|
30
|
-
expect(
|
31
|
-
expect(
|
32
|
-
expect(
|
33
|
-
expect(
|
34
|
-
expect(
|
35
|
-
expect(
|
36
|
-
expect(
|
30
|
+
expect(Bovem::Console.parse_style("red")).to eq("\e[31m")
|
31
|
+
expect(Bovem::Console.parse_style("bg_green")).to eq("\e[42m")
|
32
|
+
expect(Bovem::Console.parse_style("bright")).to eq("\e[1m")
|
33
|
+
expect(Bovem::Console.parse_style("FOO")).to eq("")
|
34
|
+
expect(Bovem::Console.parse_style(nil)).to eq("")
|
35
|
+
expect(Bovem::Console.parse_style(["A"])).to eq("")
|
36
|
+
expect(Bovem::Console.parse_style("-")).to eq("")
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
describe ".replace_markers" do
|
41
41
|
it "should correct replace markers" do
|
42
|
-
expect(
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect(
|
46
|
-
expect(
|
42
|
+
expect(Bovem::Console.replace_markers("{mark=red}RED{/mark}")).to eq("\e[31mRED\e[0m")
|
43
|
+
expect(Bovem::Console.replace_markers("{mark=red}RED {mark=green}GREEN{/mark}{/mark}")).to eq("\e[31mRED \e[32mGREEN\e[31m\e[0m")
|
44
|
+
expect(Bovem::Console.replace_markers("{mark=red}RED {mark=bright-green}GREEN {mark=blue}BLUE{mark=NONE}RED{/mark}{/mark}{/mark}{/mark}")).to eq("\e[31mRED \e[1m\e[32mGREEN \e[34mBLUERED\e[1m\e[32m\e[31m\e[0m")
|
45
|
+
expect(Bovem::Console.replace_markers("{mark=bg_red}RED{mark=reset}NORMAL{/mark}{/mark}")).to eq("\e[41mRED\e[0mNORMAL\e[41m\e[0m")
|
46
|
+
expect(Bovem::Console.replace_markers("{mark=NONE}RED{/mark}")).to eq("RED")
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should clean up markers if requested" do
|
50
|
-
expect(
|
50
|
+
expect(Bovem::Console.replace_markers("{mark=red}RED{/mark}", true)).to eq("RED")
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
describe ".execute_command" do
|
55
55
|
it "should execute a command" do
|
56
|
-
expect(
|
56
|
+
expect(Bovem::Console.execute("echo OK")).to eq("OK\n")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
describe ".min_banner_length" do
|
61
61
|
it "should return a number" do
|
62
|
-
expect(
|
62
|
+
expect(Bovem::Console.min_banner_length).to be_a(Fixnum)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -172,7 +172,7 @@ describe Bovem::Console do
|
|
172
172
|
|
173
173
|
describe "#replace_markers" do
|
174
174
|
it "should just forwards to .replace_markers" do
|
175
|
-
expect(
|
175
|
+
expect(Bovem::Console).to receive(:replace_markers).with("A", "B")
|
176
176
|
console.replace_markers("A", "B")
|
177
177
|
end
|
178
178
|
end
|
@@ -208,7 +208,7 @@ describe Bovem::Console do
|
|
208
208
|
|
209
209
|
describe "#write_banner_aligned" do
|
210
210
|
it "should call #min_banner_length and #format" do
|
211
|
-
expect(
|
211
|
+
expect(Bovem::Console).to receive(:min_banner_length).and_return(1)
|
212
212
|
expect(console).to receive(:format).with(" A", "B", "C", "D", "E")
|
213
213
|
console.write_banner_aligned("A", "B", "C", "D", "E")
|
214
214
|
end
|
@@ -415,8 +415,8 @@ describe Bovem::Console do
|
|
415
415
|
end
|
416
416
|
|
417
417
|
it "should execute the given block" do
|
418
|
-
expect(
|
419
|
-
console.task {
|
418
|
+
expect(Bovem::Console).to receive(:foo)
|
419
|
+
console.task { Bovem::Console.foo }
|
420
420
|
end
|
421
421
|
|
422
422
|
it "should write the correct status" do
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the bovem gem. Copyright (C) 2013 and above Shogun <shogun_panda@me.com>.
|
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::Errors::Error do
|
10
|
+
describe "#initialize" do
|
11
|
+
it "copies attributes" do
|
12
|
+
error = Bovem::Errors::Error.new("A", "B", "C")
|
13
|
+
expect(error.target).to eq("A")
|
14
|
+
expect(error.reason).to eq("B")
|
15
|
+
expect(error.message).to eq("C")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/bovem/logger_spec.rb
CHANGED
@@ -7,37 +7,41 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Bovem::Logger do
|
10
|
+
before(:each) do
|
11
|
+
allow(::Time).to receive(:now).and_return(Time.at(10))
|
12
|
+
end
|
13
|
+
|
10
14
|
describe ".create" do
|
11
15
|
it "should create a new default logger" do
|
12
|
-
logger =
|
13
|
-
expect(logger.device).to eq(
|
16
|
+
logger = Bovem::Logger.create
|
17
|
+
expect(logger.device).to eq(Bovem::Logger.default_file)
|
14
18
|
expect(logger.level).to eq(::Logger::INFO)
|
15
|
-
expect(logger.formatter).to eq(
|
19
|
+
expect(logger.formatter).to eq(Bovem::Logger.default_formatter)
|
16
20
|
end
|
17
21
|
|
18
22
|
it "should create a logger with a custom file and level" do
|
19
|
-
logger =
|
23
|
+
logger = Bovem::Logger.create("/dev/null", ::Logger::WARN)
|
20
24
|
expect(logger.device).to eq("/dev/null")
|
21
25
|
expect(logger.level).to eq(::Logger::WARN)
|
22
|
-
expect(logger.formatter).to eq(
|
26
|
+
expect(logger.formatter).to eq(Bovem::Logger.default_formatter)
|
23
27
|
end
|
24
28
|
|
25
29
|
it "should create a logger with a custom formatter" do
|
26
30
|
formatter = Proc.new {|severity, datetime, progname, msg| msg }
|
27
|
-
logger =
|
31
|
+
logger = Bovem::Logger.create("/dev/null", ::Logger::WARN, formatter)
|
28
32
|
expect(logger.device).to eq("/dev/null")
|
29
33
|
expect(logger.level).to eq(::Logger::WARN)
|
30
34
|
expect(logger.formatter).to eq(formatter)
|
31
35
|
end
|
32
36
|
|
33
37
|
it "should raise exceptions for invalid files" do
|
34
|
-
expect {
|
38
|
+
expect { Bovem::Logger.create("/invalid/file") }.to raise_error(Bovem::Errors::InvalidLogger)
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
38
42
|
describe ".default_formatter" do
|
39
43
|
let(:output) { ::StringIO.new }
|
40
|
-
let(:logger) {
|
44
|
+
let(:logger) { Bovem::Logger.create(output, Logger::DEBUG) }
|
41
45
|
|
42
46
|
def get_last_line(buffer)
|
43
47
|
buffer.string.split("\n").last.strip.gsub(/ T\+\d+\.\d+/, "")
|
@@ -82,21 +86,27 @@ describe Bovem::Logger do
|
|
82
86
|
|
83
87
|
describe ".get_real_file" do
|
84
88
|
it "should return the standard ouput" do
|
85
|
-
expect(
|
89
|
+
expect(Bovem::Logger.get_real_file("STDOUT")).to eq($stdout )
|
86
90
|
end
|
87
91
|
|
88
92
|
it "should return the standard error" do
|
89
|
-
expect(
|
93
|
+
expect(Bovem::Logger.get_real_file("STDERR")).to eq($stderr )
|
90
94
|
end
|
91
95
|
|
92
96
|
it "should return the file" do
|
93
|
-
expect(
|
97
|
+
expect(Bovem::Logger.get_real_file("/dev/null")).to eq("/dev/null" )
|
94
98
|
end
|
95
99
|
end
|
96
100
|
|
97
101
|
describe ".default_file" do
|
98
102
|
it "should return the standard output" do
|
99
|
-
expect(
|
103
|
+
expect(Bovem::Logger.default_file).to eq($stdout)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe ".start_time" do
|
108
|
+
it "should store the start time" do
|
109
|
+
expect(Bovem::Logger.start_time).to eq(Time.at(10))
|
100
110
|
end
|
101
111
|
end
|
102
112
|
end
|
@@ -0,0 +1,307 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# This file is part of the bovem gem. Copyright (C) 2013 and above Shogun <shogun_panda@me.com>.
|
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::Option do
|
10
|
+
let(:application) {
|
11
|
+
Bovem::Application.new {
|
12
|
+
action {}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
let(:command) {
|
17
|
+
c = Bovem::Command.new
|
18
|
+
c.application = application
|
19
|
+
c
|
20
|
+
}
|
21
|
+
|
22
|
+
let(:option) {
|
23
|
+
o = Bovem::Option.new("NAME")
|
24
|
+
o.parent = command
|
25
|
+
o
|
26
|
+
}
|
27
|
+
|
28
|
+
describe "#initialize" do
|
29
|
+
it "should set good forms" do
|
30
|
+
option = Bovem::Option.new("NAME")
|
31
|
+
expect(option.name).to eq("NAME")
|
32
|
+
expect(option.short).to eq("N")
|
33
|
+
expect(option.long).to eq("NAME")
|
34
|
+
|
35
|
+
option = Bovem::Option.new("NAME", "O")
|
36
|
+
expect(option.name).to eq("NAME")
|
37
|
+
expect(option.short).to eq("O")
|
38
|
+
expect(option.long).to eq("NAME")
|
39
|
+
|
40
|
+
option = Bovem::Option.new("NAME", ["O", "OPTION"])
|
41
|
+
expect(option.name).to eq("NAME")
|
42
|
+
expect(option.short).to eq("O")
|
43
|
+
expect(option.long).to eq("OPTION")
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should set options" do
|
48
|
+
option = Bovem::Option.new("NAME", ["O", "OPTION"], {required: true, help: "HELP", unused: "UNUSED"})
|
49
|
+
expect(option.help).to be_true
|
50
|
+
expect(option.help).to eq("HELP")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#short=" do
|
55
|
+
it "should set good form" do
|
56
|
+
option.short = "a"
|
57
|
+
expect(option.short).to eq("a")
|
58
|
+
|
59
|
+
option.short = "-b"
|
60
|
+
expect(option.short).to eq("b")
|
61
|
+
|
62
|
+
option.short = "-c"
|
63
|
+
expect(option.short).to eq("c")
|
64
|
+
|
65
|
+
option.short = 1
|
66
|
+
expect(option.short).to eq("1")
|
67
|
+
|
68
|
+
option.short = true
|
69
|
+
expect(option.short).to eq("t")
|
70
|
+
|
71
|
+
option.short = nil
|
72
|
+
expect(option.short).to eq("N")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#long=" do
|
77
|
+
it "should set good form" do
|
78
|
+
option.long = "a"
|
79
|
+
expect(option.long).to eq("a")
|
80
|
+
|
81
|
+
option.long = "abc"
|
82
|
+
expect(option.long).to eq("abc")
|
83
|
+
|
84
|
+
option.long = "-def"
|
85
|
+
expect(option.long).to eq("def")
|
86
|
+
|
87
|
+
option.long = "--ghi"
|
88
|
+
expect(option.long).to eq("ghi")
|
89
|
+
|
90
|
+
option.long = true
|
91
|
+
expect(option.long).to eq("true")
|
92
|
+
|
93
|
+
option.long = 1
|
94
|
+
expect(option.long).to eq("1")
|
95
|
+
|
96
|
+
option.long = nil
|
97
|
+
expect(option.long).to eq("NAME")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#validator=" do
|
102
|
+
it "should set a good validator" do
|
103
|
+
proc = -> {}
|
104
|
+
|
105
|
+
option.validator = "VALUE"
|
106
|
+
expect(option.validator).to eq(["VALUE"])
|
107
|
+
option.validator = 1
|
108
|
+
expect(option.validator).to eq([1])
|
109
|
+
option.validator = ["VALUE", "VALUE"]
|
110
|
+
expect(option.validator).to eq(["VALUE"])
|
111
|
+
option.validator = [1, 2, 1]
|
112
|
+
expect(option.validator).to eq([1, 2])
|
113
|
+
option.validator = /VALUE/
|
114
|
+
expect(option.validator).to eq(/VALUE/)
|
115
|
+
option.validator = proc
|
116
|
+
expect(option.validator).to eq(proc)
|
117
|
+
option.validator = nil
|
118
|
+
expect(option.validator).to be_nil
|
119
|
+
option.validator = ""
|
120
|
+
expect(option.validator).to be_nil
|
121
|
+
option.validator = []
|
122
|
+
expect(option.validator).to be_nil
|
123
|
+
option.validator = //
|
124
|
+
expect(option.validator).to be_nil
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "#complete_short" do
|
129
|
+
it "should return a good short form" do
|
130
|
+
expect(Bovem::Option.new("NAME").complete_short).to eq("-N")
|
131
|
+
expect(Bovem::Option.new("NAME", "A").complete_short).to eq("-A")
|
132
|
+
expect(Bovem::Option.new("NAME", ["A", "BC"]).complete_short).to eq("-A")
|
133
|
+
expect(Bovem::Option.new("NAME", [true, false]).complete_short).to eq("-t")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "#complete_long" do
|
138
|
+
it "should return a good short form" do
|
139
|
+
expect(Bovem::Option.new("NAME").complete_long).to eq("--NAME")
|
140
|
+
expect(Bovem::Option.new("NAME", "A").complete_long).to eq("--NAME")
|
141
|
+
expect(Bovem::Option.new("NAME", ["A", "BC"]).complete_long).to eq("--BC")
|
142
|
+
expect(Bovem::Option.new("NAME", [true, true]).complete_long).to eq("--true")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "#label" do
|
147
|
+
it "should return a good label" do
|
148
|
+
expect(Bovem::Option.new("NAME").label).to eq("-N/--NAME")
|
149
|
+
expect(Bovem::Option.new("NAME", "A").label).to eq("-A/--NAME")
|
150
|
+
expect(Bovem::Option.new("NAME", ["A", "BC"]).label).to eq("-A/--BC")
|
151
|
+
expect(Bovem::Option.new("NAME", [true, true]).label).to eq("-t/--true")
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "#meta" do
|
157
|
+
it "should return the option meta" do
|
158
|
+
expect(Bovem::Option.new("NAME", []).meta).to be_nil
|
159
|
+
expect(Bovem::Option.new("NAME", [], {type: String}).meta).to eq("NAME")
|
160
|
+
expect(Bovem::Option.new("foo", [], {type: String}).meta).to eq("FOO")
|
161
|
+
expect(Bovem::Option.new("NAME", [], {type: String, meta: "STRING"}).meta).to eq("STRING")
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe "#set" do
|
166
|
+
it "should set the value" do
|
167
|
+
expect(option.set("VALUE")).to be_true
|
168
|
+
expect(option.value).to eq("VALUE")
|
169
|
+
expect(option.provided?).to be_true
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should match against a regexp validator" do
|
173
|
+
option.validator = /^A|B$/
|
174
|
+
|
175
|
+
expect{ option.set("VALUE") }.to raise_error(Bovem::Errors::Error)
|
176
|
+
expect(option.value).to be_false
|
177
|
+
expect(option.provided?).to be_false
|
178
|
+
|
179
|
+
expect(option.set("VALUE", false)).to be_false
|
180
|
+
expect(option.value).to be_false
|
181
|
+
expect(option.provided?).to be_false
|
182
|
+
|
183
|
+
option.set("A")
|
184
|
+
expect(option.value).to eq("A")
|
185
|
+
expect(option.provided?).to be_true
|
186
|
+
|
187
|
+
option.set("B")
|
188
|
+
expect(option.value).to eq("B")
|
189
|
+
expect(option.provided?).to be_true
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should match against an array validator" do
|
193
|
+
option.validator = ["A", "B"]
|
194
|
+
|
195
|
+
expect{ option.set("VALUE") }.to raise_error(Bovem::Errors::Error)
|
196
|
+
expect(option.value).to be_false
|
197
|
+
expect(option.provided?).to be_false
|
198
|
+
|
199
|
+
expect(option.set("VALUE", false)).to be_false
|
200
|
+
expect(option.value).to be_false
|
201
|
+
expect(option.provided?).to be_false
|
202
|
+
|
203
|
+
option.set("A")
|
204
|
+
expect(option.value).to eq("A")
|
205
|
+
expect(option.provided?).to be_true
|
206
|
+
|
207
|
+
option.set("B")
|
208
|
+
expect(option.value).to eq("B")
|
209
|
+
expect(option.provided?).to be_true
|
210
|
+
|
211
|
+
option.validator = [1, 2]
|
212
|
+
expect{ option.set("VALUE") }.to raise_error(Bovem::Errors::Error)
|
213
|
+
expect(option.value).to be_false
|
214
|
+
expect(option.provided?).to be_false
|
215
|
+
|
216
|
+
option.set(1)
|
217
|
+
expect(option.value).to eq(1)
|
218
|
+
expect(option.provided?).to be_true
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should match against a Proc validator" do
|
222
|
+
option.validator = ->(v) { v % 2 == 0 }
|
223
|
+
|
224
|
+
expect{ option.set(1) }.to raise_error(Bovem::Errors::Error)
|
225
|
+
expect(option.value).to be_false
|
226
|
+
expect(option.provided?).to be_false
|
227
|
+
|
228
|
+
option.set(2)
|
229
|
+
expect(option.value).to eq(2)
|
230
|
+
expect(option.provided?).to be_true
|
231
|
+
|
232
|
+
option.set(4)
|
233
|
+
expect(option.value).to eq(4)
|
234
|
+
expect(option.provided?).to be_true
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
describe "#execute_action" do
|
239
|
+
it "should execute action if provided" do
|
240
|
+
check = false
|
241
|
+
option = Bovem::Option.new("NAME") { |_, _| check = true }
|
242
|
+
option.execute_action
|
243
|
+
|
244
|
+
expect(check).to be_true
|
245
|
+
expect(option.provided?).to be_true
|
246
|
+
end
|
247
|
+
|
248
|
+
it "should result in a no-op if the action is missing or doesn't take enough arguments" do
|
249
|
+
option.execute_action
|
250
|
+
expect(option.provided?).to be_false
|
251
|
+
|
252
|
+
option = Bovem::Option.new("NAME")
|
253
|
+
expect(option.provided?).to be_false
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
describe "#requires_argument?" do
|
258
|
+
it "should check if the option requires argument" do
|
259
|
+
expect(Bovem::Option.new("NAME", []).requires_argument?).to be_false
|
260
|
+
expect(Bovem::Option.new("NAME", [], {type: String}).requires_argument?).to be_true
|
261
|
+
expect(Bovem::Option.new("NAME", [], {type: Integer}).requires_argument?).to be_true
|
262
|
+
expect(Bovem::Option.new("NAME", [], {type: Float}).requires_argument?).to be_true
|
263
|
+
expect(Bovem::Option.new("NAME", [], {type: Array}).requires_argument?).to be_true
|
264
|
+
expect(Bovem::Option.new("NAME").requires_argument?).to be_false
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe "#provided?" do
|
269
|
+
it "should check if the option was provided" do
|
270
|
+
expect(Bovem::Option.new("NAME").provided?).to be_false
|
271
|
+
option.set(true)
|
272
|
+
expect(option.provided?).to be_true
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
describe "#has_help?" do
|
277
|
+
it "should check if the option has a help" do
|
278
|
+
expect(Bovem::Option.new("NAME").has_help?).to be_false
|
279
|
+
expect(Bovem::Option.new("NAME", [], help: "HELP").has_help?).to be_true
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
describe "#value" do
|
284
|
+
it "should return the set value" do
|
285
|
+
option.default = "DEFAULT VALUE"
|
286
|
+
expect(option.value).to eq("DEFAULT VALUE")
|
287
|
+
|
288
|
+
option.default = nil
|
289
|
+
expect(option.value).to be_false
|
290
|
+
|
291
|
+
option.set(true)
|
292
|
+
expect(option.value).to be_true
|
293
|
+
|
294
|
+
option.set("VALUE")
|
295
|
+
expect(option.value).to eq("VALUE")
|
296
|
+
end
|
297
|
+
|
298
|
+
it "should return good defaults" do
|
299
|
+
expect(Bovem::Option.new("NAME").value).to be_false
|
300
|
+
expect(Bovem::Option.new("NAME", [], {type: Regexp}).value).to be_false
|
301
|
+
expect(Bovem::Option.new("NAME", [], {type: String}).value).to eq("")
|
302
|
+
expect(Bovem::Option.new("NAME", [], {type: Integer}).value).to eq(0)
|
303
|
+
expect(Bovem::Option.new("NAME", [], {type: Float}).value).to eq(0.0)
|
304
|
+
expect(Bovem::Option.new("NAME", [], {type: Array}).value).to eq([])
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|