mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Add Language#find_by_extension
This commit is contained in:
@@ -2,22 +2,42 @@ require 'yaml'
|
|||||||
|
|
||||||
module Linguist
|
module Linguist
|
||||||
class Language
|
class Language
|
||||||
@name_index = {}
|
@name_index = {}
|
||||||
|
@extension_index = {}
|
||||||
|
|
||||||
def self.create(attributes = {})
|
def self.create(attributes = {})
|
||||||
language = new(attributes)
|
language = new(attributes)
|
||||||
|
|
||||||
@name_index[language.name.downcase] = language
|
@name_index[language.name.downcase] = language
|
||||||
|
|
||||||
|
language.extensions.each do |extension|
|
||||||
|
@extension_index[extension] = language
|
||||||
|
@extension_index[extension.sub(/^./, '')] = language
|
||||||
|
end
|
||||||
|
|
||||||
language
|
language
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.[](name)
|
||||||
|
find_by_name(name)
|
||||||
|
end
|
||||||
|
|
||||||
def self.find_by_name(name)
|
def self.find_by_name(name)
|
||||||
@name_index[name.downcase]
|
@name_index[name.downcase]
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.[](name)
|
def self.find_by_extension(filename)
|
||||||
find_by_name(name)
|
basename = File.basename(filename)
|
||||||
|
|
||||||
|
if basename[0] == ?.
|
||||||
|
ext = basename
|
||||||
|
elsif basename.include?('.')
|
||||||
|
ext = File.extname(basename)
|
||||||
|
else
|
||||||
|
ext = basename
|
||||||
|
end
|
||||||
|
|
||||||
|
@extension_index[ext]
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :name, :extensions
|
attr_reader :name, :extensions
|
||||||
|
|||||||
@@ -6,9 +6,24 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
include Linguist
|
include Linguist
|
||||||
|
|
||||||
def test_find_by_name
|
def test_find_by_name
|
||||||
assert_equal "Ruby", Language.find_by_name('Ruby').name
|
ruby = Language['Ruby']
|
||||||
assert_equal "Ruby", Language.find_by_name('ruby').name
|
assert_equal ruby, Language.find_by_name('Ruby')
|
||||||
assert_equal "Ruby", Language.find_by_name('RUBY').name
|
assert_equal ruby, Language.find_by_name('ruby')
|
||||||
|
assert_equal ruby, Language.find_by_name('RUBY')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_by_extension
|
||||||
|
ruby = Language['Ruby']
|
||||||
|
assert_equal ruby, Language.find_by_extension('.rb')
|
||||||
|
assert_equal ruby, Language.find_by_extension('rb')
|
||||||
|
assert_equal ruby, Language.find_by_extension('foo.rb')
|
||||||
|
assert_equal ruby, Language.find_by_extension('./foo.rb')
|
||||||
|
assert_equal ruby, Language.find_by_extension('foo/bar.rb')
|
||||||
|
|
||||||
|
# TODO: Review questionable usage
|
||||||
|
assert_equal ruby, Language.find_by_extension('Rakefile')
|
||||||
|
assert_equal ruby, Language.find_by_extension('vendor/Rakefile')
|
||||||
|
assert_equal ruby, Language.find_by_extension('./Rakefile')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_name
|
def test_name
|
||||||
|
|||||||
Reference in New Issue
Block a user