1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
module OpenID
class Consumer
class Session
def initialize(session, decode_klass = nil)
@session = session
@decode_klass = decode_klass
end
def [](key)
val = @session[key]
@decode_klass ? @decode_klass.from_session_value(val) : val
end
def []=(key, val)
@session[key] = to_session_value(val)
end
def keys
@session.keys
end
private
def to_session_value(val)
case val
when Array
val.map{|ele| to_session_value(ele) }
when Hash
Hash[*(val.map{|k,v| [k, to_session_value(v)] }.flatten(1))]
else
val.respond_to?(:to_session_value) ? val.to_session_value : val
end
end
end
end
end
|