3 # Represents language statistics for a collection of files
5 attr_accessor :platforms, :tools, :file_rules, :language_counts
14 def process(source_file)
15 Gestalt::FileRule.rules_triggered_by(source_file).each do |r|
19 source_file.language_breakdowns.each do |lb|
20 @language_counts[lb.name.intern] ||= 0
21 @language_counts[lb.name.intern] += lb.code_count
26 # since platforms can depend on other platforms,
27 # we perform an iterative process and break when
28 # no new platforms have been detected.
30 prev_platforms = self.platforms.clone
31 uninfered_platforms.each do |p|
32 platforms << p if p.triggered?(self)
34 prev_tools = self.tools.clone
35 uninfered_tools.each do |t|
36 tools << t if t.triggered?(self)
38 break if prev_platforms == self.platforms && prev_tools == self.tools
42 def uninfered_platforms #:nodoc:
43 Gestalt::Platform.descendants - @platforms
46 def uninfered_tools #:nodoc:
47 Gestalt::Tool.descendants - @tools
50 def includes_language?(language, min_percent = 0)
51 return false unless language_counts[language]
52 language_percents[language] >= min_percent
56 @language_percents ||= begin
57 total = language_counts.values.inject(0) { |s,c| s+c }
59 language_counts.each do |k,v|
60 l[k] = 100.0 * v.to_i / total