Class: Tefil::IndentStatistics

Inherits:
TextFilterBase show all
Defined in:
lib/tefil/indentstatistics.rb

Constant Summary collapse

HISTGRAM_LIMIT =
50

Instance Method Summary collapse

Methods inherited from TextFilterBase

#filter

Constructor Details

#initialize(options = {}) ⇒ IndentStatistics

Returns a new instance of IndentStatistics.



5
6
7
8
9
# File 'lib/tefil/indentstatistics.rb', line 5

def initialize(options = {})
  options[:smart_filename] = true
  @minimum = options[:minimum]
  super(options)
end

Instance Method Details

#histgram(frequencies) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/tefil/indentstatistics.rb', line 34

def histgram(frequencies)
  result = ''
  max = frequencies.values.max
  frequencies.keys.sort.each do |key|
    num = frequencies[key]
    num = num * HISTGRAM_LIMIT / max if max > HISTGRAM_LIMIT
    result += sprintf("%2d|", key)
    result += "*" * num
    result += "\n"
  end
  result
end

#process_stream(in_io, out_io) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/tefil/indentstatistics.rb', line 11

def process_stream(in_io, out_io)
  frequencies = {}
  in_io.readlines.each do |line|
    #/^(\s*)/ =~ line #改行文字が含まれる。
    /^( *)/ =~ line
    width = $1.size
    frequencies[width] ||= 0
    frequencies[width] += 1
  end

  if @minimum
    frequencies.delete(0)
    output = frequencies.keys.min
    output = 0 if frequencies.empty?
  else
    output = ''
    output = "\n" if ARGV.size >= 2
    output += self.histgram(frequencies)
  end

  out_io.puts output
end