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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/Gemfile +1 -1
  4. data/README.md +98 -2
  5. data/bovem.gemspec +3 -3
  6. data/doc/Bovem.html +25 -6
  7. data/doc/Bovem/Application.html +3057 -0
  8. data/doc/Bovem/Command.html +7031 -0
  9. data/doc/Bovem/CommandMethods.html +125 -0
  10. data/doc/Bovem/CommandMethods/Children.html +1285 -0
  11. data/doc/Bovem/CommandMethods/Help.html +209 -0
  12. data/doc/Bovem/Configuration.html +3 -3
  13. data/doc/Bovem/Console.html +8 -8
  14. data/doc/Bovem/ConsoleMethods.html +3 -3
  15. data/doc/Bovem/ConsoleMethods/Interactions.html +3 -3
  16. data/doc/Bovem/ConsoleMethods/Interactions/ClassMethods.html +3 -3
  17. data/doc/Bovem/ConsoleMethods/Logging.html +4 -4
  18. data/doc/Bovem/ConsoleMethods/Logging/ClassMethods.html +3 -3
  19. data/doc/Bovem/ConsoleMethods/Output.html +3 -3
  20. data/doc/Bovem/ConsoleMethods/StyleHandling.html +4 -4
  21. data/doc/Bovem/ConsoleMethods/StyleHandling/ClassMethods.html +8 -8
  22. data/doc/Bovem/Errors.html +4 -4
  23. data/doc/Bovem/Errors/Error.html +631 -0
  24. data/doc/Bovem/Errors/InvalidConfiguration.html +3 -3
  25. data/doc/Bovem/Errors/InvalidLogger.html +3 -3
  26. data/doc/Bovem/Localizer.html +376 -0
  27. data/doc/Bovem/Logger.html +64 -160
  28. data/doc/Bovem/Option.html +7009 -0
  29. data/doc/Bovem/Parser.html +276 -0
  30. data/doc/Bovem/ParserMethods.html +125 -0
  31. data/doc/Bovem/ParserMethods/General.html +134 -0
  32. data/doc/Bovem/ParserMethods/General/ClassMethods.html +574 -0
  33. data/doc/Bovem/Shell.html +8 -8
  34. data/doc/Bovem/ShellMethods.html +3 -3
  35. data/doc/Bovem/ShellMethods/Directories.html +3 -3
  36. data/doc/Bovem/ShellMethods/Execute.html +3 -3
  37. data/doc/Bovem/ShellMethods/General.html +3 -3
  38. data/doc/Bovem/ShellMethods/Read.html +3 -3
  39. data/doc/Bovem/ShellMethods/Write.html +3 -3
  40. data/doc/Bovem/Version.html +6 -6
  41. data/doc/_index.html +119 -11
  42. data/doc/class_list.html +1 -1
  43. data/doc/file.README.html +98 -5
  44. data/doc/frames.html +1 -1
  45. data/doc/index.html +98 -5
  46. data/doc/method_list.html +476 -26
  47. data/doc/top-level-namespace.html +3 -3
  48. data/lib/bovem.rb +8 -1
  49. data/lib/bovem/application.rb +158 -0
  50. data/lib/bovem/command.rb +529 -0
  51. data/lib/bovem/console.rb +8 -8
  52. data/lib/bovem/errors.rb +27 -0
  53. data/lib/bovem/localizer.rb +27 -0
  54. data/lib/bovem/logger.rb +2 -8
  55. data/lib/bovem/option.rb +250 -0
  56. data/lib/bovem/parser.rb +317 -0
  57. data/lib/bovem/shell.rb +2 -2
  58. data/lib/bovem/version.rb +3 -3
  59. data/locales/en.yml +33 -0
  60. data/locales/it.yml +33 -0
  61. data/spec/bovem/application_spec.rb +170 -0
  62. data/spec/bovem/command_spec.rb +526 -0
  63. data/spec/bovem/configuration_spec.rb +4 -4
  64. data/spec/bovem/console_spec.rb +22 -22
  65. data/spec/bovem/errors_spec.rb +18 -0
  66. data/spec/bovem/logger_spec.rb +22 -12
  67. data/spec/bovem/option_spec.rb +307 -0
  68. data/spec/bovem/parser_spec.rb +126 -0
  69. data/spec/bovem/shell_spec.rb +4 -4
  70. metadata +32 -5
