Spec-Zone.ru › Homebrew

Module: Utils::Inreplace Private

Defined in:
utils/inreplace.rb

Overview

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Helper functions for replacing text in files in-place.

Defined Under Namespace

Classes: Error

Class Method Summary collapse

  • .inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block) ⇒ void

    Sometimes we have to change a bit before we install.

Class Method Details

.inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block) ⇒ void

This method returns an undefined value.

Sometimes we have to change a bit before we install. Mostly we prefer a patch, but if you need the prefix of this formula in the patch you have to resort to inreplace, because in the patch you don't have access to any variables defined by the formula, as only HOMEBREW_PREFIX is available in the embedded patch.

Examples

inreplace supports regular expressions:

inreplace "somefile.cfg", /look[for]what?/, "replace by #{bin}/tool"

inreplace supports blocks:

inreplace "Makefile" do |s|
  s.gsub! "/usr/local", HOMEBREW_PREFIX.to_s
end

Parameters:

  • paths (Enumerable<String, Pathname>, String, Pathname)
  • before (Pathname, Regexp, String, nil) (defaults to: nil)
  • after (Pathname, String, Symbol, nil) (defaults to: nil)
  • audit_result (Boolean) (defaults to: true)
  • global (Boolean) (defaults to: true)
  • block (T.proc.params(s: StringInreplaceExtension).void, nil)

Raises:

  • (Utils::Inreplace::Error)

See Also:

  • StringInreplaceExtension


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'utils/inreplace.rb', line 55

def self.inreplace(paths, before = nil, after = nil, audit_result: true, global: true, &block)
  paths = Array(paths)
  after &&= after.to_s
  before = before.to_s if before.is_a?(Pathname)

  errors = {}

  errors["`paths` (first) parameter"] = ["`paths` was empty"] if paths.all?(&:blank?)

  paths.each do |path|
    str = File.binread(path)
    s = StringInreplaceExtension.new(str)

    if before.nil? && after.nil?
      raise ArgumentError, "Must supply a block or before/after params" unless block

      yield s
    elsif global
      s.gsub!(T.must(before), T.must(after), audit_result:)
    else
      s.sub!(T.must(before), T.must(after), audit_result:)
    end

    errors[path] = s.errors unless s.errors.empty?

    Pathname(path).atomic_write(s.inreplace_string)
  end

  raise Utils::Inreplace::Error, errors if errors.present?
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Utils/Inreplace.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API