Title: [waffle-scm] [144] trunk/core/src/main/ruby/waffle.rb: waffle.rb converts parameters from java request to a ruby hash.
Revision
144
Author
mward
Date
2007-06-05 18:07:27 -0500 (Tue, 05 Jun 2007)

Log Message

waffle.rb converts parameters from java request to a ruby hash.  Parameters that relate to controller instance variables are evaluate in the context of the running controller instance.  Added locate functionality to Controller module"

Modified Paths

Diff

Modified: trunk/core/src/main/ruby/waffle.rb (143 => 144)

--- trunk/core/src/main/ruby/waffle.rb	2007-06-05 23:04:32 UTC (rev 143)
+++ trunk/core/src/main/ruby/waffle.rb	2007-06-05 23:07:27 UTC (rev 144)
@@ -3,6 +3,7 @@
 include_class 'org.codehaus.waffle.view.View'
 include_class 'org.codehaus.waffle.view.RedirectView'
 
+# TODO all of this code needs ruby tests!
 module Waffle
 
   # load/require files
@@ -75,10 +76,19 @@
 
     def __set_all_contexts(request, response)
       @request = WebContext.new(request)
-      @parameters = @request.getParameterMap
       @session = WebContext.new(@request.getSession(false))
       @servlet_context = WebContext.new(@session.getServletContext());
       @response = response
+
+      # Building up a hash to represent the params
+      @parameters = {}
+      parameter_names = @request.getParameterNames
+      while (parameter_names.hasMoreElements)
+        name = parameter_names.nextElement
+        @parameters[name] = @request.getParameter(name)
+      end
+
+      __process_request_params
     end
 
     def __pico_container=(pico)
@@ -89,6 +99,12 @@
       @@__argument_resolver = argument_resolver
     end
 
+    def locate(type)
+      return @@__pico_container.getComponentInstanceOfType(type.java_class) if type.is_a? Module
+
+      return @@__pico_container.getComponentInstance(type)
+    end
+
     def method_missing(symbol, *args)
       if symbol.to_s =~ /^find_/ # todo: I don't like "find_" for this ... sounds to model-ish
         key = symbol.to_s
@@ -113,5 +129,17 @@
       return RedirectView.new(name, self, map)
     end
 
+    private
+
+    # This method tries to apply parameter values to the controllers instance variables (only if they exist)
+    def __process_request_params
+      @parameters.each_pair do |key, value|
+        parts = key.split('.')
+        if self.instance_variable_defined? "@#{key}".to_sym
+          self.instance_eval("@#{key} = '#{value}'")
+        end
+      end
+    end
+
   end
 end
\ No newline at end of file


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to