Class SourceAnnotationExtractor
In: vendor/rails/railties/lib/source_annotation_extractor.rb
Parent: Object

Methods

Classes and Modules

Class SourceAnnotationExtractor::Annotation

Attributes

tag  [R] 

Public Class methods

[Source]

    # 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

[Source]

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

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]