mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Load formulae into private namespace
This commit is contained in:
parent
8ab4b9ae55
commit
a2a24b3a0d
@ -2,22 +2,43 @@
|
||||
# It is not meant to be used directy from formulae.
|
||||
|
||||
class Formulary
|
||||
module Formulae
|
||||
class << self
|
||||
if instance_method(:const_defined?).arity == -1
|
||||
def formula_const_defined?(name)
|
||||
const_defined?(name, false)
|
||||
end
|
||||
|
||||
def formula_const_get(name)
|
||||
const_get(name, false)
|
||||
end
|
||||
else
|
||||
def formula_const_defined?(name)
|
||||
const_defined?(name)
|
||||
end
|
||||
|
||||
def formula_const_get(name)
|
||||
const_get(name)
|
||||
end
|
||||
end
|
||||
|
||||
def remove_formula_const(name)
|
||||
remove_const(name)
|
||||
end
|
||||
|
||||
def formula_const_set(name, value)
|
||||
const_set(name, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.unload_formula formula_name
|
||||
Object.send(:remove_const, class_s(formula_name))
|
||||
end
|
||||
|
||||
def self.formula_class_defined? class_name
|
||||
Object.const_defined?(class_name)
|
||||
end
|
||||
|
||||
def self.get_formula_class class_name
|
||||
Object.const_get(class_name)
|
||||
Formulae.remove_formula_const(class_s(formula_name))
|
||||
end
|
||||
|
||||
def self.restore_formula formula_name, value
|
||||
old_verbose, $VERBOSE = $VERBOSE, nil
|
||||
Object.const_set(class_s(formula_name), value)
|
||||
Formulae.formula_const_set(class_s(formula_name), value)
|
||||
ensure
|
||||
$VERBOSE = old_verbose
|
||||
end
|
||||
@ -50,11 +71,9 @@ class Formulary
|
||||
klass.new(name, path, spec)
|
||||
end
|
||||
|
||||
# Return the Class for this formula, `require`-ing it if
|
||||
# it has not been parsed before.
|
||||
def klass
|
||||
begin
|
||||
have_klass = Formulary.formula_class_defined? class_name
|
||||
have_klass = Formulae.formula_const_defined?(class_name)
|
||||
rescue NameError => e
|
||||
raise unless e.name.to_s == class_name
|
||||
raise FormulaUnavailableError, name, e.backtrace
|
||||
@ -62,11 +81,7 @@ class Formulary
|
||||
|
||||
load_file unless have_klass
|
||||
|
||||
klass = Formulary.get_formula_class(class_name)
|
||||
if klass == Formula || !(klass < Formula)
|
||||
raise FormulaUnavailableError.new(name)
|
||||
end
|
||||
klass
|
||||
Formulae.formula_const_get(class_name)
|
||||
end
|
||||
|
||||
private
|
||||
@ -74,7 +89,7 @@ class Formulary
|
||||
def load_file
|
||||
STDERR.puts "#{$0} (#{self.class.name}): loading #{path}" if ARGV.debug?
|
||||
raise FormulaUnavailableError.new(name) unless path.file?
|
||||
require(path)
|
||||
Formulae.module_eval(path.read, path)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user