R(c,*g) helper method can't handle nested hash input params

ronald.evangelista ironald at gmail.com
Fri May 23 05:22:55 EDT 2008


params= {"search"=>"Search",
  "date_begin"=>"2007-05-01",
  "date_type"=>"created_on",
  "order"=>1,
  "report_type"=>"year_end",
  "person"=>
   {"reply_status_id"=>"1",
    "created_on"=>
     Tue, 01 May 2007 00:00:00 +0000..Fri, 23 May 2008 00:00:00 +0000},
  "date_end"=>"2008-05-23"}
R(Report,params)


=
 "/report/?search=Search&date_begin=2007-05-01&date_type=created_on&order
=1&report_type=year_end&person=reply_status_id1created_on2007-05-01T00%3A00%3A00
%2B00%3A00..2008-05-23T00%3A00%3A00%2B00%3A00&date_end=2008-05-23" 



      untested fix of module Helpers method R(c,*g)

    def R(c,*g)
      p,h=/\(.+?\)/,g.grep(Hash)
      g-=h
      raise "bad route" unless u = c.urls.find{|x|
        break x if x.scan(p).size == g.size &&
          /^#{x}\/?$/ =~ (x=g.inject(x){|x,a|
            x.sub p,C.escape((a[a.class.primary_key]rescue a))})
      }
      h.any?? u+"?"+h[0].map{|x|
         k, v = x
         if Hash===v
            name_ext, val = v.to_a.pop
            k="#{k}[#{name_ext}]"
            x=[k,val]
         end
         x.map{|z|
            C.escape(z)
            }*"="
         }*"&": u

    end            


hope this gets fixed in Camping 2.0



More information about the Camping-list mailing list