Class: Dependency Private
- Inherits:
-
Object
- Object
- Dependency
- Extended by:
- Forwardable
- Includes:
- Dependable
- Defined in:
- Library/Homebrew/dependency.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
A dependency on another Homebrew formula.
Direct Known Subclasses
Constant Summary
Constants included from Dependable
Instance Attribute Summary collapse
- #env_proc ⇒ Object readonly private
- #name ⇒ Object readonly private
- #option_names ⇒ Object readonly private
- #tags ⇒ Object readonly private
Class Method Summary collapse
- ._load(marshaled) ⇒ Object private
- .action(dependent, dep, &_block) ⇒ Object private
-
.expand(dependent, deps = dependent.deps, &block) ⇒ Object
private
Expand the dependencies of each dependent recursively, optionally yielding
[dependent, dep]
pairs to allow callers to apply arbitrary filters to the list. -
.keep_but_prune_recursive_deps ⇒ Object
private
Keep a dependency, but prune its dependencies.
- .merge_repeats(all) ⇒ Object private
-
.prune ⇒ Object
private
Prune a dependency and its dependencies recursively.
-
.skip ⇒ Object
private
Prune a single dependency but do not prune its dependencies.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?) private
-
#_dump ⇒ Object
private
Define marshaling semantics because we cannot serialize @env_proc.
- #hash ⇒ Object private
-
#initialize(name, tags = [], env_proc = DEFAULT_ENV_PROC, option_names = [name]) ⇒ Dependency
constructor
private
A new instance of Dependency.
- #inspect ⇒ Object private
- #installed? ⇒ Boolean private
- #missing_options(inherited_options) ⇒ Object private
- #modify_build_environment ⇒ Object private
- #satisfied?(inherited_options) ⇒ Boolean private
- #to_formula ⇒ Object private
- #to_s ⇒ Object private
Methods included from Dependable
#build?, #option_tags, #optional?, #options, #prune_from_option?, #prune_if_build_and_not_dependent?, #recommended?, #required?, #test?
Constructor Details
#initialize(name, tags = [], env_proc = DEFAULT_ENV_PROC, option_names = [name]) ⇒ Dependency
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Dependency.
18 19 20 21 22 23 24 25 |
# File 'Library/Homebrew/dependency.rb', line 18 def initialize(name, = [], env_proc = DEFAULT_ENV_PROC, option_names = [name]) raise ArgumentError, "Dependency must have a name!" unless name @name = name @tags = @env_proc = env_proc @option_names = option_names end |
Instance Attribute Details
#env_proc ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
13 14 15 |
# File 'Library/Homebrew/dependency.rb', line 13 def env_proc @env_proc end |
#name ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
13 14 15 |
# File 'Library/Homebrew/dependency.rb', line 13 def name @name end |
#option_names ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
13 14 15 |
# File 'Library/Homebrew/dependency.rb', line 13 def option_names @option_names end |
#tags ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
13 14 15 |
# File 'Library/Homebrew/dependency.rb', line 13 def @tags end |
Class Method Details
._load(marshaled) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
76 77 78 |
# File 'Library/Homebrew/dependency.rb', line 76 def self._load(marshaled) new(*Marshal.load(marshaled)) # rubocop:disable Security/MarshalLoad end |
.action(dependent, dep, &_block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
118 119 120 121 122 123 124 125 126 |
# File 'Library/Homebrew/dependency.rb', line 118 def action(dependent, dep, &_block) catch(:action) do if block_given? yield dependent, dep elsif dep.optional? || dep.recommended? prune unless dependent.build.with?(dep) end end end |
.expand(dependent, deps = dependent.deps, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Expand the dependencies of each dependent recursively, optionally yielding
[dependent, dep]
pairs to allow callers to apply arbitrary filters to
the list.
The default filter, which is applied when a block is not given, omits
optionals and recommendeds based on what the dependent has asked for.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'Library/Homebrew/dependency.rb', line 86 def (dependent, deps = dependent.deps, &block) # Keep track dependencies to avoid infinite cyclic dependency recursion. @expand_stack ||= [] @expand_stack.push dependent.name = [] deps.each do |dep| next if dependent.name == dep.name case action(dependent, dep, &block) when :prune next when :skip next if @expand_stack.include? dep.name .concat((dep.to_formula, &block)) when :keep_but_prune_recursive_deps << dep else next if @expand_stack.include? dep.name .concat((dep.to_formula, &block)) << dep end end merge_repeats() ensure @expand_stack.pop end |
.keep_but_prune_recursive_deps ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Keep a dependency, but prune its dependencies.
139 140 141 |
# File 'Library/Homebrew/dependency.rb', line 139 def keep_but_prune_recursive_deps throw(:action, :keep_but_prune_recursive_deps) end |
.merge_repeats(all) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
143 144 145 146 147 148 149 150 151 152 153 |
# File 'Library/Homebrew/dependency.rb', line 143 def merge_repeats(all) grouped = all.group_by(&:name) all.map(&:name).uniq.map do |name| deps = grouped.fetch(name) dep = deps.first = (deps) option_names = deps.flat_map(&:option_names).uniq dep.class.new(name, , dep.env_proc, option_names) end end |
.prune ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Prune a dependency and its dependencies recursively.
129 130 131 |
# File 'Library/Homebrew/dependency.rb', line 129 def prune throw(:action, :prune) end |
.skip ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Prune a single dependency but do not prune its dependencies.
134 135 136 |
# File 'Library/Homebrew/dependency.rb', line 134 def skip throw(:action, :skip) end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
31 32 33 |
# File 'Library/Homebrew/dependency.rb', line 31 def ==(other) instance_of?(other.class) && name == other.name && == other. end |
#_dump ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Define marshaling semantics because we cannot serialize @env_proc.
72 73 74 |
# File 'Library/Homebrew/dependency.rb', line 72 def _dump(*) Marshal.dump([name, ]) end |
#hash ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
36 37 38 |
# File 'Library/Homebrew/dependency.rb', line 36 def hash name.hash ^ .hash end |
#inspect ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
67 68 69 |
# File 'Library/Homebrew/dependency.rb', line 67 def inspect "#<#{self.class.name}: #{name.inspect} #{.inspect}>" end |
#installed? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
46 47 48 |
# File 'Library/Homebrew/dependency.rb', line 46 def installed? to_formula.latest_version_installed? end |
#missing_options(inherited_options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
54 55 56 57 58 59 60 61 |
# File 'Library/Homebrew/dependency.rb', line 54 def () formula = to_formula required = required |= required &= formula..to_a required -= Tab.for_formula(formula). required end |
#modify_build_environment ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
63 64 65 |
# File 'Library/Homebrew/dependency.rb', line 63 def modify_build_environment env_proc&.call end |
#satisfied?(inherited_options) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
50 51 52 |
# File 'Library/Homebrew/dependency.rb', line 50 def satisfied?() installed? && ().empty? end |
#to_formula ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
40 41 42 43 44 |
# File 'Library/Homebrew/dependency.rb', line 40 def to_formula formula = Formulary.factory(name) formula.build = BuildOptions.new(, formula.) formula end |
#to_s ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
27 28 29 |
# File 'Library/Homebrew/dependency.rb', line 27 def to_s name end |