Project

General

Profile

Patch #4878 » hook.patch

Patch for hook.rb - Thomas Löber, 2010-02-18 18:28

View differences:

hook.rb (Arbeitskopie)
57 57
      # Calls a hook.
58 58
      # Returns the listeners response.
59 59
      def call_hook(hook, context={})
60
        returning [] do |response|
61
          hls = hook_listeners(hook)
62
          if hls.any?
63
            hls.each {|listener| response << listener.send(hook, context)}
64
          end
65
        end
60
        hook_listeners(hook).map {|listener| listener.send(hook, context)}
66 61
      end
67 62
    end
68 63

  
......
110 105
      #
111 106
      def self.render_on(hook, options={})
112 107
        define_method hook do |context|
113
          context[:controller].send(:render_to_string, {:locals => context}.merge(options))
108
          if !options.include?(:if) || evaluate_if_option(options[:if], context)
109
            context[:controller].send(:render_to_string, {:locals => context}.merge(options))
110
          end
114 111
        end
115 112
      end
113

  
114
      private
115

  
116
      def evaluate_if_option(if_option, context)
117
        case if_option
118
        when Symbol
119
          send(if_option, context)
120
        when Method, Proc
121
          if_option.call(context)
122
        end        
123
      end
116 124
    end
117 125

  
118 126
    # Helper module included in ApplicationHelper and ActionControllerso that
......
145 153
        end        
146 154
      end
147 155
    end
156

  
157
    module ActionMailerMethods
158
      def render_to_string(options={})
159
        ActionView::Base.new(ActionController::Base.view_paths.dup, {}, self).render(options)
160
      end
161
    end
148 162
  end
149 163
end
150 164

  
151 165
ApplicationHelper.send(:include, Redmine::Hook::Helper)
152 166
ActionController::Base.send(:include, Redmine::Hook::Helper)
167
ActionMailer::Base.send(:include, Redmine::Hook::ActionMailerMethods)
168
ActionView::Base.send(:include, Redmine::I18n)
    (1-1/1)