Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Rake notes directories #5175

Merged
merged 5 commits into from

4 participants

@jasonnoble

These commits do two things:

Verify that Annotations are found in all the default directories
      app config lib script test

If an environment variable SOURCE_ANNOTATION_DIRECTORIES exists, it searches there too
      SOURCE_ANNOTATION_DIRECTORIES='dir1,dir2' bundle exec rake notes
          searches:  app config lib script test dir1 dir2

References: #4536, #4540

@rafaelfranca

Hey @jasonnoble could you rebase it against master. I'll ask to someone merge it.

Also I think that we have to document this variable in the guides

@jasonnoble

Rebased, added quick documentation to the command_line.textile. I would do this on lifo, but it should probably go through as part of this pull request. //cc @rafaelfranca

@jeremy
Owner

Looks good! Made a couple style notes re. method newlines.

railties/lib/rails/source_annotation_extractor.rb
@@ -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)
@jeremy Owner
jeremy added a note

Style: please add spacing on default arg. dirs = ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
railties/test/application/rake/notes_test.rb
@@ -12,7 +12,8 @@ def teardown
teardown_app
end
- test 'notes' do
+ test 'notes finds notes for certain file_types' do
+
@jeremy Owner
jeremy added a note

Style: no newline padding within the test block

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
railties/test/application/rake/notes_test.rb
@@ -51,6 +52,82 @@ def teardown
end
end
+ test 'notes finds notes in default directories' do
@jeremy Owner
jeremy added a note

Style: add newline before this test & remove its padding

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
jasonnoble added some commits
@jasonnoble jasonnoble Add test coverage for rake notes
Add separate tests to verify directories covered
Add tests to verify file_types
b5472cf
@jasonnoble jasonnoble 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
e053b41
@jasonnoble jasonnoble Add documentation to command_line.textile explaining how to use addit…
…ional notes directories
37e4e9b
@jasonnoble jasonnoble Fixed styling issues brought up by @jeremy 7731231
@jasonnoble

Updated style to follow @jeremy's comments.

railties/test/application/rake/notes_test.rb
((27 lines not shown))
+ 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
+
@jeremy Owner
jeremy added a note

Still newline padding here :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@jasonnoble

Fixed line 93, also removed the blank lines (like line 89).

@jeremy jeremy merged commit c435feb into from
@kelso

This commit is awesome!

Finally, I can use rake notes and search for TODOs and FIXes in rspec folder "spec"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Apr 30, 2012
  1. @jasonnoble

    Add test coverage for rake notes

    jasonnoble authored jasonnoble committed
    Add separate tests to verify directories covered
    Add tests to verify file_types
  2. @jasonnoble

    Add ability to specify custom annotation directories

    jasonnoble authored jasonnoble committed
    SOURCE_ANNOTATION_DIRECTORIES='dir1,dir2' bundle exec rake notes
    
       Searches app, config, lib, script, test (default)
       Also searches dir1, dir2
    
    References: #4536, #4540
  3. @jasonnoble
  4. @jasonnoble
  5. @jasonnoble

    Remove empty lines.

    jasonnoble authored
This page is out of date. Refresh to see the latest.
View
13 guides/source/command_line.textile
@@ -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.
View
5 railties/lib/rails/source_annotation_extractor.rb
@@ -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 @@ 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
View
74 railties/test/application/rake/notes_test.rb
@@ -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"
@@ -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
Something went wrong with that request. Please try again.