Class: SourceAnnotationExtractor

Child modules and classes

Class SourceAnnotationExtractor::Annotation

Attributes

NameRead/write?
tag R

Public Class Methods


enumerate (tag, options={})

    # 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

new (tag)

    # File vendor/rails/railties/lib/source_annotation_extractor.rb, line 17
17:   def initialize(tag)
18:     @tag = tag
19:   end

Public Instance Methods


display (results, options={})

    # 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

extract_annotations_from (file, pattern)

    # 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

find (dirs=%w(app lib test))

    # 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

find_in (dir)

    # 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