Make Language.[] and Language.find_by(alias|name) ignore case

This makes it easier to find a Linguist::Language for a fenced code
block in Markdown, where language names are often specified in
lowercase.
This commit is contained in:
Adam Roben
2014-11-07 09:42:17 -05:00
parent d9ed216092
commit 751360ecf1
2 changed files with 20 additions and 5 deletions

View File

@@ -62,7 +62,7 @@ module Linguist
end end
# Language name index # Language name index
@index[language.name] = @name_index[language.name] = language @index[language.name.downcase] = @name_index[language.name.downcase] = language
language.aliases.each do |name| language.aliases.each do |name|
# All Language aliases should be unique. Raise if there is a duplicate. # All Language aliases should be unique. Raise if there is a duplicate.
@@ -70,7 +70,7 @@ module Linguist
raise ArgumentError, "Duplicate alias: #{name}" raise ArgumentError, "Duplicate alias: #{name}"
end end
@index[name] = @alias_index[name] = language @index[name.downcase] = @alias_index[name.downcase] = language
end end
language.extensions.each do |extension| language.extensions.each do |extension|
@@ -164,7 +164,7 @@ module Linguist
# #
# Returns the Language or nil if none was found. # Returns the Language or nil if none was found.
def self.find_by_name(name) def self.find_by_name(name)
@name_index[name] @name_index[name.downcase]
end end
# Public: Look up Language by one of its aliases. # Public: Look up Language by one of its aliases.
@@ -178,7 +178,7 @@ module Linguist
# #
# Returns the Lexer or nil if none was found. # Returns the Lexer or nil if none was found.
def self.find_by_alias(name) def self.find_by_alias(name)
@alias_index[name] @alias_index[name.downcase]
end end
# Public: Look up Languages by filename. # Public: Look up Languages by filename.
@@ -227,7 +227,7 @@ module Linguist
# #
# Returns the Language or nil if none was found. # Returns the Language or nil if none was found.
def self.[](name) def self.[](name)
@index[name] @index[name.downcase]
end end
# Public: A List of popular languages # Public: A List of popular languages

View File

@@ -303,6 +303,21 @@ class TestLanguage < Test::Unit::TestCase
assert_nil Language['defunkt'] assert_nil Language['defunkt']
end end
def test_find_ignores_case
assert_equal 'AGS Script', Language['ags script'].name
assert_equal 'AGS Script', Language['ags sCRIPT'].name
end
def test_find_by_name_ignores_case
assert_equal 'AGS Script', Language.find_by_name('ags script').name
assert_equal 'AGS Script', Language.find_by_name('ags sCRIPT').name
end
def test_find_by_alias_ignores_case
refute_includes Language['AGS Script'].aliases, 'AGS'
assert_equal 'AGS Script', Language.find_by_alias('AGS').name
end
def test_name def test_name
assert_equal 'Perl', Language['Perl'].name assert_equal 'Perl', Language['Perl'].name
assert_equal 'Python', Language['Python'].name assert_equal 'Python', Language['Python'].name