@@ -0,0 +1,126 @@
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::Parser do
10
+ let(:application) {
11
+ Bovem::Application.new do
12
+ command :abc do
13
+ action do
14
+ end
15
+
16
+ command :def do
17
+ action do |command|
18
+ end
19
+ end
20
+ end
21
+
22
+ option :boolean, ["b", "boolean"], help: "BOOLEAN"
23
+ option :string, [nil, "string"], type: String, meta: "STRING", help: "STRING"
24
+ option :integer, ["i", nil], type: Integer, help: "INTEGER"
25
+ option :float, [nil, nil], type: Float, help: "FLOAT"
26
+ option :array, ["a", "array"], type: Array, help: "ARRAY"
27
+ option :choice, ["c", "choice"], type: String, help: "ARRAY", validator: ["yes", "no"]
28
+ option :regexp, ["r", "regexp"], type: String, help: "REGEXP", validator: /yes|no/i
29
+ option :action, ["A"] do |_, command|
30
+ p "[OPTION] BLOCK"
31
+ end
32
+ end
33
+ }
34
+
35
+ let(:command) {
36
+ c = Bovem::Command.new
37
+ c.application = application
38
+ c
39
+ }
40
+
41
+ describe ".smart_join" do
42
+ it "should correctly join arrays" do
43
+ expect(Bovem::Parser.smart_join([])).to eq("")
44
+ expect(Bovem::Parser.smart_join(["A"], ", ", " and ", nil)).to eq("A")
45
+ expect(Bovem::Parser.smart_join(1, ", ", " and ", nil)).to eq("1")
46
+ expect(Bovem::Parser.smart_join(["A", 1], ", ", " and ", nil)).to eq("A and 1")
47
+ expect(Bovem::Parser.smart_join(["A", 1, true], ", ", " and ", nil)).to eq("A, 1 and 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"], ", ", " and ", "@")).to eq("@A@, @B@ and @C@")
51
+ end
52
+ end
53
+
54
+ describe ".find_command" do
55
+ it "should find commands" do
56
+ args = ["A", "B", "C"]
57
+ s1 = command.command("abc")
58
+ s2 = command.command("abd")
59
+ s1.command("def")
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
67
+ end
68
+ end
69
+
70
+ describe ".parse" do
71
+ it "should instantiate a parser and then parse" do
72
+ expect(Bovem::Parser).to receive(:new).and_call_original
73
+ expect_any_instance_of(Bovem::Parser).to receive(:parse).with("COMMAND", "ARGS")
74
+ Bovem::Parser.parse("COMMAND", "ARGS")
75
+ end
76
+ end
77
+
78
+ describe "#parse" do
79
+ it "should iterate options" do
80
+ expect(application.options).to receive(:each_pair).exactly(2)
81
+ Bovem::Parser.parse(application, [])
82
+ end
83
+
84
+ it "should set good values" do
85
+ expect(application.options["boolean"]).to receive("set").with(true)
86
+ expect(application.options["string"]).to receive("set").with("A")
87
+ expect(application.options["integer"]).to receive("set").with(1)
88
+ expect(application.options["float"]).to receive("set").with(2.0)
89
+ expect(application.options["array"]).to receive("set").with(["B", "C"])
90
+ expect(application.options["choice"]).to receive("set").with("yes")
91
+ expect(application.options["regexp"]).to receive("set").with("no")
92
+ expect(application.options["action"]).to receive("execute_action")
93
+ Bovem::Parser.parse(application, ["-b", "-s", "A", "-i", "1", "-f", "2.0", "-a", "B,C", "-c", "yes", "-r", "no", "-A"])
94
+ end
95
+
96
+ it "should complain about invalid or additional values" do
97
+ expect { Bovem::Parser.parse(application, ["-b=f"]) }.to raise_error(Bovem::Errors::Error)
98
+ expect { Bovem::Parser.parse(application, ["-s"]) }.to raise_error(Bovem::Errors::Error)
99
+ expect { Bovem::Parser.parse(application, ["-i", "A"]) }.to raise_error(Bovem::Errors::Error)
100
+ expect { Bovem::Parser.parse(application, ["-f", "A"]) }.to raise_error(Bovem::Errors::Error)
101
+ expect { Bovem::Parser.parse(application, ["-c", "B"]) }.to raise_error(Bovem::Errors::Error)
102
+ expect { Bovem::Parser.parse(application, ["-r", "C"]) }.to raise_error(Bovem::Errors::Error)
103
+ expect { Bovem::Parser.parse(application, ["-R", "C"]) }.to raise_error(Bovem::Errors::Error)
104
+ application.option("R", [], {required: true})
105
+ expect { Bovem::Parser.parse(application, ["-b"]) }.to raise_error(Bovem::Errors::Error) # Because we're missing a required option
106
+ end
107
+
108
+ it "should complain about duplicate options" do
109
+ application.option(:boolean2)
110
+ expect { Bovem::Parser.parse(application, ["-b"]) }.to raise_error(Bovem::Errors::Error)
111
+ end
112
+
113
+ it "should return the command to execute" do
114
+ expect(Bovem::Parser.parse(application, ["a", "OTHER"])).to eq({name: "abc", args: ["OTHER"]})
115
+ expect(Bovem::Parser.parse(application, ["ab:d", "OTHER"])).to eq({name: "abc", args: ["d", "OTHER"]})
116
+ expect(Bovem::Parser.parse(application, ["abc", "d", "OTHER"])).to eq({name: "abc", args: ["d", "OTHER"]})
117
+ expect(Bovem::Parser.parse(application, ["d", "OTHER"])).to eq(nil)
118
+
119
+ application.clear_options
120
+ expect(Bovem::Parser.parse(application, ["a", "OTHER"])).to eq({name: "abc", args: ["OTHER"]})
121
+ expect(Bovem::Parser.parse(application, ["d:d", "OTHER"])).to eq(nil)
122
+ expect(Bovem::Parser.parse(application, ["d d", "OTHER"])).to eq(nil)
123
+ expect(Bovem::Parser.parse(application, ["d", "d", "OTHER"])).to eq(nil)
124
+ end
125
+ end
126
+ end
@@ -8,7 +8,7 @@ require "spec_helper"
8
8
 
