| Class | SourceAnnotationExtractor |
| In: |
vendor/rails/railties/lib/source_annotation_extractor.rb
|
| Parent: | Object |
| tag | [R] |
# File vendor/rails/railties/lib/source_annotation_extractor.rb, line 10
10: def self.enumerate(tag, options={})
11: extractor = new(tag)
12: extractor.display(extractor.find, options)
13: end
# File vendor/rails/railties/lib/source_annotation_extractor.rb, line 17
17: def initialize(tag)
18: @tag = tag
19: end
# File vendor/rails/railties/lib/source_annotation_extractor.rb, line 53
53: def display(results, options={})
54: results.keys.sort.each do |file|
55: puts "#{file}:"
56: results[file].each do |note|
57: puts " * #{note.to_s(options)}"
58: end
59: puts
60: end
61: end
# File vendor/rails/railties/lib/source_annotation_extractor.rb, line 43
43: def extract_annotations_from(file, pattern)
44: lineno = 0
45: result = File.readlines(file).inject([]) do |list, line|
46: lineno += 1
47: next list unless line =~ pattern
48: list << Annotation.new(lineno, $1, $2)
49: end
50: result.empty? ? {} : { file => result }
51: end
# File vendor/rails/railties/lib/source_annotation_extractor.rb, line 21
21: def find(dirs=%w(app lib test))
22: dirs.inject({}) { |h, dir| h.update(find_in(dir)) }
23: end
# File vendor/rails/railties/lib/source_annotation_extractor.rb, line 25
25: def find_in(dir)
26: results = {}
27:
28: Dir.glob("#{dir}/*") do |item|
29: next if File.basename(item)[0] == ?.
30:
31: if File.directory?(item)
32: results.update(find_in(item))
33: elsif item =~ /\.(builder|(r(?:b|xml|js)))$/
34: results.update(extract_annotations_from(item, /#\s*(#{tag}):?\s*(.*)$/))
35: elsif item =~ /\.(rhtml|erb)$/
36: results.update(extract_annotations_from(item, /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/))
37: end
38: end
39:
40: results
41: end