Class: Keg::Relocation Private

Inherits:
Object show all
Defined in:
keg_relocate.rb

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

Constant Summary collapse

RELOCATABLE_PATH_REGEX_PREFIX =

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

/(?:(?<=-F|-I|-L|-isystem)|(?<![a-zA-Z0-9]))/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRelocation

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

Returns a new instance of Relocation.



17
18
19
# File 'keg_relocate.rb', line 17

def initialize
  @replacement_map = T.let({}, T::Hash[Symbol, [T.any(String, Regexp), String]])
end

Class Method Details

.path_to_regex(path) ⇒ Regexp

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

Parameters:

Returns:

  • (Regexp)


54
55
56
57
58
59
60
61
62
# File 'keg_relocate.rb', line 54

def self.path_to_regex(path)
  path = case path
  when String
    Regexp.escape(path)
  when Regexp
    path.source
  end
  Regexp.new(RELOCATABLE_PATH_REGEX_PREFIX.source + path)
end

Instance Method Details

#add_replacement_pair(key, old_value, new_value, path: false) ⇒ void

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

This method returns an undefined value.

Parameters:

  • key (Symbol)
  • old_value (String, Regexp)
  • new_value (String)
  • path (Boolean) (defaults to: false)


27
28
29
30
# File 'keg_relocate.rb', line 27

def add_replacement_pair(key, old_value, new_value, path: false)
  old_value = self.class.path_to_regex(old_value) if path
  @replacement_map[key] = [old_value, new_value]
end

#freezeObject

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



21
22
23
24
# File 'keg_relocate.rb', line 21

def freeze
  @replacement_map.freeze
  super
end

#replace_text(text) ⇒ Boolean

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

Parameters:

Returns:

  • (Boolean)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'keg_relocate.rb', line 38

def replace_text(text)
  replacements = @replacement_map.values.to_h

  sorted_keys = replacements.keys.sort_by do |key|
    key.is_a?(String) ? key.length : 999
  end.reverse

  any_changed = T.let(nil, T.nilable(String))
  sorted_keys.each do |key|
    changed = text.gsub!(key, replacements.fetch(key))
    any_changed ||= changed
  end
  !any_changed.nil?
end

#replacement_pair_for(key) ⇒ Array<([String, Regexp], String)>

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

Parameters:

Returns:



33
34
35
# File 'keg_relocate.rb', line 33

def replacement_pair_for(key)
  @replacement_map.fetch(key)
end