Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rake notes directories #5175

Merged
merged 5 commits into from
Apr 30, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions guides/source/command_line.textile
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,19 @@ app/model/post.rb:

NOTE. When using specific annotations and custom annotations, the annotation name (FIXME, BUG etc) is not displayed in the output lines.

Be default, rake notes will look in the app, config, lib, script and test directories for notes. If you would like to search additional directories,
simply provide the directories as a comma seperated list in an environment variable +SOURCE_ANNOTATION_DIRECTORIES+.

<shell>
$ export SOURCE_ANNOTATION_DIRECTORIES='rspec,vendor'
$ rake notes
(in /home/foobar/commandsapp)
app/model/user.rb:
* [ 35] [FIXME] User should have a subscription at this point
rspec/model/user_spec.rb:
* [122] [TODO] Verify the user that has a subscription works
</shell>

h4. +routes+

+rake routes+ will list all of your defined routes, which is useful for tracking down routing problems in your app, or giving you a good overview of the URLs in an app you're trying to get familiar with.
Expand Down
5 changes: 4 additions & 1 deletion railties/lib/rails/source_annotation_extractor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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:
#
Expand Down Expand Up @@ -48,7 +51,7 @@ def initialize(tag)

# 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

Expand Down
74 changes: 73 additions & 1 deletion railties/test/application/rake/notes_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def teardown
teardown_app
end

test 'notes' do
test 'notes finds notes for certain file_types' do
app_file "app/views/home/index.html.erb", "<% # TODO: note in erb %>"
app_file "app/views/home/index.html.haml", "-# TODO: note in haml"
app_file "app/views/home/index.html.slim", "/ TODO: note in slim"
Expand Down Expand Up @@ -49,7 +49,79 @@ def teardown
assert_equal ' ', line[1]
end
end
end

test 'notes finds notes in default 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 = `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_no_match /note in some_other directory/, output

assert_equal 5, lines.size

lines.each do |line_number|
assert_equal 4, line_number.size
end
end
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
Expand Down