Class CodeRay::Encoders::Statistic
In: lib/coderay/encoders/statistic.rb
Parent: Encoder

Makes a statistic for the given tokens.

Methods

Included Modules

Streamable

Constants

TypeStats = Struct.new :count, :size
STATS = <<-STATS Code Statistics Tokens %8d Non-Whitespace %8d Bytes Total %8d Token Types (%d): type count ratio size (average) ------------------------------------------------------------- %s STATS
TOKEN_TYPES_ROW = <<-TKR %-20s %8d %6.2f %% %5.1f TKR   space 12007 33.81 % 1.7

Attributes

real_token_count  [R] 
type_stats  [R] 

Protected Instance methods

TODO Hierarchy handling

[Source]

    # File lib/coderay/encoders/statistic.rb, line 35
35:     def block_token action, kind
36:       @type_stats['TOTAL'].count += 1
37:       @type_stats['open/close'].count += 1
38:     end

[Source]

    # File lib/coderay/encoders/statistic.rb, line 60
60:     def finish options
61:       all = @type_stats['TOTAL']
62:       all_count, all_size = all.count, all.size
63:       @type_stats.each do |type, stat|
64:         stat.size /= stat.count.to_f
65:       end
66:       types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v|
67:         TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size]
68:       end.join
69:       STATS % [
70:         all_count, @real_token_count, all_size,
71:         @type_stats.delete_if { |k, v| k.is_a? String }.size,
72:         types_stats
73:       ]
74:     end

[Source]

    # File lib/coderay/encoders/statistic.rb, line 21
21:     def generate tokens, options
22:       @tokens = tokens
23:       super
24:     end

[Source]

    # File lib/coderay/encoders/statistic.rb, line 16
16:     def setup options
17:       @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 }
18:       @real_token_count = 0
19:     end

[Source]

    # File lib/coderay/encoders/statistic.rb, line 26
26:     def text_token text, kind
27:       @real_token_count += 1 unless kind == :space
28:       @type_stats[kind].count += 1
29:       @type_stats[kind].size += text.size
30:       @type_stats['TOTAL'].size += text.size
31:       @type_stats['TOTAL'].count += 1
32:     end

[Validate]