diff options
author | Rick Olson <technoweenie@gmail.com> | 2007-09-28 17:02:40 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2007-09-28 17:02:40 +0000 |
commit | 8c33359ce8531df65a03c21631232024c0868bf8 (patch) | |
tree | 14f1b7de7b6df377cd70119c153b16e5b519d230 /railties/lib/tasks/annotations.rake | |
parent | 82ff27766d3edc3fb1d0d043841e9c3cd277744f (diff) | |
download | rails-8c33359ce8531df65a03c21631232024c0868bf8.tar.gz rails-8c33359ce8531df65a03c21631232024c0868bf8.tar.bz2 rails-8c33359ce8531df65a03c21631232024c0868bf8.zip |
Moved the SourceAnnotationExtractor to a separate file in case libraries try to load the rails rake tasks twice. rspec_on_rails, I'm looking at you. [Rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7672 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/lib/tasks/annotations.rake')
-rw-r--r-- | railties/lib/tasks/annotations.rake | 63 |
1 files changed, 1 insertions, 62 deletions
diff --git a/railties/lib/tasks/annotations.rake b/railties/lib/tasks/annotations.rake index 80fe202588..ea6046670f 100644 --- a/railties/lib/tasks/annotations.rake +++ b/railties/lib/tasks/annotations.rake @@ -1,65 +1,4 @@ -class SourceAnnotationExtractor - class Annotation < Struct.new(:line, :tag, :text) - def to_s(options={}) - s = "[%3d] " % line - s << "[#{tag}] " if options[:tag] - s << text - end - end - - def self.enumerate(tag, options={}) - extractor = new(tag) - extractor.display(extractor.find, options) - end - - attr_reader :tag - - def initialize(tag) - @tag = tag - end - - def find(dirs=%w(app lib test)) - dirs.inject({}) { |h, dir| h.update(find_in(dir)) } - end - - def find_in(dir) - results = {} - - Dir.glob("#{dir}/*") do |item| - next if File.basename(item)[0] == ?. - - if File.directory?(item) - results.update(find_in(item)) - elsif item =~ /\.(builder|(r(?:b|xml|js)))$/ - results.update(extract_annotations_from(item, /#\s*(#{tag}):?\s*(.*)$/)) - elsif item =~ /\.(rhtml|erb)$/ - results.update(extract_annotations_from(item, /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/)) - end - end - - results - end - - def extract_annotations_from(file, pattern) - lineno = 0 - result = File.readlines(file).inject([]) do |list, line| - lineno += 1 - next list unless line =~ pattern - list << Annotation.new(lineno, $1, $2) - end - result.empty? ? {} : { file => result } - end - - def display(results, options={}) - results.keys.sort.each do |file| - puts "#{file}:" - results[file].each do |note| - puts " * #{note.to_s(options)}" - end - puts - end - end -end +require 'source_annotation_extractor' desc "Enumerate all annotations" task :notes do |