Class: Linguist::Repository
- Inherits:
-
Object
- Object
- Linguist::Repository
- Defined in:
- lib/linguist/repository.rb
Overview
A Repository is an abstraction of a Grit::Repo or a basic file system tree. It holds a list of paths pointing to Blobish objects.
Its primary purpose is for gathering language statistics across the entire project.
Class Method Summary collapse
-
.from_directory(base_path) ⇒ Object
Public: Initialize a new Repository from a File directory.
Instance Method Summary collapse
-
#compute_stats ⇒ Object
Internal: Compute language breakdown for each blob in the Repository.
-
#initialize(enum) ⇒ Repository
constructor
Public: Initialize a new Repository.
-
#language ⇒ Object
Public: Get primary Language of repository.
-
#languages ⇒ Object
Public: Returns a breakdown of language stats.
-
#size ⇒ Object
Public: Get the total size of the repository.
Constructor Details
#initialize(enum) ⇒ Repository
Public: Initialize a new Repository
enum - Enumerator that responds to ‘each` and
yields Blob objects
Returns a Repository
27 28 29 30 31 32 |
# File 'lib/linguist/repository.rb', line 27 def initialize(enum) @enum = enum @computed_stats = false @language = @size = nil @sizes = Hash.new { 0 } end |
Class Method Details
.from_directory(base_path) ⇒ Object
Public: Initialize a new Repository from a File directory
base_path - A path String
Returns a Repository
15 16 17 18 19 |
# File 'lib/linguist/repository.rb', line 15 def self.from_directory(base_path) new Dir["#{base_path}/**/*"]. select { |f| File.file?(f) }. map { |path| FileBlob.new(path, base_path) } end |
Instance Method Details
#compute_stats ⇒ Object
Internal: Compute language breakdown for each blob in the Repository.
Returns nothing
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/linguist/repository.rb', line 66 def compute_stats return if @computed_stats @enum.each do |blob| # Skip files that are likely binary next if blob.likely_binary? # Skip vendored or generated blobs next if blob.vendored? || blob.generated? || blob.language.nil? # Only include programming languages if blob.language.type == :programming @sizes[blob.language.group] += blob.size end end # Compute total size @size = @sizes.inject(0) { |s,(_,v)| s + v } # Get primary language if primary = @sizes.max_by { |(_, size)| size } @language = primary[0] end @computed_stats = true nil end |
#language ⇒ Object
Public: Get primary Language of repository.
Returns a Language
50 51 52 53 |
# File 'lib/linguist/repository.rb', line 50 def language compute_stats @language end |
#languages ⇒ Object
Public: Returns a breakdown of language stats.
Examples
# => { Language['Ruby'] => 46319,
Language['JavaScript'] => 258 }
Returns a Hash of Language keys and Integer size values.
42 43 44 45 |
# File 'lib/linguist/repository.rb', line 42 def languages compute_stats @sizes end |
#size ⇒ Object
Public: Get the total size of the repository.
Returns a byte size Integer
58 59 60 61 |
# File 'lib/linguist/repository.rb', line 58 def size compute_stats @size end |