diff --git a/app/controllers/application.rb b/app/controllers/application.rb index b8f3488..cf59dd1 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -10,6 +10,8 @@ class ApplicationController < ActionController::Base theme :get_theme_setting + Ansuz::PluginManagerInstance.load_helpers(self) + def set_layout_variables @root = Page.root || Page.new @topNav = @root.publishable_children diff --git a/lib/ansuz/plugin_manager.rb b/lib/ansuz/plugin_manager.rb index a024cad..035129d 100644 --- a/lib/ansuz/plugin_manager.rb +++ b/lib/ansuz/plugin_manager.rb @@ -11,6 +11,7 @@ class PluginManager def initialize @plugins = [] @plugin_nav = [] + @helpers = [] @admin_plugin_nav = [] @admin_menu = {} @admin_menu_top_level_entries = ADMIN_MENU_TOP_LEVEL_ENTRIES.clone @@ -25,6 +26,7 @@ def register_plugin klass self.plugins << klass settings_name = klass.to_s.tableize.gsub(/\//,'_').to_sym create_settings( settings_name ) + require_helpers( klass.to_s ) end # A plugin can call register_plugin_nav(title, link) to add itself to the @@ -97,6 +99,24 @@ def plugins_for_routes (installed_plugins & enabled_plugins).map(&:to_sym) end + def require_helpers(name) + path = "#{RAILS_ROOT}/ansuz_installed_plugins/**/*#{helper_plugin_name(name)}*/**/*_helper.rb" + Dir[path].each do |f| + @helpers << name + require f + end + end + + def load_helpers(controller) + @helpers.each do |helper| + controller.send(:helper, "#{helper}Helper".constantize) + end + end + + def helper_plugin_name(klass_name) + klass_name.tableize.singularize.split("\/").last + end + protected def create_settings(name) begin