diff options
author | Eric Davis <edavis@littlestreamsoftware.com> | 2008-08-13 01:11:45 +0000 |
---|---|---|
committer | Eric Davis <edavis@littlestreamsoftware.com> | 2008-08-13 01:11:45 +0000 |
commit | 98cf5ebca09301996f9e7a515febe9aa480c5746 (patch) | |
tree | 18f53b7605e2e7af8405a742a28bd1c78fd9bec0 | |
parent | 63e135ffef42ee550b7792a25f8266e5d176d3b7 (diff) | |
download | redmine-98cf5ebca09301996f9e7a515febe9aa480c5746.tar.gz redmine-98cf5ebca09301996f9e7a515febe9aa480c5746.zip |
Added rake task for listing the Plugin hooks by running rake redmine:plugins:hook_list.
git-svn-id: http://redmine.rubyforge.org/svn/branches/work@1742 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | hooks/lib/tasks/plugins.rake | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/hooks/lib/tasks/plugins.rake b/hooks/lib/tasks/plugins.rake new file mode 100644 index 000000000..136877164 --- /dev/null +++ b/hooks/lib/tasks/plugins.rake @@ -0,0 +1,38 @@ +require 'source_annotation_extractor' + +# Modified version of the SourceAnnotationExtractor in railties +# Will search for runable code that uses <tt>call_hook</tt> +class PluginSourceAnnotationExtractor < SourceAnnotationExtractor + # Returns a hash that maps filenames under +dir+ (recursively) to arrays + # with their annotations. Only files with annotations are included, and only + # those with extension +.builder+, +.rb+, +.rxml+, +.rjs+, +.rhtml+, and +.erb+ + # are taken into account. + def find_in(dir) + results = {} + + Dir.glob("#{dir}/*") do |item| + next if File.basename(item)[0] == ?. + + if File.directory?(item) + results.update(find_in(item)) + elsif item =~ /(hook|test)\.rb/ + # skip + elsif item =~ /\.(builder|(r(?:b|xml|js)))$/ + results.update(extract_annotations_from(item, /\s*(#{tag})\(?\s*(.*)$/)) + elsif item =~ /\.(rhtml|erb)$/ + results.update(extract_annotations_from(item, /<%=\s*\s*(#{tag})\(?\s*(.*?)\s*%>/)) + end + end + + results + end +end + +namespace :redmine do + namespace :plugins do + desc "Enumerate all Redmine plugin hooks and their context parameters" + task :hook_list do + PluginSourceAnnotationExtractor.enumerate 'call_hook' + end + end +end |