mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Add Repository
This commit is contained in:
88
lib/linguist/repository.rb
Normal file
88
lib/linguist/repository.rb
Normal file
@@ -0,0 +1,88 @@
|
||||
module Linguist
|
||||
class Repository
|
||||
IgnorePaths = %w(
|
||||
yui
|
||||
tiny_mce
|
||||
ckeditor
|
||||
redbox
|
||||
active_scaffold
|
||||
rico_corner
|
||||
code_highlighter
|
||||
vendor
|
||||
bundle
|
||||
node_modules
|
||||
cache
|
||||
assets
|
||||
bookends
|
||||
dojo
|
||||
extjs
|
||||
sencha
|
||||
mochikit
|
||||
prototype(.*)\.js
|
||||
mootools\.js
|
||||
jquery([^.]*)(\.min)?\.js
|
||||
jquery\-\d\.\d\.\d(\.min)?\.js
|
||||
effects\.js
|
||||
controls\.js
|
||||
dragdrop\.js
|
||||
fabfile\.py
|
||||
less([^.]*)(\.min)?\.js
|
||||
less\-\d+\.\d+\.\d+(\.min)?\.js
|
||||
)
|
||||
|
||||
IgnoreRegexp = Regexp.new(IgnorePaths.join('|'))
|
||||
|
||||
def initialize(paths)
|
||||
@paths = paths
|
||||
|
||||
@stats = nil
|
||||
@languages = Hash.new { 0 }
|
||||
@sizes = Hash.new { 0 }
|
||||
end
|
||||
|
||||
def [](path)
|
||||
@paths[path]
|
||||
end
|
||||
|
||||
def language
|
||||
stats[:primary]
|
||||
end
|
||||
|
||||
def stats
|
||||
@stats ||= compute_stats
|
||||
end
|
||||
|
||||
def compute_stats
|
||||
@paths.each do |path, blob|
|
||||
next if path =~ IgnoreRegexp
|
||||
|
||||
language = blob.language
|
||||
|
||||
if language.popular?
|
||||
@languages[language.name] += 1
|
||||
@sizes[language.name] += blob.size
|
||||
end
|
||||
end
|
||||
|
||||
total_size = @sizes.inject(0) { |s,(k,v)| s + v }
|
||||
|
||||
results = {
|
||||
:total_size => total_size
|
||||
}
|
||||
|
||||
@sizes.each do |language, size|
|
||||
results[language] = size
|
||||
end
|
||||
|
||||
primary = @sizes.max_by { |(language, size)|
|
||||
size
|
||||
}
|
||||
|
||||
if primary
|
||||
results[:primary] = primary[0]
|
||||
end
|
||||
|
||||
results
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user