bovem 2.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -6
- data/README.md +1 -0
- data/bovem.gemspec +1 -1
- data/doc/Bovem.html +5 -5
- data/doc/Bovem/Configuration.html +21 -157
- data/doc/Bovem/Console.html +39 -39
- data/doc/Bovem/ConsoleMethods.html +5 -5
- data/doc/Bovem/ConsoleMethods/Interactions.html +21 -21
- data/doc/Bovem/ConsoleMethods/Interactions/ClassMethods.html +9 -9
- data/doc/Bovem/ConsoleMethods/Logging.html +71 -73
- data/doc/Bovem/ConsoleMethods/Logging/ClassMethods.html +9 -9
- data/doc/Bovem/ConsoleMethods/Output.html +20 -28
- data/doc/Bovem/ConsoleMethods/StyleHandling.html +5 -5
- data/doc/Bovem/ConsoleMethods/StyleHandling/ClassMethods.html +7 -7
- data/doc/Bovem/Errors.html +5 -5
- data/doc/Bovem/Errors/InvalidConfiguration.html +5 -5
- data/doc/Bovem/Errors/InvalidLogger.html +5 -5
- data/doc/Bovem/Logger.html +126 -69
- data/doc/Bovem/Shell.html +16 -16
- data/doc/Bovem/ShellMethods.html +5 -5
- data/doc/Bovem/ShellMethods/Directories.html +10 -12
- data/doc/Bovem/ShellMethods/Execute.html +7 -7
- data/doc/Bovem/ShellMethods/General.html +7 -7
- data/doc/Bovem/ShellMethods/Read.html +7 -7
- data/doc/Bovem/ShellMethods/Write.html +7 -7
- data/doc/Bovem/Version.html +7 -7
- data/doc/_index.html +6 -6
- data/doc/class_list.html +3 -2
- data/doc/file.README.html +7 -6
- data/doc/file_list.html +2 -1
- data/doc/frames.html +1 -1
- data/doc/index.html +7 -6
- data/doc/js/full_list.js +7 -2
- data/doc/method_list.html +72 -183
- data/doc/top-level-namespace.html +5 -5
- data/lib/bovem.rb +1 -1
- data/lib/bovem/configuration.rb +11 -33
- data/lib/bovem/console.rb +34 -39
- data/lib/bovem/logger.rb +6 -9
- data/lib/bovem/shell.rb +25 -26
- data/lib/bovem/version.rb +2 -2
- data/spec/bovem/configuration_spec.rb +7 -22
- data/spec/bovem/console_spec.rb +1 -1
- data/spec/bovem/shell_spec.rb +9 -10
- data/spec/coverage_helper.rb +3 -0
- metadata +5 -5
@@ -6,13 +6,13 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.8.
|
9
|
+
— Documentation by YARD 0.8.6.2
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
13
|
-
<link rel="stylesheet" href="css/style.css" type="text/css"
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
14
14
|
|
15
|
-
<link rel="stylesheet" href="css/common.css" type="text/css"
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
16
16
|
|
17
17
|
<script type="text/javascript" charset="utf-8">
|
18
18
|
hasFrames = window.top.frames.main ? true : false;
|
@@ -103,9 +103,9 @@
|
|
103
103
|
</div>
|
104
104
|
|
105
105
|
<div id="footer">
|
106
|
-
Generated on
|
106
|
+
Generated on Sun Jul 14 14:51:50 2013 by
|
107
107
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
108
|
-
0.8.
|
108
|
+
0.8.6.2 (ruby-1.9.3).
|
109
109
|
</div>
|
110
110
|
|
111
111
|
</body>
|
data/lib/bovem.rb
CHANGED
data/lib/bovem/configuration.rb
CHANGED
@@ -18,9 +18,7 @@ module Bovem
|
|
18
18
|
# # Configuration file
|
19
19
|
# config.property = "VALUE"
|
20
20
|
# ```
|
21
|
-
class Configuration
|
22
|
-
include Lazier::I18n
|
23
|
-
|
21
|
+
class Configuration < Lazier::Configuration
|
24
22
|
# Creates a new configuration.
|
25
23
|
#
|
26
24
|
# A configuration file is a plain Ruby file with a top-level {Configuration config} object.
|
@@ -30,8 +28,10 @@ module Bovem
|
|
30
28
|
# @param logger [Logger] The logger to use for notifications.
|
31
29
|
# @see #parse
|
32
30
|
def initialize(file = nil, overrides = {}, logger = nil)
|
33
|
-
|
34
|
-
|
31
|
+
super()
|
32
|
+
|
33
|
+
i18n_setup(:bovem, ::File.absolute_path(::Pathname.new(::File.dirname(__FILE__)).to_s + "/../../locales/"))
|
34
|
+
parse(file, overrides, logger)
|
35
35
|
end
|
36
36
|
|
37
37
|
# Parses a configuration file.
|
@@ -54,36 +54,16 @@ module Bovem
|
|
54
54
|
if File.readable?(file) then
|
55
55
|
read_configuration_file(file, logger)
|
56
56
|
else
|
57
|
-
raise Bovem::Errors::InvalidConfiguration.new(
|
57
|
+
raise Bovem::Errors::InvalidConfiguration.new(i18n.configuration.not_found(file))
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
# Apply overrides
|
62
|
-
if overrides.is_a?(::Hash)
|
63
|
-
overrides.each_pair do |k, v|
|
64
|
-
self.send("#{k}=", v) if self.respond_to?("#{k}=")
|
65
|
-
end
|
66
|
-
end
|
62
|
+
overrides.each_pair { |k, v| send("#{k}=", v) if self.respond_to?("#{k}=") } if overrides.is_a?(::Hash)
|
67
63
|
|
68
64
|
self
|
69
65
|
end
|
70
66
|
|
71
|
-
# Defines a new property for the configuration.
|
72
|
-
#
|
73
|
-
# @param name [Symbol] The name of the property.
|
74
|
-
# @param options [Hash] A set of options for the property. Currently, only `:default` (which holds the default value) is supported.
|
75
|
-
def self.property(name, options = {})
|
76
|
-
options = {} if !options.is_a?(::Hash)
|
77
|
-
|
78
|
-
define_method(name.to_s) do
|
79
|
-
self.instance_variable_get("@#{name}") || options[:default]
|
80
|
-
end
|
81
|
-
|
82
|
-
define_method("#{name}=") do |value|
|
83
|
-
self.instance_variable_set("@#{name}", value)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
67
|
private
|
88
68
|
# Reads a configuration file.
|
89
69
|
#
|
@@ -92,11 +72,11 @@ module Bovem
|
|
92
72
|
def read_configuration_file(file, logger)
|
93
73
|
begin
|
94
74
|
# Open the file
|
95
|
-
path = file =~ /^#{File::SEPARATOR}/ ? file : ::Pathname.new(file).realpath
|
96
|
-
logger.info(
|
75
|
+
path = file =~ /^#{File::SEPARATOR}/ ? file : ::Pathname.new(file).realpath
|
76
|
+
logger.info(i18n.configuration.using(path)) if logger
|
97
77
|
eval_file(path)
|
98
78
|
rescue Exception
|
99
|
-
raise Bovem::Errors::InvalidConfiguration.new(
|
79
|
+
raise Bovem::Errors::InvalidConfiguration.new(i18n.configuration.invalid(file))
|
100
80
|
end
|
101
81
|
end
|
102
82
|
|
@@ -104,9 +84,7 @@ module Bovem
|
|
104
84
|
#
|
105
85
|
# @param path [String] The file to read.
|
106
86
|
def eval_file(path)
|
107
|
-
|
108
|
-
eval(::File.read(path))
|
109
|
-
end
|
87
|
+
tap { |config| eval(::File.read(path)) }
|
110
88
|
end
|
111
89
|
end
|
112
90
|
end
|
data/lib/bovem/console.rb
CHANGED
@@ -44,7 +44,7 @@ module Bovem
|
|
44
44
|
# @param styles [String] The styles to parse.
|
45
45
|
# @return [String] A string with ANSI color codes.
|
46
46
|
def parse_styles(styles)
|
47
|
-
styles.split(/\s*[\s,-]\s*/).collect { |s|
|
47
|
+
styles.split(/\s*[\s,-]\s*/).collect { |s| parse_style(s) }.join("")
|
48
48
|
end
|
49
49
|
|
50
50
|
#
|
@@ -82,7 +82,7 @@ module Bovem
|
|
82
82
|
stack.pop
|
83
83
|
plain || stack.blank? ? "" : ::Bovem::Console.parse_styles(stack.last)
|
84
84
|
else
|
85
|
-
styles = $3
|
85
|
+
styles = $3.ensure_string
|
86
86
|
replacement = plain ? "" : ::Bovem::Console.parse_styles(styles)
|
87
87
|
|
88
88
|
if replacement.length > 0 then
|
@@ -133,9 +133,9 @@ module Bovem
|
|
133
133
|
# @return [Fixnum] The new indentation width.
|
134
134
|
def with_indentation(width = 3, is_absolute = false)
|
135
135
|
old = @indentation
|
136
|
-
|
136
|
+
set_indentation(width, is_absolute)
|
137
137
|
yield
|
138
|
-
|
138
|
+
set_indentation(old, true)
|
139
139
|
|
140
140
|
@indentation
|
141
141
|
end
|
@@ -149,7 +149,7 @@ module Bovem
|
|
149
149
|
if width.to_integer <= 0 then
|
150
150
|
message
|
151
151
|
else
|
152
|
-
width = (width == true || width.to_integer < 0 ?
|
152
|
+
width = (width == true || width.to_integer < 0 ? line_width : width.to_integer)
|
153
153
|
|
154
154
|
message.split("\n").collect { |line|
|
155
155
|
line.length > width ? line.gsub(/(.{1,#{width}})(\s+|$)/, "\\1\n").strip : line
|
@@ -191,11 +191,11 @@ module Bovem
|
|
191
191
|
def format(message, suffix = "\n", indent = true, wrap = true, plain = false)
|
192
192
|
rv = message
|
193
193
|
|
194
|
-
rv =
|
194
|
+
rv = replace_markers(rv, plain) # Replace markers
|
195
195
|
|
196
196
|
# Compute the real width available for the screen, if we both indent and wrap
|
197
197
|
if wrap.is_a?(TrueClass) then
|
198
|
-
wrap =
|
198
|
+
wrap = line_width
|
199
199
|
|
200
200
|
if indent.is_a?(TrueClass) then
|
201
201
|
wrap -= @indentation
|
@@ -205,9 +205,7 @@ module Bovem
|
|
205
205
|
end
|
206
206
|
end
|
207
207
|
|
208
|
-
rv =
|
209
|
-
rv = self.indent(rv, indent) # Indent
|
210
|
-
|
208
|
+
rv = indent(wrap(rv, wrap), indent) # Wrap & Indent
|
211
209
|
rv += suffix.ensure_string if suffix # Add the suffix
|
212
210
|
rv
|
213
211
|
end
|
@@ -220,17 +218,15 @@ module Bovem
|
|
220
218
|
# @param plain [Boolean] If ignore color markers into the message.
|
221
219
|
# @return [String] The formatted message.
|
222
220
|
def format_right(message, width = true, go_up = true, plain = false)
|
223
|
-
message =
|
224
|
-
|
225
|
-
rv = go_up ? "\e[A" : ""
|
221
|
+
message = replace_markers(message, plain)
|
226
222
|
|
227
|
-
width = (width == true || width.to_integer < 1 ?
|
223
|
+
width = (width == true || width.to_integer < 1 ? line_width : to_integer)
|
228
224
|
|
229
225
|
# Get padding
|
230
226
|
padding = width - message.to_s.gsub(/(\e\[[0-9]*[a-z]?)|(\\n)/i, "").length
|
231
227
|
|
232
228
|
# Return
|
233
|
-
|
229
|
+
"#{go_up ? "\e[A" : ""}\e[0G\e[#{padding}C#{message}"
|
234
230
|
end
|
235
231
|
end
|
236
232
|
|
@@ -259,7 +255,7 @@ module Bovem
|
|
259
255
|
#
|
260
256
|
# @see #format
|
261
257
|
def write(message, suffix = "\n", indent = true, wrap = false, plain = false, print = true)
|
262
|
-
rv =
|
258
|
+
rv = format(message, suffix, indent, wrap, plain)
|
263
259
|
Kernel.puts(rv) if print
|
264
260
|
rv
|
265
261
|
end
|
@@ -276,7 +272,7 @@ module Bovem
|
|
276
272
|
#
|
277
273
|
# @see #format
|
278
274
|
def write_banner_aligned(message, suffix = "\n", indent = true, wrap = false, plain = false, print = true)
|
279
|
-
|
275
|
+
write((" " * (::Bovem::Console.min_banner_length + 3)) + message.ensure_string, suffix, indent, wrap, plain, print)
|
280
276
|
end
|
281
277
|
|
282
278
|
# Writes a status to the output. Valid values are `:ok`, `:pass`, `:fail`, `:warn`.
|
@@ -299,12 +295,12 @@ module Bovem
|
|
299
295
|
rv = statuses[status]
|
300
296
|
|
301
297
|
if print then
|
302
|
-
banner =
|
298
|
+
banner = get_banner(rv[:label], rv[:color])
|
303
299
|
|
304
300
|
if right then
|
305
|
-
Kernel.puts
|
301
|
+
Kernel.puts(format_right(banner + " ", true, go_up, plain))
|
306
302
|
else
|
307
|
-
Kernel.puts
|
303
|
+
Kernel.puts(format(banner + " ", "\n", true, true, plain))
|
308
304
|
end
|
309
305
|
end
|
310
306
|
|
@@ -340,9 +336,9 @@ module Bovem
|
|
340
336
|
#
|
341
337
|
# @see #format
|
342
338
|
def begin(message, suffix = "\n", indent = true, wrap = false, plain = false, indented_banner = false, full_colored = false, print = true)
|
343
|
-
banner =
|
344
|
-
message =
|
345
|
-
|
339
|
+
banner = get_banner("*", "bright green", full_colored)
|
340
|
+
message = indent(message, indented_banner ? 0 : indent)
|
341
|
+
write(banner + " " + message, suffix, indented_banner ? indent : 0, wrap, plain, print)
|
346
342
|
end
|
347
343
|
|
348
344
|
# Writes a message prepending a red banner and then quits the application.
|
@@ -359,7 +355,7 @@ module Bovem
|
|
359
355
|
#
|
360
356
|
# @see #format
|
361
357
|
def fatal(message, suffix = "\n", indent = true, wrap = false, plain = false, indented_banner = false, full_colored = false, return_code = -1, print = true)
|
362
|
-
|
358
|
+
error(message, suffix, indent, wrap, plain, indented_banner, full_colored, print)
|
363
359
|
Kernel.exit(return_code.to_integer(-1))
|
364
360
|
end
|
365
361
|
|
@@ -379,9 +375,9 @@ module Bovem
|
|
379
375
|
def info(message, suffix = "\n", indent = true, wrap = false, plain = false, indented_banner = false, full_colored = false, print = true, *banner)
|
380
376
|
banner = banner.ensure_array.flatten
|
381
377
|
banner = ["I", "bright cyan"] if banner.blank?
|
382
|
-
banner =
|
383
|
-
message =
|
384
|
-
|
378
|
+
banner = get_banner(banner[0], banner[1], full_colored)
|
379
|
+
message = indent(message, indented_banner ? 0 : indent)
|
380
|
+
write(banner + " " + message, suffix, indented_banner ? indent : 0, wrap, plain, print)
|
385
381
|
end
|
386
382
|
|
387
383
|
# Writes a message prepending a magenta banner.
|
@@ -397,7 +393,7 @@ module Bovem
|
|
397
393
|
#
|
398
394
|
# @see #format
|
399
395
|
def debug(message, suffix = "\n", indent = true, wrap = false, plain = false, indented_banner = false, full_colored = false, print = true)
|
400
|
-
|
396
|
+
info(message, suffix, indent, wrap, plain, indented_banner, full_colored, print, ["D", "bright magenta"])
|
401
397
|
end
|
402
398
|
|
403
399
|
# Writes a message prepending a yellow banner.
|
@@ -413,8 +409,7 @@ module Bovem
|
|
413
409
|
#
|
414
410
|
# @see #format
|
415
411
|
def warn(message, suffix = "\n", indent = true, wrap = false, plain = false, indented_banner = false, full_colored = false, print = true)
|
416
|
-
|
417
|
-
self.info(message, suffix, indent, wrap, plain, indented_banner, full_colored, print, warn_banner)
|
412
|
+
info(message, suffix, indent, wrap, plain, indented_banner, full_colored, print, ["W", "bright yellow"])
|
418
413
|
end
|
419
414
|
|
420
415
|
# Writes a message prepending a red banner.
|
@@ -430,7 +425,7 @@ module Bovem
|
|
430
425
|
#
|
431
426
|
# @see #format
|
432
427
|
def error(message, suffix = "\n", indent = true, wrap = false, plain = false, indented_banner = false, full_colored = false, print = true)
|
433
|
-
|
428
|
+
info(message, suffix, indent, wrap, plain, indented_banner, full_colored, print, ["E", "bright red"])
|
434
429
|
end
|
435
430
|
end
|
436
431
|
|
@@ -466,7 +461,7 @@ module Bovem
|
|
466
461
|
handle_reply(reply)
|
467
462
|
end
|
468
463
|
end
|
469
|
-
rescue Interrupt
|
464
|
+
rescue Interrupt
|
470
465
|
default_value
|
471
466
|
end
|
472
467
|
end
|
@@ -487,7 +482,7 @@ module Bovem
|
|
487
482
|
status = nil
|
488
483
|
|
489
484
|
self.begin(message, suffix, indent, wrap, plain, indented_banner, full_colored) if message.present?
|
490
|
-
|
485
|
+
with_indentation(block_indentation, block_indentation_absolute) do
|
491
486
|
rv = block_given? ? yield.ensure_array : [:ok] # Execute block
|
492
487
|
exit_task(message, rv, plain) # Handle task exit
|
493
488
|
status = rv[0] # Return value
|
@@ -505,10 +500,10 @@ module Bovem
|
|
505
500
|
# @param plain [Boolean] If ignore color markers into the message.
|
506
501
|
def exit_task(message, rv, plain)
|
507
502
|
if rv[0] == :fatal then
|
508
|
-
|
503
|
+
status(:fail, plain)
|
509
504
|
exit(rv.length > 1 ? rv[1].to_integer : -1)
|
510
505
|
else
|
511
|
-
|
506
|
+
status(rv[0], plain) if message.present?
|
512
507
|
end
|
513
508
|
end
|
514
509
|
|
@@ -518,7 +513,7 @@ module Bovem
|
|
518
513
|
# @return [String|nil] The prompt to use or `nil`, if no message must be prompted.
|
519
514
|
def sanitize_prompt(prompt)
|
520
515
|
if prompt.present?
|
521
|
-
(prompt.is_a?(TrueClass) ?
|
516
|
+
(prompt.is_a?(TrueClass) ? i18n.console.prompt : prompt).gsub(/:?\s*$/, "") + ": "
|
522
517
|
else
|
523
518
|
nil
|
524
519
|
end
|
@@ -540,7 +535,7 @@ module Bovem
|
|
540
535
|
# @return [Object] The read value.
|
541
536
|
def read_input_value(prompt, echo, default_value = nil)
|
542
537
|
if prompt then
|
543
|
-
Kernel.print
|
538
|
+
Kernel.print(format(prompt, false, false))
|
544
539
|
$stdout.flush
|
545
540
|
end
|
546
541
|
|
@@ -573,7 +568,7 @@ module Bovem
|
|
573
568
|
if reply then
|
574
569
|
throw(:reply, reply)
|
575
570
|
else
|
576
|
-
|
571
|
+
write(i18n.console.unknown_reply, false, false)
|
577
572
|
end
|
578
573
|
end
|
579
574
|
end
|
@@ -606,7 +601,7 @@ module Bovem
|
|
606
601
|
def initialize
|
607
602
|
@indentation = 0
|
608
603
|
@indentation_string = " "
|
609
|
-
|
604
|
+
i18n_setup(:bovem, ::File.absolute_path(::Pathname.new(::File.dirname(__FILE__)).to_s + "/../../locales/"))
|
610
605
|
end
|
611
606
|
|
612
607
|
# Get the width of the terminal.
|
data/lib/bovem/logger.rb
CHANGED
@@ -37,17 +37,14 @@ module Bovem
|
|
37
37
|
# @param formatter [Proc] The formatter to use for logging.
|
38
38
|
# @return [Logger] The new logger.
|
39
39
|
def self.create(file = nil, level = Logger::INFO, formatter = nil)
|
40
|
-
file ||= self.default_file
|
41
|
-
|
42
40
|
begin
|
43
|
-
rv =
|
41
|
+
rv = new(get_real_file(file || default_file))
|
42
|
+
rv.level = level.to_integer
|
43
|
+
rv.formatter = formatter || default_formatter
|
44
|
+
rv
|
44
45
|
rescue
|
45
46
|
raise Bovem::Errors::InvalidLogger
|
46
47
|
end
|
47
|
-
|
48
|
-
rv.level = level.to_i
|
49
|
-
rv.formatter = formatter || self.default_formatter
|
50
|
-
rv
|
51
48
|
end
|
52
49
|
|
53
50
|
# Translates a file to standard input or standard output in some special cases.
|
@@ -81,14 +78,14 @@ module Bovem
|
|
81
78
|
else :white
|
82
79
|
end
|
83
80
|
|
84
|
-
header = ::Bovem::Console.replace_markers("{mark=bright-#{color}}[%s T+%0.5f] %s:{/mark}" %[datetime.strftime("%Y/%b/%d %H:%M:%S"), [datetime.to_f -
|
81
|
+
header = ::Bovem::Console.replace_markers("{mark=bright-#{color}}[%s T+%0.5f] %s:{/mark}" %[datetime.strftime("%Y/%b/%d %H:%M:%S"), [datetime.to_f - start_time.to_f, 0].max, severity.rjust(5)])
|
85
82
|
"%s %s\n" % [header, msg]
|
86
83
|
}
|
87
84
|
end
|
88
85
|
|
89
86
|
# The log time of the first logger. This allows to show a `T+0.1234` information into the log.
|
90
87
|
# @return [Time] The log time of the first logger.
|
91
|
-
def
|
88
|
+
def start_time
|
92
89
|
@start_time ||= ::Time.now
|
93
90
|
end
|
94
91
|
end
|
data/lib/bovem/shell.rb
CHANGED
@@ -34,7 +34,7 @@ module Bovem
|
|
34
34
|
# @param fatal [Boolean] If quit in case of fatal errors.
|
35
35
|
# @return [Array] Variables for error handling
|
36
36
|
def setup_error_handling(entries, fatal)
|
37
|
-
[fatal ? :fatal : :error,
|
37
|
+
[fatal ? :fatal : :error, i18n.shell, entries.length == 1 ? entries[0] : entries]
|
38
38
|
end
|
39
39
|
|
40
40
|
# Shows errors when a directory creation failed.
|
@@ -43,7 +43,7 @@ module Bovem
|
|
43
43
|
# @param entries [Array] The list of entries which failed.
|
44
44
|
# @param fatal [Boolean] If quit in case of fatal errors.
|
45
45
|
def show_general_failure(e, general_error, entries, fatal)
|
46
|
-
locale =
|
46
|
+
locale = i18n.shell
|
47
47
|
|
48
48
|
@console.error(locale.send(general_error))
|
49
49
|
@console.with_indentation(11) do
|
@@ -65,7 +65,7 @@ module Bovem
|
|
65
65
|
def check(path, tests)
|
66
66
|
path = path.ensure_string
|
67
67
|
|
68
|
-
tests.ensure_array.all? {|test|
|
68
|
+
tests.ensure_array.all? { |test|
|
69
69
|
# Adjust test name
|
70
70
|
test = test.ensure_string.strip
|
71
71
|
|
@@ -101,7 +101,7 @@ module Bovem
|
|
101
101
|
patterns = normalize_patterns(patterns, by_extension, case_sensitive)
|
102
102
|
|
103
103
|
directories.each do |directory|
|
104
|
-
if
|
104
|
+
if check(directory, [:directory, :readable, :executable]) then
|
105
105
|
Find.find(directory) do |entry|
|
106
106
|
found = patterns.blank? ? true : match_pattern(entry, patterns, by_extension, &block)
|
107
107
|
|
@@ -161,7 +161,7 @@ module Bovem
|
|
161
161
|
# @param fatal [Boolean] If quit in case of fatal errors.
|
162
162
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
163
163
|
def copy(src, dst, run = true, show_errors = false, fatal = true)
|
164
|
-
|
164
|
+
copy_or_move(src, dst, :copy, run, show_errors, fatal)
|
165
165
|
end
|
166
166
|
|
167
167
|
# Moves a set of files or directory to another location.
|
@@ -173,7 +173,7 @@ module Bovem
|
|
173
173
|
# @param fatal [Boolean] If quit in case of fatal errors.
|
174
174
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
175
175
|
def move(src, dst, run = true, show_errors = false, fatal = true)
|
176
|
-
|
176
|
+
copy_or_move(src, dst, :move, run, show_errors, fatal)
|
177
177
|
end
|
178
178
|
|
179
179
|
# Copies or moves a set of files or directory to another location.
|
@@ -215,7 +215,7 @@ module Bovem
|
|
215
215
|
single = !src.is_a?(Array)
|
216
216
|
src = single ? File.expand_path(src) : src.collect {|s| File.expand_path(s) }
|
217
217
|
|
218
|
-
[operation,
|
218
|
+
[operation, i18n.shell.send(operation), single, src, File.expand_path(dst.ensure_string)]
|
219
219
|
end
|
220
220
|
|
221
221
|
# Shows which copy or move operation are going to executed.
|
@@ -225,7 +225,7 @@ module Bovem
|
|
225
225
|
# @param src [String|Array] The entries to copy or move. If is an Array, `dst` is assumed to be a directory.
|
226
226
|
# @param dst [String] The destination. **Any existing entries will be overwritten.** Any required directory will be created.
|
227
227
|
def dry_run_copy_or_move(single, operation, src, dst)
|
228
|
-
locale =
|
228
|
+
locale = i18n.shell
|
229
229
|
|
230
230
|
if single then
|
231
231
|
@console.warn(locale.copy_move_single_dry(operation))
|
@@ -251,14 +251,14 @@ module Bovem
|
|
251
251
|
# @return [String] The prepared destination.
|
252
252
|
def prepare_destination(single, src, dst, operation, show_errors, fatal)
|
253
253
|
dst_dir = single ? File.dirname(dst) : dst
|
254
|
-
has_dir =
|
254
|
+
has_dir = check(dst_dir, :dir)
|
255
255
|
|
256
256
|
# Create directory
|
257
|
-
has_dir =
|
257
|
+
has_dir = create_directories(dst_dir, 0755, true, show_errors, fatal) if !has_dir
|
258
258
|
throw(:rv, false) if !has_dir
|
259
259
|
|
260
|
-
if single &&
|
261
|
-
@console.send(fatal ? :fatal : :error,
|
260
|
+
if single && check(dst, :dir) then
|
261
|
+
@console.send(fatal ? :fatal : :error, i18n.shell.copy_move_single_to_directory(operation, src, dst))
|
262
262
|
throw(:rv, false)
|
263
263
|
end
|
264
264
|
|
@@ -273,8 +273,8 @@ module Bovem
|
|
273
273
|
def check_sources(src, operation, fatal)
|
274
274
|
# Check that every file is existing
|
275
275
|
src.ensure_array.each do |s|
|
276
|
-
if !
|
277
|
-
@console.send(fatal ? :fatal : :error,
|
276
|
+
if !check(s, :exists) then
|
277
|
+
@console.send(fatal ? :fatal : :error, i18n.shell.copy_move_src_not_found(operation, s))
|
278
278
|
throw(:rv, false)
|
279
279
|
end
|
280
280
|
end
|
@@ -291,7 +291,7 @@ module Bovem
|
|
291
291
|
# @param show_errors [Boolean] If show errors.
|
292
292
|
# @param fatal [Boolean] If quit in case of fatal errors.
|
293
293
|
def execute_copy_or_move(src, dst, dst_dir, single, operation, operation_s, show_errors, fatal)
|
294
|
-
locale =
|
294
|
+
locale = i18n.shell
|
295
295
|
|
296
296
|
begin
|
297
297
|
FileUtils.send(operation == :move ? :mv : :cp_r, src, dst, {noop: false, verbose: false})
|
@@ -349,7 +349,7 @@ module Bovem
|
|
349
349
|
def run(command, message = nil, run = true, show_exit = true, show_output = false, show_command = false, fatal = true)
|
350
350
|
rv = {status: 0, output: ""}
|
351
351
|
command = command.ensure_string
|
352
|
-
locale =
|
352
|
+
locale = i18n.shell
|
353
353
|
|
354
354
|
# Show the command
|
355
355
|
@console.begin(message) if message.present?
|
@@ -376,7 +376,7 @@ module Bovem
|
|
376
376
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
377
377
|
def delete(files, run = true, show_errors = false, fatal = true)
|
378
378
|
rv = true
|
379
|
-
locale =
|
379
|
+
locale = i18n.shell
|
380
380
|
files = files.ensure_array.compact.collect {|f| File.expand_path(f.ensure_string) }
|
381
381
|
|
382
382
|
if !run then
|
@@ -410,7 +410,7 @@ module Bovem
|
|
410
410
|
def execute_command(command, show_command, show_output)
|
411
411
|
output = ""
|
412
412
|
|
413
|
-
@console.info(
|
413
|
+
@console.info(i18n.shell.run(command)) if show_command
|
414
414
|
status = ::Open4::popen4(command + " 2>&1") { |_, _, stdout, _|
|
415
415
|
stdout.each_line do |line|
|
416
416
|
output << line
|
@@ -431,8 +431,7 @@ module Bovem
|
|
431
431
|
# @param show_messages [Boolean] Show informative messages about working directory changes.
|
432
432
|
# @return [Boolean] `true` if the directory was valid and the code executed, `false` otherwise.
|
433
433
|
def within_directory(directory, restore = true, show_messages = false)
|
434
|
-
|
435
|
-
locale = self.i18n.shell
|
434
|
+
locale = i18n.shell
|
436
435
|
|
437
436
|
directory = File.expand_path(directory.ensure_string)
|
438
437
|
original = Dir.pwd
|
@@ -479,7 +478,7 @@ module Bovem
|
|
479
478
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
480
479
|
def enter_directory(directory, show_message, message)
|
481
480
|
begin
|
482
|
-
raise ArgumentError if !
|
481
|
+
raise ArgumentError if !check(directory, [:directory, :executable])
|
483
482
|
@console.info(message) if show_message
|
484
483
|
Dir.chdir(directory)
|
485
484
|
true
|
@@ -491,7 +490,7 @@ module Bovem
|
|
491
490
|
# Show which directory are going to be created.
|
492
491
|
# @param directories [Array] The list of directories to create.
|
493
492
|
def dry_run_directory_creation(directories)
|
494
|
-
@console.warn(
|
493
|
+
@console.warn(i18n.shell.mkdir_dry)
|
495
494
|
@console.with_indentation(11) do
|
496
495
|
directories.each do |directory| @console.write(directory) end
|
497
496
|
end
|
@@ -507,12 +506,12 @@ module Bovem
|
|
507
506
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
508
507
|
def try_create_directory(directory, mode, fatal, directories, show_errors)
|
509
508
|
rv = false
|
510
|
-
locale =
|
509
|
+
locale = i18n.shell
|
511
510
|
|
512
511
|
# Perform tests
|
513
|
-
if
|
512
|
+
if check(directory, :directory) then
|
514
513
|
@console.send(fatal ? :fatal : :error, locale.mkdir_existing(directory))
|
515
|
-
elsif
|
514
|
+
elsif check(directory, :exist) then
|
516
515
|
@console.send(fatal ? :fatal : :error, locale.mkdir_file(directory))
|
517
516
|
else
|
518
517
|
rv = create_directory(directory, mode, fatal, directories, show_errors)
|
@@ -568,7 +567,7 @@ module Bovem
|
|
568
567
|
# Initializes a new Shell.
|
569
568
|
def initialize
|
570
569
|
@console = ::Bovem::Console.instance
|
571
|
-
|
570
|
+
i18n_setup(:bovem, ::File.absolute_path(::Pathname.new(::File.dirname(__FILE__)).to_s + "/../../locales/"))
|
572
571
|
end
|
573
572
|
end
|
574
573
|
end
|