diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index 74b506d7d5..3815105c27 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -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