public
Description: response for lets you decorate your actions respond_to blocks
Homepage: http://blog.ardes.com/response_for
Clone URL: git://github.com/ianwhite/response_for.git
Click here to lend your support to: response_for and make a donation at www.pledgie.com !
Added note about placement of extend Ardes::ResponsesModule, also moved some 
code into response_for where it belongs
ianwhite (author)
Thu Oct 09 20:41:53 -0700 2008
commit  06da19df4080be542920ccb40a9add8107d5898b
tree    ecc4f475748e2f25117f30f9b505f80776919e29
parent  e3135e638b9461a612634cf81fbad0662c61086a
...
103
104
105
 
 
 
 
 
 
 
 
106
107
108
...
103
104
105
106
107
108
109
110
111
112
113
114
115
116
0
@@ -103,6 +103,14 @@ module Ardes #:nodoc:
0
         instance_variable_get('@action_responses') || instance_variable_set('@action_responses', copy_of_each_of_superclass_action_responses)
0
       end
0
       
0
+      # takes any responses from the argument (a controller, or responses module) and adds them to this controller's responses
0
+      def include_responses_from(responses_container)
0
+        responses_container.action_responses.each do |action, responses|
0
+          action_responses[action] ||= []
0
+          action_responses[action].unshift(responses)
0
+        end
0
+      end
0
+      
0
     private
0
       def copy_of_each_of_superclass_action_responses
0
         (superclass.action_responses rescue {}).inject({}){|m,(k,v)| m.merge(k => v.dup)}
...
5
6
7
 
 
 
8
9
10
...
29
30
31
32
33
34
35
 
 
36
37
38
...
5
6
7
8
9
10
11
12
13
...
32
33
34
 
 
 
 
35
36
37
38
39
0
@@ -5,6 +5,9 @@ module Ardes#:nodoc:
0
   # when this module is included into a controller, the responses will be copied
0
   # over, along with the actions.
0
   #
0
+  # NOTE: If you are defining self.included on your module, make sure you put the
0
+  # extend Ardes::ResponsesModule *after* self.included method definition.
0
+  #
0
   # Example:
0
   #
0
   #  module MyActions
0
@@ -29,10 +32,8 @@ module Ardes#:nodoc:
0
     def self.extended(mixin)
0
       class << mixin
0
         def included_with_responses(controller_class)
0
-          action_responses.each do |action, responses|
0
-            controller_class.action_responses[action] ||= []
0
-            controller_class.action_responses[action].unshift(responses)
0
-          end
0
+          controller_class.include_responses_from(self)
0
+          included_without_responses(controller_class)
0
         end
0
         alias_method_chain :included, :responses
0
       end
...
2
3
4
 
 
 
 
 
 
 
5
6
7
...
23
24
25
 
 
 
 
26
27
...
2
3
4
5
6
7
8
9
10
11
12
13
14
...
30
31
32
33
34
35
36
37
38
0
@@ -2,6 +2,13 @@ require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))
0
 
0
 module ResponsesModuleSpec
0
   module MyActionsAndResponses
0
+    
0
+    def self.included(controller)
0
+      controller.class_eval do
0
+        def defined_by_included; end
0
+      end
0
+    end
0
+    
0
     extend Ardes::ResponsesModule
0
     
0
     def foo; end
0
@@ -23,5 +30,9 @@ module ResponsesModuleSpec
0
     it "should have action :foo" do
0
       @controller.should respond_to(:foo)
0
     end
0
+    
0
+    it "should have method defined by included" do
0
+      @controller.should respond_to(:defined_by_included)
0
+    end
0
   end
0
 end

Comments