9
9
  describe Bovem::Shell do
10
10
  let(:shell) {
11
- s = ::Bovem::Shell.new
11
+ s = Bovem::Shell.new
12
12
  s.i18n = :en
13
13
  s
14
14
  }
@@ -24,14 +24,14 @@ describe Bovem::Shell do
24
24
 
25
25
  describe ".instance" do
26
26
  it "should always return the same instance" do
27
- instance = ::Bovem::Shell.instance
28
- expect(::Bovem::Shell.instance).to be(instance)
27
+ instance = Bovem::Shell.instance
28
+ expect(Bovem::Shell.instance).to be(instance)
29
29
  end
30
30
  end
31
31
 
32
32
  describe "#initialize" do
33
33
  it "should correctly set defaults" do
34
- expect(shell.console).to eq(::Bovem::Console.instance)
34
+ expect(shell.console).to eq(Bovem::Console.instance)
35
35
  end
36
36
  end
37
37
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bovem
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shogun
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 3.3.1
19
+ version: 3.3.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 3.3.1
26
+ version: 3.3.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: open4
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.3.0
41
- description: A collection of utilities for developers.
41
+ description: A command line manager and a collection of utilities for developers.
42
42
  email:
43
43
  - shogun_panda@me.com
44
44
  executables: []
@@ -54,6 +54,11 @@ files:
54
54
  - Rakefile
