Add ability to specify custom annotation directories

SOURCE_ANNOTATION_DIRECTORIES='dir1,dir2' bundle exec rake notes

   Searches app, config, lib, script, test (default)
   Also searches dir1, dir2

References: #4536, #4540
This commit is contained in:
Jason Noble & Ralph Shnelvar 2012-02-25 14:01:40 -07:00 committed by Jason Noble
parent b5472cf7f2
commit e053b415e7
2 changed files with 46 additions and 1 deletions

View File

@ -14,6 +14,9 @@
# of the line (or closing ERB comment tag) is considered to be their text.
class SourceAnnotationExtractor
class Annotation < Struct.new(:line, :tag, :text)
def self.directories
@@directories ||= %w(app config lib script test) + (ENV['SOURCE_ANNOTATION_DIRECTORIES'] || '').split(',')
end
# Returns a representation of the annotation that looks like this:
#
@ -48,7 +51,7 @@ class SourceAnnotationExtractor
# Returns a hash that maps filenames under +dirs+ (recursively) to arrays
# with their annotations.
def find(dirs=%w(app config lib script test))
def find(dirs=Annotation.directories)
dirs.inject({}) { |h, dir| h.update(find_in(dir)) }
end

View File

@ -60,6 +60,8 @@ module ApplicationTests
app_file "script/run_something.rb", "# TODO: note in script directory"
app_file "test/some_test.rb", 1000.times.map { "" }.join("\n") << "# TODO: note in test directory"
app_file "some_other_dir/blah.rb", "# TODO: note in some_other directory"
boot_rails
require 'rake'
@ -77,6 +79,7 @@ module ApplicationTests
assert_match /note in lib directory/, output
assert_match /note in script directory/, output
assert_match /note in test directory/, output
assert_no_match /note in some_other directory/, output
assert_equal 5, lines.size
@ -87,6 +90,45 @@ module ApplicationTests
end
test 'notes finds notes in custom directories' do
app_file "app/controllers/some_controller.rb", "# TODO: note in app directory"
app_file "config/initializers/some_initializer.rb", "# TODO: note in config directory"
app_file "lib/some_file.rb", "# TODO: note in lib directory"
app_file "script/run_something.rb", "# TODO: note in script directory"
app_file "test/some_test.rb", 1000.times.map { "" }.join("\n") << "# TODO: note in test directory"
app_file "some_other_dir/blah.rb", "# TODO: note in some_other directory"
boot_rails
require 'rake'
require 'rdoc/task'
require 'rake/testtask'
Rails.application.load_tasks
Dir.chdir(app_path) do
output = `SOURCE_ANNOTATION_DIRECTORIES='some_other_dir' bundle exec rake notes`
lines = output.scan(/\[([0-9\s]+)\]/).flatten
assert_match /note in app directory/, output
assert_match /note in config directory/, output
assert_match /note in lib directory/, output
assert_match /note in script directory/, output
assert_match /note in test directory/, output
assert_match /note in some_other directory/, output
assert_equal 6, lines.size
lines.each do |line_number|
assert_equal 4, line_number.size
end
end
end
private
def boot_rails
super