Create a separate index for lookup

This commit is contained in:
Joshua Peek
2011-06-18 20:33:17 -05:00
parent a75a57eb5e
commit 43807c63e6

View File

@@ -9,6 +9,7 @@ module Linguist
# Langages are defined in `lib/linguist/langages.yml`. # Langages are defined in `lib/linguist/langages.yml`.
class Language class Language
@languages = [] @languages = []
@index = {}
@name_index = {} @name_index = {}
@alias_index = {} @alias_index = {}
@extension_index = {} @extension_index = {}
@@ -30,7 +31,7 @@ module Linguist
end end
# Language name index # Language name index
@name_index[language.name] = language @index[language.name] = @name_index[language.name] = language
language.aliases.each do |name| language.aliases.each do |name|
# All Language aliases should be unique. Warn if there is a duplicate. # All Language aliases should be unique. Warn if there is a duplicate.
@@ -38,7 +39,7 @@ module Linguist
warn "Duplicate alias: #{name}" warn "Duplicate alias: #{name}"
end end
@alias_index[name] = language @index[name] = @alias_index[name] = language
end end
language.extensions.each do |extension| language.extensions.each do |extension|
@@ -134,6 +135,8 @@ module Linguist
# #
# name - The String name of the Language # name - The String name of the Language
# #
# TODO: Consider returning nil instead of Text
#
# Examples # Examples
# #
# Language['Ruby'] # Language['Ruby']
@@ -142,9 +145,9 @@ module Linguist
# Language['ruby'] # Language['ruby']
# # => #<Language name="Ruby"> # # => #<Language name="Ruby">
# #
# Returns the Language or nil if none was found. # Returns the Language or Text if none was found.
def self.[](name) def self.[](name)
find_by_name(name) || find_by_alias(name) || self['Text'] @index[name] || self['Text']
end end
# Public: A List of popular languages # Public: A List of popular languages