Hey Judofyr! Fix this! When someone sets a cookie using @cookies.something = 'data' it should be set with the path going to the camping app's root, not with no path, otherwise only that controller with the same parameters will ever see the cookie again! Please change this code:

@cookies.each do |k, v|
  @response.set_cookie(k, v) if o[k] != v
end


to:

@cookies.each do |k, v|
  @response.set_cookie(k, :value => v, :path => self/"/") if o[k] != v
end

Which should unbreak it, but cookie sessions will still remain broken so long as you keep using the longer weird set_cookie syntax in there without a path set. Please change it back to @cookie.stuff = "things".

Againy, judofyr, now I find out in the trunk, still, you have a 15 minute timeout. When I said 10 minutes wasn't enough I didn't mean 'so bump it up to 15'. Please get rid of this and just use plain old untimed 'session cookies'. If you insist on having state_timeout functionality — which I strongly feel is something a user could easily implement if they wanted it and beyond the scope of what should come with camping — please default it to 'nil' and change the logic to not be setting those timeout cookies when it is nil. We're not Rails, we don't need to build in every bit of functionality any user could ever want.

We can provide timed sessions on the wiki. Well, at least we could if there was any way to make a new page on the wiki, which seems to be currently disabled. it looks like this:

def service(*a)
@state = Camping::H[] if @cookies.timeout < (Time.now - 1.hour); @cookies.timeout = Time.now.to_i; super(*a)
end


And, one more thing: I thought the cookie thing had been fixed now, but apparently the cookie setting logic is still happening in service(*a), making the cookies hash useless inside of service wrappers. The stuff in service(*a) should be moved out to call(...), outside of the services chain. It's too weird to have to use weird rack api's to do things in a service but have to use familiar simple camping inside of the camping app and before you call 'super()'. the inner most service should just do:

@body = (catch(:halt){send(@request.request_method.downcase, *a)} || @body).to_s


Then @body should be used and @headers and @status and @cookies should be all done in call() to do all the stuff currently being done in the service. Then we can live in a happy world where services really do work as 'before' and 'after' style methods and we don't have to code to rack api's half the time to make it work in ways which really cannot be understood without reading the camping source code. As is happening now, these api's might be replaced entirely with some other thingo in the future if rack is superseded and break it all, not to mention that rack's api's are a lot less fun to code to than camping's.

If someone wants to tell me how git works, I'll be happy to patch these problems myself, provided it isn't a stressful or excessively difficult thing to do... My username on there is Bluebie. I have no idea how to use it.

—
Blueberry the fictional pony
_______________________________________________
Camping-list mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/camping-list

Reply via email to