Class: TodoFind::Finder
- Inherits:
-
Object
- Object
- TodoFind::Finder
- Defined in:
- lib/todofind/finder.rb
Overview
Public: The comment finder. It finds all files in the current directory
containing the comments specified in the config data, or the
defaults: TODO and FIXME.
Examples:
finder = Finder.new(config_data, '.')
finder.find
# => [{:filename => "my_file.rb", :comments =>
[{:line => 3,
:label => "TODO",
:comment => "A todo comment"}]}]
Instance Method Summary collapse
-
#find ⇒ Object
Public: Start recursing through directories under the Finder object’s path and look for comments with the specified labels.
-
#initialize(config, path) ⇒ Finder
constructor
Public: Create a new Finder object with specified config data and a path.
Constructor Details
#initialize(config, path) ⇒ Finder
Public: Create a new Finder object with specified config data and a path.
config - A hash of the configuration data. Allowed options are:
:labels - An array of labels to find (Defaults are TODO and
FIXME)
:exclude_files - An array of files to exclude from the search.
:exclude_dirs - An array of directories to exclude from the
search.
path - The path to start the search at. The search will recurse down from
here but never above this directory.
26 27 28 29 |
# File 'lib/todofind/finder.rb', line 26 def initialize(config, path) @config = TodoFind::Config.new config @path = path end |
Instance Method Details
#find ⇒ Object
Public: Start recursing through directories under the Finder object’s
path and look for comments with the specified labels.
Examples:
finder.find
# => [{:filename => "my_file.rb",
:comments => [{:line => 3,
:label => "TODO",
:comment => "Do something"}]}]
Returns a Hash of the comment data.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/todofind/finder.rb', line 44 def find file_list = get_file_list regex = /(#{@config.labels.join "|"}): (.+)/ data = [] file_list.each do |file| if File.binary? file next end file_data = { :filename => file, :comments => [] } contents = File.read file lines = contents.split "\n" lines.each_with_index do |line, line_num| line.match regex do |match| label = match[1] comment = match[2] file_data[:comments] << { :line => line_num + 1, :label => label, :comment => comment } end end if !file_data[:comments].empty? data << file_data end end return data end |