aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/formulary.rb
diff options
context:
space:
mode:
authorJack Nagel2014-04-03 22:40:40 -0500
committerJack Nagel2014-04-03 22:40:40 -0500
commit8677948a6c80d9332d7f8b3e21d45b2502d040f3 (patch)
treef2652220beb78c6fc4cde12b78a8071454d9bd8e /Library/Homebrew/formulary.rb
parent857d44a844db0afd583db1374aebfaa47341e3b4 (diff)
downloadhomebrew-8677948a6c80d9332d7f8b3e21d45b2502d040f3.tar.bz2
Remove need for class name cache by only computing it once per formula
Diffstat (limited to 'Library/Homebrew/formulary.rb')
-rw-r--r--Library/Homebrew/formulary.rb53
1 files changed, 28 insertions, 25 deletions
diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb
index fd96b5f70..c36635732 100644
--- a/Library/Homebrew/formulary.rb
+++ b/Library/Homebrew/formulary.rb
@@ -5,12 +5,12 @@ class Formulary
Object.send(:remove_const, class_s(formula_name))
end
- def self.formula_class_defined? formula_name
- Object.const_defined?(class_s(formula_name))
+ def self.formula_class_defined? class_name
+ Object.const_defined?(class_name)
end
- def self.get_formula_class formula_name
- Object.const_get(class_s(formula_name))
+ def self.get_formula_class class_name
+ Object.const_get(class_name)
end
def self.restore_formula formula_name, value
@@ -21,12 +21,10 @@ class Formulary
end
def self.class_s name
- (@class_s ||= {}).fetch(name) do
- class_name = name.capitalize
- class_name.gsub!(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase }
- class_name.gsub!('+', 'x')
- @class_s[name] = class_name
- end
+ class_name = name.capitalize
+ class_name.gsub!(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase }
+ class_name.gsub!('+', 'x')
+ class_name
end
# A FormulaLoader returns instances of formulae.
@@ -36,6 +34,14 @@ class Formulary
attr_reader :name
# The formula's ruby file's path or filename
attr_reader :path
+ # The ruby constant name of the formula's class
+ attr_reader :class_name
+
+ def initialize(name, path)
+ @name = name
+ @path = path
+ @class_name = Formulary.class_s(name)
+ end
# Gets the formula instance.
def get_formula
@@ -46,7 +52,7 @@ class Formulary
# it has not been parsed before.
def klass
begin
- have_klass = Formulary.formula_class_defined? name
+ have_klass = Formulary.formula_class_defined? class_name
rescue NameError
raise FormulaUnavailableError.new(name)
end
@@ -65,7 +71,7 @@ class Formulary
end
end
- klass = Formulary.get_formula_class(name)
+ klass = Formulary.get_formula_class(class_name)
if klass == Formula || !(klass < Formula)
raise FormulaUnavailableError.new(name)
end
@@ -82,11 +88,12 @@ class Formulary
if ARGV.homebrew_developer?
opoo "Add a new regex to bottle_version.rb to parse this filename."
end
- @name = bottle_name
+ name = bottle_name
else
- @name = name_without_version
+ name = name_without_version
end
- @path = Formula.path(@name)
+
+ super name, Formula.path(name)
end
def get_formula
@@ -99,8 +106,7 @@ class Formulary
# Loads formulae from Homebrew's provided Library
class StandardLoader < FormulaLoader
def initialize name
- @name = name
- @path = Formula.path(name)
+ super name, Formula.path(name)
end
end
@@ -110,9 +116,8 @@ class Formulary
# require allows filenames to drop the .rb extension, but everything else
# in our codebase will require an exact and fullpath.
path = "#{path}.rb" unless path =~ /\.rb$/
-
- @path = Pathname.new(path).expand_path
- @name = @path.stem
+ path = Pathname.new(path).expand_path
+ super path.stem, path
end
end
@@ -122,13 +127,12 @@ class Formulary
def initialize url
@url = url
- @path = HOMEBREW_CACHE_FORMULA/File.basename(url)
- @name = File.basename(url, '.rb')
+ super File.basename(url, ".rb"), HOMEBREW_CACHE_FORMULA/File.basename(url)
end
# Downloads the formula's .rb file
def fetch
- unless Formulary.formula_class_defined? name
+ unless Formulary.formula_class_defined? class_name
HOMEBREW_CACHE_FORMULA.mkpath
FileUtils.rm path.to_s, :force => true
curl url, '-o', path.to_s
@@ -144,8 +148,7 @@ class Formulary
# Loads tapped formulae.
class TapLoader < FormulaLoader
def initialize tapped_name
- @name = tapped_name
- @path = Pathname.new(tapped_name)
+ super tapped_name, Pathname.new(tapped_name)
end
def get_formula