December 06, 2011

rake notes で,spec, js, coffee, scss, haml, slim のファイルも対象にする

プログラミング
RubyOnRails

Rails で rake note を打った時に、ruby のファイルしか検出してくれないので、js(coffee) や css(scss), html(slim, haml) も検出するようにした。

class SourceAnnotationExtractor
  def find_with_custom_directories
    find_without_custom_directories(%w|app lib spec|)
  end
  alias_method_chain :find, :custom_directories

  def find_in_with_custom_files(dir)
    results = find_in_without_custom_files(dir)
    Dir.glob("#{dir}/*") do |item|
      next if File.basename(item)[0] == ?.
      if File.directory?(item)
        results.update(find_in(item))
      elsif item =~ /\.(coffee)$/
        results.update(extract_annotations_from(item, /#\s*\[?(#{tag})\]?\s*:?\s*(.*)$/))
      elsif item =~ /\.(js|scss)$/
        results.update(extract_annotations_from(item, /\/\/\s*\[?(#{tag})\]?\s*:?\s*(.*)$/))
      elsif item =~ /\.(haml)$/
        results.update(extract_annotations_from(item, /[\/|(\-\#)]\s*\[?(#{tag})\]?\s*:?\s*(.*)$/))
      elsif item =~ /\.(slim)$/
        results.update(extract_annotations_from(item, /\/\!?\s*\[?(#{tag})\]?\s*:?\s*(.*)$/))
      end
    end
    results
  end
  alias_method_chain :find_in, :custom_files
end