Changed Hook API to use a Manager class. #1296

This commit is contained in:
Eric Davis
2008-07-23 21:01:43 -07:00
parent fe22ef95a8
commit 04434cd6ef
7 changed files with 49 additions and 55 deletions
+41 -36
View File
@@ -118,7 +118,7 @@ module Redmine #:nodoc:
end
def add_hook(hook_name, method)
Redmine::Plugin::Hook.add_listener(hook_name, method)
Redmine::Plugin::Hook::Manager.add_listener(hook_name, method)
end
# Returns +true+ if the plugin can be configured.
@@ -128,51 +128,56 @@ module Redmine #:nodoc:
# TODO: Doc
class Hook
# Hooks and the procs added
@@hooks = {
:issue_show => [],
:issue_edit => [],
:issue_bulk_edit => [],
:issue_bulk_edit_save => [],
:issue_update => [],
:project_member_list_header => [],
:project_member_list_column_three => [],
:issues_helper_show_details => []
}
class Manager
# Hooks and the procs added
@@hooks = {
:issue_show => [],
:issue_edit => [],
:issue_bulk_edit => [],
:issue_bulk_edit_save => [],
:issue_update => [],
:project_member_list_header => [],
:project_member_list_column_three => [],
:issues_helper_show_details => []
}
cattr_reader :hooks
cattr_reader :hooks
class << self
class << self
# TODO: Doc
def valid_hook?(hook_name)
return @@hooks.has_key?(hook_name)
end
# TODO: Doc
def valid_hook?(hook_name)
return @@hooks.has_key?(hook_name)
end
# TODO: Doc
def add_listener(hook_name, method)
if valid_hook?(hook_name)
@@hooks[hook_name.to_sym] << method
puts "Listener added for #{hook_name.to_s}"
# TODO: Doc
def add_listener(hook_name, method)
if valid_hook?(hook_name)
@@hooks[hook_name.to_sym] << method
puts "Listener added for #{hook_name.to_s}"
end
end
end
# TODO: Doc
def call_hook(hook_name, context = { })
response = ''
@@hooks[hook_name.to_sym].each do |method|
response += method.call(context)
# TODO: Doc
def call_hook(hook_name, context = { })
response = ''
@@hooks[hook_name.to_sym].each do |method|
response += method.call(context)
end
response
end
response
end
# TODO: Doc
def hook_registered?(hook_name)
return @@hooks[hook_name.to_sym].size > 0
# TODO: Doc
def hook_registered?(hook_name)
return @@hooks[hook_name.to_sym].size > 0
end
end
end
# Default class for Hooks to subclass
class Base
end
end
end
end