# camping_plugin.rb
# plug-in support for Camping Apps
# require 'lib/camping_plugin'
# override R helper method to your liking :-)
module Camping
module PluginHelpers
def R_with_module(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))})
}
if h.any?
l = proc{|_,o,n|o.u(n,&m)rescue([*o]<<n)}
h[0].values.grep(Hash).each{ |a|
k, v = h[0].index(a), a
h[0].u( h[0].delete(k).inject(H[]){|m, a|
m.u( H[[k,a[0]].join("[")<<"]", a[1]], &l)}, &l)
}
h[0].rehash
u+"?"+h[0].map{|x|
k, v = x
Array===v ? v.map{|v2| [k, v2].map{|z| C.escape z}*"="} *
"&" : x.map{|z| C.escape z}*"="
}*"&"
else
u
end
end
end
end
#init plug-in
Camping::Helpers.send(:include, Camping::PluginHelpers)
Camping::Helpers.class_eval { alias_method_chain :R, :module }
_______________________________________________
Camping-list mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/camping-list