inreplace: support for audit arg in non-block form

Provides feature parity between the block and non-block forms of
inreplace by creating a four-argument version of the non-block form,
where the fourth argument is an optional Boolean value, defaulting to
true, which specifies whether a failed inreplace should cause an
InreplaceError error to be raised. The fourth argument is passed along
to StringInreplaceExtension#gsub!, which already supports an optional
audit_result argument.

This resolves the Catch-22 that single replacements aren't permissible
in the block form (in that they now cause `brew audit` to complain), but
the audit_result argument is not available in the non-block form.

Closes #552.

Signed-off-by: ilovezfs <ilovezfs@icloud.com>
This commit is contained in:
ilovezfs 2016-07-18 08:49:52 -07:00
parent d7ee541293
commit 45bfd2b94a

View File

@ -15,7 +15,7 @@ module Utils
# HOMEBREW_PREFIX is available in the embedded patch. # HOMEBREW_PREFIX is available in the embedded patch.
# inreplace supports regular expressions. # inreplace supports regular expressions.
# <pre>inreplace "somefile.cfg", /look[for]what?/, "replace by #{bin}/tool"</pre> # <pre>inreplace "somefile.cfg", /look[for]what?/, "replace by #{bin}/tool"</pre>
def inreplace(paths, before = nil, after = nil) def inreplace(paths, before = nil, after = nil, audit_result = true)
errors = {} errors = {}
Array(paths).each do |path| Array(paths).each do |path|
@ -25,7 +25,7 @@ module Utils
yield s yield s
else else
after = after.to_s if Symbol === after after = after.to_s if Symbol === after
s.gsub!(before, after) s.gsub!(before, after, audit_result)
end end
errors[path] = s.errors if s.errors.any? errors[path] = s.errors if s.errors.any?