Merge pull request #15824 from dduugg/inreplace-static
Make inreplace a purely static method v2
This commit is contained in:
commit
d313e8b027
@ -6,8 +6,6 @@ require "utils/inreplace"
|
|||||||
|
|
||||||
module Cask
|
module Cask
|
||||||
class Migrator
|
class Migrator
|
||||||
extend ::Utils::Inreplace
|
|
||||||
|
|
||||||
attr_reader :old_cask, :new_cask
|
attr_reader :old_cask, :new_cask
|
||||||
|
|
||||||
sig { params(old_cask: Cask, new_cask: Cask).void }
|
sig { params(old_cask: Cask, new_cask: Cask).void }
|
||||||
@ -74,7 +72,7 @@ module Cask
|
|||||||
def self.replace_caskfile_token(path, old_token, new_token)
|
def self.replace_caskfile_token(path, old_token, new_token)
|
||||||
case path.extname
|
case path.extname
|
||||||
when ".rb"
|
when ".rb"
|
||||||
inreplace path, /\A\s*cask\s+"#{Regexp.escape(old_token)}"/, "cask #{new_token.inspect}"
|
::Utils::Inreplace.inreplace path, /\A\s*cask\s+"#{Regexp.escape(old_token)}"/, "cask #{new_token.inspect}"
|
||||||
when ".json"
|
when ".json"
|
||||||
json = JSON.parse(path.read)
|
json = JSON.parse(path.read)
|
||||||
json["token"] = new_token
|
json["token"] = new_token
|
||||||
|
@ -59,7 +59,6 @@ require "extend/api_hashable"
|
|||||||
# end</pre>
|
# end</pre>
|
||||||
class Formula
|
class Formula
|
||||||
include FileUtils
|
include FileUtils
|
||||||
include Utils::Inreplace
|
|
||||||
include Utils::Shebang
|
include Utils::Shebang
|
||||||
include Utils::Shell
|
include Utils::Shell
|
||||||
include Context
|
include Context
|
||||||
@ -2560,10 +2559,11 @@ class Formula
|
|||||||
before: T.nilable(T.any(Pathname, Regexp, String)),
|
before: T.nilable(T.any(Pathname, Regexp, String)),
|
||||||
after: T.nilable(T.any(Pathname, String, Symbol)),
|
after: T.nilable(T.any(Pathname, String, Symbol)),
|
||||||
audit_result: T::Boolean,
|
audit_result: T::Boolean,
|
||||||
|
block: T.nilable(T.proc.params(s: StringInreplaceExtension).void),
|
||||||
).void
|
).void
|
||||||
}
|
}
|
||||||
def inreplace(paths, before = nil, after = nil, audit_result = true) # rubocop:disable Style/OptionalBooleanParameter
|
def inreplace(paths, before = nil, after = nil, audit_result = true, &block) # rubocop:disable Style/OptionalBooleanParameter
|
||||||
super(paths, before, after, audit_result)
|
Utils::Inreplace.inreplace(paths, before, after, audit_result: audit_result, &block)
|
||||||
rescue Utils::Inreplace::Error => e
|
rescue Utils::Inreplace::Error => e
|
||||||
onoe e.to_s
|
onoe e.to_s
|
||||||
raise BuildError.new(self, "inreplace", Array(paths), {})
|
raise BuildError.new(self, "inreplace", Array(paths), {})
|
||||||
|
@ -464,6 +464,26 @@ describe Formula do
|
|||||||
|
|
||||||
expect { f.inreplace([]) }.to raise_error(BuildError)
|
expect { f.inreplace([]) }.to raise_error(BuildError)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
specify "replaces text in file" do
|
||||||
|
file = Tempfile.new("test")
|
||||||
|
File.binwrite(file, <<~EOS)
|
||||||
|
ab
|
||||||
|
bc
|
||||||
|
cd
|
||||||
|
EOS
|
||||||
|
f = formula do
|
||||||
|
url "https://brew.sh/test-1.0.tbz"
|
||||||
|
end
|
||||||
|
f.inreplace(file.path) do |s|
|
||||||
|
s.gsub!("bc", "yz")
|
||||||
|
end
|
||||||
|
expect(File.binread(file)).to eq <<~EOS
|
||||||
|
ab
|
||||||
|
yz
|
||||||
|
cd
|
||||||
|
EOS
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "::installed_with_alias_path" do
|
describe "::installed_with_alias_path" do
|
||||||
|
@ -18,8 +18,6 @@ module Utils
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module_function
|
|
||||||
|
|
||||||
# Sometimes we have to change a bit before we install. Mostly we
|
# Sometimes we have to change a bit before we install. Mostly we
|
||||||
# prefer a patch, but if you need the {Formula#prefix prefix} of
|
# prefer a patch, but if you need the {Formula#prefix prefix} of
|
||||||
# this formula in the patch you have to resort to `inreplace`,
|
# this formula in the patch you have to resort to `inreplace`,
|
||||||
@ -43,9 +41,10 @@ module Utils
|
|||||||
before: T.nilable(T.any(Pathname, Regexp, String)),
|
before: T.nilable(T.any(Pathname, Regexp, String)),
|
||||||
after: T.nilable(T.any(Pathname, String, Symbol)),
|
after: T.nilable(T.any(Pathname, String, Symbol)),
|
||||||
audit_result: T::Boolean,
|
audit_result: T::Boolean,
|
||||||
|
block: T.nilable(T.proc.params(s: StringInreplaceExtension).void),
|
||||||
).void
|
).void
|
||||||
}
|
}
|
||||||
def inreplace(paths, before = nil, after = nil, audit_result = true) # rubocop:disable Style/OptionalBooleanParameter
|
def self.inreplace(paths, before = nil, after = nil, audit_result: true, &block)
|
||||||
paths = Array(paths)
|
paths = Array(paths)
|
||||||
after &&= after.to_s
|
after &&= after.to_s
|
||||||
before = before.to_s if before.is_a?(Pathname)
|
before = before.to_s if before.is_a?(Pathname)
|
||||||
@ -59,6 +58,8 @@ module Utils
|
|||||||
s = StringInreplaceExtension.new(str)
|
s = StringInreplaceExtension.new(str)
|
||||||
|
|
||||||
if before.nil? && after.nil?
|
if before.nil? && after.nil?
|
||||||
|
raise ArgumentError, "Must supply a block or before/after params" unless block
|
||||||
|
|
||||||
yield s
|
yield s
|
||||||
else
|
else
|
||||||
s.gsub!(T.must(before), T.must(after), audit_result)
|
s.gsub!(T.must(before), T.must(after), audit_result)
|
||||||
@ -73,7 +74,7 @@ module Utils
|
|||||||
end
|
end
|
||||||
|
|
||||||
# @api private
|
# @api private
|
||||||
def inreplace_pairs(path, replacement_pairs, read_only_run: false, silent: false)
|
def self.inreplace_pairs(path, replacement_pairs, read_only_run: false, silent: false)
|
||||||
str = File.binread(path)
|
str = File.binread(path)
|
||||||
contents = StringInreplaceExtension.new(str)
|
contents = StringInreplaceExtension.new(str)
|
||||||
replacement_pairs.each do |old, new|
|
replacement_pairs.each do |old, new|
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
# typed: strict
|
|
||||||
|
|
||||||
module Utils
|
|
||||||
module Inreplace
|
|
||||||
include Kernel
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
x
Reference in New Issue
Block a user