File: session.rb

package info (click to toggle)
ruby-openid 2.9.2debian-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,300 kB
  • sloc: ruby: 17,952; javascript: 6,183; xml: 219; sh: 78; python: 30; makefile: 2
file content (36 lines) | stat: -rw-r--r-- 775 bytes parent folder | download | duplicates (4)
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