diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index 17b735f2..9afc9861 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -35,9 +35,8 @@ module Linguist def initialize(paths) @paths = paths - @stats = nil - @languages = Hash.new { 0 } - @sizes = Hash.new { 0 } + @stats = nil + @sizes = Hash.new { 0 } end def [](path) @@ -45,7 +44,16 @@ module Linguist end def language - stats[:primary] + Language[stats[:primary]] + end + + def languages + stats + @sizes + end + + def size + stats[:total_size] end def stats @@ -59,8 +67,7 @@ module Linguist language = blob.language if language.common? - @languages[language.name] += 1 - @sizes[language.name] += blob.size + @sizes[language.name] += blob.size end end diff --git a/test/test_repository.rb b/test/test_repository.rb new file mode 100644 index 00000000..2080e9f1 --- /dev/null +++ b/test/test_repository.rb @@ -0,0 +1,59 @@ +require 'linguist/repository' + +require 'test/unit' + +class TestRepository < Test::Unit::TestCase + include Linguist + + class FixtureBlob + def initialize(name, path) + @name = name + @path = path + end + + def name + @name + end + + def data + File.read(@path) + end + + def size + File.size(@path) + end + end + + def repo(base_path) + paths = Dir["#{base_path}/**/*"].inject({}) do |h, path| + if File.file?(path) + name = path.sub("#{base_path}/", '') + h[name] = Blob.new(FixtureBlob.new(name, path)) + end + h + end + Repository.new(paths) + end + + def linguist_repo + repo(File.expand_path("../..", __FILE__)) + end + + def test_lookup_path + assert linguist_repo['lib/linguist.rb'] + assert_equal Language['Ruby'], linguist_repo['lib/linguist.rb'].language + end + + def test_linguist_language + assert_equal Language['Ruby'], linguist_repo.language + end + + def test_linguist_languages + assert linguist_repo.languages['Ruby'] > 30_000 + assert linguist_repo.languages['Python'] < 1000 + end + + def test_linguist_size + assert linguist_repo.size > 30_000 + end +end