Module: I18n

Defined in:
lib/i18n-grep.rb

Class Method Summary collapse

Class Method Details

.grep(pattern, files) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/i18n-grep.rb', line 3

def grep(pattern, files)
  results = []

  files.each do |filepath|
    File.open(filepath) do |file|
      key_stack = []
      prev_indent = 0
      indent_spaces = nil
      file.each_with_index do |line, index|
        line = line.chomp
        line_number = index + 1
        next unless line =~ /\s*\w+:/

        key = line[/\w+:/].sub(':', '')
        word = line.gsub(/.*:\s*/, '')

        indent = (line =~ /\w/)
        if indent_spaces.nil? && indent > 0
          indent_spaces = indent
        end
        indent /= indent_spaces if indent > 0

        unless indent == prev_indent
          if indent < prev_indent
            (prev_indent - indent + 1).times { key_stack.pop }
          end
        else
          key_stack.pop
        end
        key_stack.push(key)
        prev_indent = indent

        joined_key = key_stack.join('.')
        if joined_key =~ /#{pattern}/
          results << [filepath, line_number, joined_key, word]
        end
      end
    end
  end

  results
end