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 | ||||
|   class Language | ||||
|     @name_index = {} | ||||
|     @name_index      = {} | ||||
|     @extension_index = {} | ||||
|  | ||||
|     def self.create(attributes = {}) | ||||
|       language = new(attributes) | ||||
|  | ||||
|       @name_index[language.name.downcase] = language | ||||
|  | ||||
|       language.extensions.each do |extension| | ||||
|         @extension_index[extension] = language | ||||
|         @extension_index[extension.sub(/^./, '')] = language | ||||
|       end | ||||
|  | ||||
|       language | ||||
|     end | ||||
|  | ||||
|     def self.[](name) | ||||
|       find_by_name(name) | ||||
|     end | ||||
|  | ||||
|     def self.find_by_name(name) | ||||
|       @name_index[name.downcase] | ||||
|     end | ||||
|  | ||||
|     def self.[](name) | ||||
|       find_by_name(name) | ||||
|     def self.find_by_extension(filename) | ||||
|       basename = File.basename(filename) | ||||
|  | ||||
|       if basename[0] == ?. | ||||
|         ext = basename | ||||
|       elsif basename.include?('.') | ||||
|         ext = File.extname(basename) | ||||
|       else | ||||
|         ext = basename | ||||
|       end | ||||
|  | ||||
|       @extension_index[ext] | ||||
|     end | ||||
|  | ||||
|     attr_reader :name, :extensions | ||||
|   | ||||
| @@ -6,9 +6,24 @@ class TestLanguage < Test::Unit::TestCase | ||||
|   include Linguist | ||||
|  | ||||
|   def test_find_by_name | ||||
|     assert_equal "Ruby", Language.find_by_name('Ruby').name | ||||
|     assert_equal "Ruby", Language.find_by_name('ruby').name | ||||
|     assert_equal "Ruby", Language.find_by_name('RUBY').name | ||||
|     ruby = Language['Ruby'] | ||||
|     assert_equal ruby, Language.find_by_name('Ruby') | ||||
|     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 | ||||
|  | ||||
|   def test_name | ||||
|   | ||||
		Reference in New Issue
	
	Block a user