55
55
  - bovem.gemspec
56
56
  - doc/Bovem.html
57
+ - doc/Bovem/Application.html
58
+ - doc/Bovem/Command.html
59
+ - doc/Bovem/CommandMethods.html
60
+ - doc/Bovem/CommandMethods/Children.html
61
+ - doc/Bovem/CommandMethods/Help.html
57
62
  - doc/Bovem/Configuration.html
58
63
  - doc/Bovem/Console.html
59
64
  - doc/Bovem/ConsoleMethods.html
@@ -65,9 +70,16 @@ files:
65
70
  - doc/Bovem/ConsoleMethods/StyleHandling.html
66
71
  - doc/Bovem/ConsoleMethods/StyleHandling/ClassMethods.html
67
72
  - doc/Bovem/Errors.html
73
+ - doc/Bovem/Errors/Error.html
68
74
  - doc/Bovem/Errors/InvalidConfiguration.html
69
75
  - doc/Bovem/Errors/InvalidLogger.html
76
+ - doc/Bovem/Localizer.html
70
77
  - doc/Bovem/Logger.html
78
+ - doc/Bovem/Option.html
79
+ - doc/Bovem/Parser.html
80
+ - doc/Bovem/ParserMethods.html
81
+ - doc/Bovem/ParserMethods/General.html
82
+ - doc/Bovem/ParserMethods/General/ClassMethods.html
71
83
  - doc/Bovem/Shell.html
72
84
  - doc/Bovem/ShellMethods.html
73
85
  - doc/Bovem/ShellMethods/Directories.html
@@ -91,17 +103,27 @@ files:
91
103
  - doc/method_list.html
92
104
  - doc/top-level-namespace.html
93
105
  - lib/bovem.rb
106
+ - lib/bovem/application.rb
107
+ - lib/bovem/command.rb
94
108
  - lib/bovem/configuration.rb
95
109
  - lib/bovem/console.rb
96
110
  - lib/bovem/errors.rb
111
+ - lib/bovem/localizer.rb
97
112
  - lib/bovem/logger.rb
113
+ - lib/bovem/option.rb
114
+ - lib/bovem/parser.rb
98
115
  - lib/bovem/shell.rb
99
116
  - lib/bovem/version.rb
100
117
  - locales/en.yml
101
118
  - locales/it.yml
119
+ - spec/bovem/application_spec.rb
120
+ - spec/bovem/command_spec.rb
102
121
  - spec/bovem/configuration_spec.rb
103
122
  - spec/bovem/console_spec.rb
123
+ - spec/bovem/errors_spec.rb
104
124
  - spec/bovem/logger_spec.rb
125
+ - spec/bovem/option_spec.rb
126
+ - spec/bovem/parser_spec.rb
105
127
  - spec/bovem/shell_spec.rb
106
128
  - spec/coverage_helper.rb
107
129
  - spec/spec_helper.rb
@@ -127,11 +149,16 @@ rubyforge_project: bovem
127
149
  rubygems_version: 2.0.6
128
150
  signing_key:
129
151
  specification_version: 4
130
- summary: A collection of utilities for developers.
152
+ summary: A command line manager and a collection of utilities for developers.
131
153
  test_files:
154
+ - spec/bovem/application_spec.rb
155
+ - spec/bovem/command_spec.rb
132
156
  - spec/bovem/configuration_spec.rb
133
157
  - spec/bovem/console_spec.rb
158
+ - spec/bovem/errors_spec.rb
134
159
  - spec/bovem/logger_spec.rb
160
+ - spec/bovem/option_spec.rb
161
+ - spec/bovem/parser_spec.rb
135
162
  - spec/bovem/shell_spec.rb
136
163
  - spec/coverage_helper.rb
137
164
  - spec/spec_helper.rb