Subversion Info

Rev
437
Last Checked In
2008-03-28 00:49:20 (2 weeks ago)
Checked in by
deveiant

Parent

Included Modules

Class Index

Quicksearch

Arrow::Session

This provides a container for maintaining state across multiple transactions.

Constants

SVNRev
SVN Revision
SVNId
SVN Id

Attributes

config[R]

(Not documented)

id[R]
The session‘s unique identifier, an Apache::Session::Id object.
lock[R]
The session‘s lock object; an Apache::Session::Lock.
store[R]
The session‘s backing store; an Apache::Session::Store object.

Public Class Methods

configure( config ) click to toggle source

Configure the session class‘s factory with the given Arrow::Config object.

    # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 71
71:     def self::configure( config )
72:         @config = config.dup
73:         Arrow::Logger[self].debug "Done. Session config is: %p" % @config
74:     end
create( txn, configHash={} ) click to toggle source

Create a new session for the specified request.

    # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 78
78:     def self::create( txn, configHash={} )
79:         # Merge the incoming config with the factory's
80:         sconfig = @config.merge( configHash )
81:         Arrow::Logger[self].debug "Merged config is: %p" % sconfig
82: 
83:         # Create a new id and backing store object
84:         idobj = self.create_id( sconfig, txn )
85:         store = self.create_store( sconfig, idobj )
86:         lock = self.create_lock( sconfig, store, idobj )
87: 
88:         # Create the session cookie
89:         scookie = self.create_session_cookie( txn, sconfig, idobj, store, lock )
90: 
91:         return new( idobj, lock, store, txn, scookie )
92:     end
create_id( config, txn ) click to toggle source

Create an Arrow::Session::Id object for the given txn, with the particulars dictated by the specified config.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 111
111:     def self::create_id( config, txn )
112:         cookie_name = config.idName
113:     
114:         # Fetch the id from the request, either from the session cookie or
115:         # as a parameter if the cookie doesn't exist.
116:         if txn.request_cookies.include?( cookie_name )
117:             Arrow::Logger[self].debug "Found an existing session cookie (%s)" %
118:                 [ cookie_name ]
119:             idstring = txn.request_cookies[ cookie_name ].value
120:         else
121:             Arrow::Logger[self].debug \
122:                 "No existing session cookie (%s); looking for one in a request parameter" %
123:                 [ cookie_name]
124:             idstring = txn.param( cookie_name )
125:         end
126: 
127:         Arrow::Logger[self].debug "Creating a session id object: %p" % config.idType
128:         return Arrow::Session::Id.create( config.idType, txn.request, idstring )
129:     end
create_lock( config, store, id ) click to toggle source

Create an Arrow::Session::Lock object for the specified store and id.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 142
142:     def self::create_lock( config, store, id )
143:         
144:         lockuri = Arrow::Session.parse_uri( config.lockType )
145:         lock = nil
146: 
147:         # If the configuration says to use the recommended locker, ask the
148:         # backing store for a lock object.
149:         if lockuri.scheme == 'recommended'
150:             Arrow::Logger[self].debug "Creating recommended lock"
151:             lock = store.create_recommended_lock( id ) or
152:                 raise Arrow::SessionError, "No recommended locker for %s" %
153:                     store.class.name
154:         else
155:             Arrow::Logger[self].debug "Creating a session lock: %p" % lockuri
156:             lock = Arrow::Session::Lock.create( lockuri, id )
157:         end
158: 
159:        return lock
160:     end
create_session_cookie( txn, config, id, store, lock ) click to toggle source

Set the session cookie if we‘re really running under Apache.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 96
 96:     def self::create_session_cookie( txn, config, id, store, lock )
 97:         scookie = Arrow::Cookie.new(
 98:                 config.idName,
 99:                 id.to_s,
100:                 :expires => config.expires,
101:                 :path => '/'
102:             )
103: 
104:         Arrow::Logger[self].debug "Created cookie: %p" % scookie.to_s
105:         return scookie
106:     end
create_store( config, id ) click to toggle source

Create an Arrow::Session::Store object with the given id. The type and configuration of the store will be dictated by the specified config object.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 135
135:     def self::create_store( config,  id )
136:         Arrow::Logger[self].debug "Creating a session store: %p" % config.storeType
137:         return Arrow::Session::Store.create( config.storeType, id )
138:     end
new( idobj, lock, store, txn, cookie=nil ) click to toggle source

Create a new Arrow::Session object for the given idobj (an Arrow::Session::Id object), using the given lock (an Arrow::Session::Locker object) for serializing access.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 206
206:     def initialize( idobj, lock, store, txn, cookie=nil )
207:         raise ArgumentError, "No id object" unless idobj
208:         raise ArgumentError, "No lock object" unless lock
209:         raise ArgumentError, "No store object" unless store
210: 
211:         self.log.debug "Initializing session with id: %p, lock: %p, store: %p" %
212:             [ idobj, lock, store ]
213: 
214:         @id = idobj
215:         @lock = lock
216:         @store = store
217:         @txn = txn
218:         @cookie = cookie
219: 
220:         @store[ :_session_id ] = id.to_s
221:     end
parse_uri( str ) click to toggle source

Parse the given string into a URI object, appending the path part if it doesn‘t exist.

    # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 62
62:     def self::parse_uri( str )
63:         return str if str.is_a?( URI::Generic )
64:         str += ":." if /^\w+$/ =~ str
65:         URI.parse( str )
66:     end
session_cookie_name() click to toggle source

Return the configured name of the session cookie.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 164
164:     def self::session_cookie_name
165:         return @config.idName
166:     end

Protected Class Methods

def_delegated_readers( *syms ) click to toggle source

Create delegators that readlock the session store before accessing it.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 176
176:     def self::def_delegated_readers( *syms )
177:         syms.each do |sym|
178:             define_method( sym ) do |*args|
179:                 @lock.read_lock
180:                 @store.send( sym, *args )
181:             end
182:         end
183:     end
def_delegated_writers( *syms ) click to toggle source

Create delegators that writelock the session store before accessing it.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 188
188:     def self::def_delegated_writers( *syms )
189:         syms.each do |sym|
190:             define_method( sym ) do |*args|
191:                 @lock.write_lock
192:                 @store.send( sym, *args )
193:             end
194:         end
195:     end

Public Instance Methods

clear() click to toggle source

Clear all data from the session object.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 252
252:     def clear
253:         @lock.with_write_lock do
254:             @store.clear
255:             @store[ :_session_id ] = @id.to_s
256:         end
257:     end
each( &block ) click to toggle source

Enumerable iterface: iterate over the session‘s key/value pairs, calling the given block once for each pair.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 262
262:     def each( &block )
263:         raise LocalJumpError, "no block given" unless block
264:         @lock.read_lock
265:         @store.each( &block )
266:     end
finish() click to toggle source

Tell the session that it will not be used again in the current session.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 286
286:     def finish
287:         @lock.release_all_locks
288:     end
remove() click to toggle source

Delete the session

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 242
242:     def remove
243:         @lock.with_write_lock do
244:             @store.remove
245:         end
246:         @lock.release_all_locks
247:         @cookie.expires = Time.at(0)
248:     end
save() click to toggle source

Save the session to fixed storage and set the session cookie in the creating transaction‘s outgoing headers.

     # File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 271
271:     def save
272:         begin
273:             self.log.debug "Saving session data"
274:             @store.save
275:             self.log.debug "Writing session cookie (%p)" % [ @cookie ]
276:             @txn.cookies[ self.class.session_cookie_name ] = @cookie
277:         ensure
278:             self.log.debug "Releasing all locks"
279:             @lock.release_all_locks
280:         end
281:     end

secsequence

--- SEC00123

seccomment

--- ""

attributes

--- 
- name: config
  rw: R
  a_desc: ""
- name: cookie
  rw: R
  a_desc: |+
    
    The <a href="../Apache/Cookie.html">Apache::Cookie</a> object used to
    manipulate the session cookie.
    
- name: id
  rw: R
  a_desc: |+
    
    The session&#8216;s unique identifier, an Apache::Session::Id object.
    
- name: lock
  rw: R
  a_desc: |+
    
    The session&#8216;s lock object; an Apache::Session::Lock.
    
- name: store
  rw: R
  a_desc: |+
    
    The session&#8216;s backing store; an Apache::Session::Store object.
    

method_list

--- 
- methods: 
  - visibility: public
    aref: M000353
    name: configure
    sourcecode: "    <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 71</span>\n\
      71:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">configure</span>( <span class=\"ruby-identifier\">config</span> )\n\
      72:         <span class=\"ruby-ivar\">@config</span> = <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">dup</span>\n\
      73:         <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Done. Session config is: %p&quot;</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-ivar\">@config</span>\n\
      74:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Configure the session class&#8216;s factory with the given <a
      href="Config.html">Arrow::Config</a> object.
      </p>
    params: ( config )
  - visibility: public
    aref: M000354
    name: create
    sourcecode: "    <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 78</span>\n\
      78:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">create</span>( <span class=\"ruby-identifier\">txn</span>, <span class=\"ruby-identifier\">configHash</span>={} )\n\
      79:         <span class=\"ruby-comment cmt\"># Merge the incoming config with the factory's</span>\n\
      80:         <span class=\"ruby-identifier\">sconfig</span> = <span class=\"ruby-ivar\">@config</span>.<span class=\"ruby-identifier\">merge</span>( <span class=\"ruby-identifier\">configHash</span> )\n\
      81:         <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Merged config is: %p&quot;</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-identifier\">sconfig</span>\n\
      82: \n\
      83:         <span class=\"ruby-comment cmt\"># Create a new id and backing store object</span>\n\
      84:         <span class=\"ruby-identifier\">idobj</span> = <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">create_id</span>( <span class=\"ruby-identifier\">sconfig</span>, <span class=\"ruby-identifier\">txn</span> )\n\
      85:         <span class=\"ruby-identifier\">store</span> = <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">create_store</span>( <span class=\"ruby-identifier\">sconfig</span>, <span class=\"ruby-identifier\">idobj</span> )\n\
      86:         <span class=\"ruby-identifier\">lock</span> = <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">create_lock</span>( <span class=\"ruby-identifier\">sconfig</span>, <span class=\"ruby-identifier\">store</span>, <span class=\"ruby-identifier\">idobj</span> )\n\
      87: \n\
      88:         <span class=\"ruby-comment cmt\"># Create the session cookie</span>\n\
      89:         <span class=\"ruby-identifier\">scookie</span> = <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">create_session_cookie</span>( <span class=\"ruby-identifier\">txn</span>, <span class=\"ruby-identifier\">sconfig</span>, <span class=\"ruby-identifier\">idobj</span>, <span class=\"ruby-identifier\">store</span>, <span class=\"ruby-identifier\">lock</span> )\n\
      90: \n\
      91:         <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">new</span>( <span class=\"ruby-identifier\">idobj</span>, <span class=\"ruby-identifier\">lock</span>, <span class=\"ruby-identifier\">store</span>, <span class=\"ruby-identifier\">txn</span>, <span class=\"ruby-identifier\">scookie</span> )\n\
      92:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create a <a href="Session.html#M000362">new</a> session for the specified
      <tt>request</tt>.
      </p>
    params: ( txn, configHash={} )
  - visibility: public
    aref: M000356
    name: create_id
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 111</span>\n\
      111:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">create_id</span>( <span class=\"ruby-identifier\">config</span>, <span class=\"ruby-identifier\">txn</span> )\n\
      112:         <span class=\"ruby-identifier\">cookie_name</span> = <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">idName</span>\n\
      113:     \n\
      114:         <span class=\"ruby-comment cmt\"># Fetch the id from the request, either from the session cookie or</span>\n\
      115:         <span class=\"ruby-comment cmt\"># as a parameter if the cookie doesn't exist.</span>\n\
      116:         <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">txn</span>.<span class=\"ruby-identifier\">request_cookies</span>.<span class=\"ruby-identifier\">include?</span>( <span class=\"ruby-identifier\">cookie_name</span> )\n\
      117:             <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Found an existing session cookie (%s)&quot;</span> <span class=\"ruby-operator\">%</span>\n\
      118:                 [ <span class=\"ruby-identifier\">cookie_name</span> ]\n\
      119:             <span class=\"ruby-identifier\">idstring</span> = <span class=\"ruby-identifier\">txn</span>.<span class=\"ruby-identifier\">request_cookies</span>[ <span class=\"ruby-identifier\">cookie_name</span> ].<span class=\"ruby-identifier\">value</span>\n\
      120:         <span class=\"ruby-keyword kw\">else</span>\n\
      121:             <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> \\\n\
      122:                 <span class=\"ruby-value str\">&quot;No existing session cookie (%s); looking for one in a request parameter&quot;</span> <span class=\"ruby-operator\">%</span>\n\
      123:                 [ <span class=\"ruby-identifier\">cookie_name</span>]\n\
      124:             <span class=\"ruby-identifier\">idstring</span> = <span class=\"ruby-identifier\">txn</span>.<span class=\"ruby-identifier\">param</span>( <span class=\"ruby-identifier\">cookie_name</span> )\n\
      125:         <span class=\"ruby-keyword kw\">end</span>\n\
      126: \n\
      127:         <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Creating a session id object: %p&quot;</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">idType</span>\n\
      128:         <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Session</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Id</span>.<span class=\"ruby-identifier\">create</span>( <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">idType</span>, <span class=\"ruby-identifier\">txn</span>.<span class=\"ruby-identifier\">request</span>, <span class=\"ruby-identifier\">idstring</span> )\n\
      129:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create an <a href="Session/Id.html">Arrow::Session::Id</a> object for the
      given <tt>txn</tt>, with the particulars dictated by the specified
      <tt>config</tt>.
      </p>
    params: ( config, txn )
  - visibility: public
    aref: M000358
    name: create_lock
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 142</span>\n\
      142:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">create_lock</span>( <span class=\"ruby-identifier\">config</span>, <span class=\"ruby-identifier\">store</span>, <span class=\"ruby-identifier\">id</span> )\n\
      143:         \n\
      144:         <span class=\"ruby-identifier\">lockuri</span> = <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Session</span>.<span class=\"ruby-identifier\">parse_uri</span>( <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">lockType</span> )\n\
      145:         <span class=\"ruby-identifier\">lock</span> = <span class=\"ruby-keyword kw\">nil</span>\n\
      146: \n\
      147:         <span class=\"ruby-comment cmt\"># If the configuration says to use the recommended locker, ask the</span>\n\
      148:         <span class=\"ruby-comment cmt\"># backing store for a lock object.</span>\n\
      149:         <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">lockuri</span>.<span class=\"ruby-identifier\">scheme</span> <span class=\"ruby-operator\">==</span> <span class=\"ruby-value str\">'recommended'</span>\n\
      150:             <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Creating recommended lock&quot;</span>\n\
      151:             <span class=\"ruby-identifier\">lock</span> = <span class=\"ruby-identifier\">store</span>.<span class=\"ruby-identifier\">create_recommended_lock</span>( <span class=\"ruby-identifier\">id</span> ) <span class=\"ruby-keyword kw\">or</span>\n\
      152:                 <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">SessionError</span>, <span class=\"ruby-value str\">&quot;No recommended locker for %s&quot;</span> <span class=\"ruby-operator\">%</span>\n\
      153:                     <span class=\"ruby-identifier\">store</span>.<span class=\"ruby-identifier\">class</span>.<span class=\"ruby-identifier\">name</span>\n\
      154:         <span class=\"ruby-keyword kw\">else</span>\n\
      155:             <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Creating a session lock: %p&quot;</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-identifier\">lockuri</span>\n\
      156:             <span class=\"ruby-identifier\">lock</span> = <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Session</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Lock</span>.<span class=\"ruby-identifier\">create</span>( <span class=\"ruby-identifier\">lockuri</span>, <span class=\"ruby-identifier\">id</span> )\n\
      157:         <span class=\"ruby-keyword kw\">end</span>\n\
      158: \n\
      159:        <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">lock</span>\n\
      160:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create an <a href="Session/Lock.html">Arrow::Session::Lock</a> object for
      the specified <tt>store</tt> and <tt>id</tt>.
      </p>
    params: ( config, store, id )
  - visibility: public
    aref: M000355
    name: create_session_cookie
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 96</span>\n 96:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">create_session_cookie</span>( <span class=\"ruby-identifier\">txn</span>, <span class=\"ruby-identifier\">config</span>, <span class=\"ruby-identifier\">id</span>, <span class=\"ruby-identifier\">store</span>, <span class=\"ruby-identifier\">lock</span> )\n 97:         <span class=\"ruby-identifier\">scookie</span> = <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Cookie</span>.<span class=\"ruby-identifier\">new</span>(\n 98:                 <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">idName</span>,\n 99:                 <span class=\"ruby-identifier\">id</span>.<span class=\"ruby-identifier\">to_s</span>,\n\
      100:                 <span class=\"ruby-identifier\">:expires</span> =<span class=\"ruby-operator\">&gt;</span> <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">expires</span>,\n\
      101:                 <span class=\"ruby-identifier\">:path</span> =<span class=\"ruby-operator\">&gt;</span> <span class=\"ruby-value str\">'/'</span>\n\
      102:             )\n\
      103: \n\
      104:         <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Created cookie: %p&quot;</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-identifier\">scookie</span>.<span class=\"ruby-identifier\">to_s</span>\n\
      105:         <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">scookie</span>\n\
      106:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Set the session cookie if we&#8216;re really running under Apache.
      </p>
    params: ( txn, config, id, store, lock )
  - visibility: public
    aref: M000357
    name: create_store
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 135</span>\n\
      135:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">create_store</span>( <span class=\"ruby-identifier\">config</span>,  <span class=\"ruby-identifier\">id</span> )\n\
      136:         <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Creating a session store: %p&quot;</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">storeType</span>\n\
      137:         <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Session</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Store</span>.<span class=\"ruby-identifier\">create</span>( <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">storeType</span>, <span class=\"ruby-identifier\">id</span> )\n\
      138:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create an <a href="Session/Store.html">Arrow::Session::Store</a> object
      with the given <tt>id</tt>. The type and configuration of the store will be
      dictated by the specified <tt>config</tt> object.
      </p>
    params: ( config, id )
  - visibility: public
    aref: M000362
    name: new
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 206</span>\n\
      206:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">initialize</span>( <span class=\"ruby-identifier\">idobj</span>, <span class=\"ruby-identifier\">lock</span>, <span class=\"ruby-identifier\">store</span>, <span class=\"ruby-identifier\">txn</span>, <span class=\"ruby-identifier\">cookie</span>=<span class=\"ruby-keyword kw\">nil</span> )\n\
      207:         <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">ArgumentError</span>, <span class=\"ruby-value str\">&quot;No id object&quot;</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">idobj</span>\n\
      208:         <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">ArgumentError</span>, <span class=\"ruby-value str\">&quot;No lock object&quot;</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">lock</span>\n\
      209:         <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">ArgumentError</span>, <span class=\"ruby-value str\">&quot;No store object&quot;</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">store</span>\n\
      210: \n\
      211:         <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Initializing session with id: %p, lock: %p, store: %p&quot;</span> <span class=\"ruby-operator\">%</span>\n\
      212:             [ <span class=\"ruby-identifier\">idobj</span>, <span class=\"ruby-identifier\">lock</span>, <span class=\"ruby-identifier\">store</span> ]\n\
      213: \n\
      214:         <span class=\"ruby-ivar\">@id</span> = <span class=\"ruby-identifier\">idobj</span>\n\
      215:         <span class=\"ruby-ivar\">@lock</span> = <span class=\"ruby-identifier\">lock</span>\n\
      216:         <span class=\"ruby-ivar\">@store</span> = <span class=\"ruby-identifier\">store</span>\n\
      217:         <span class=\"ruby-ivar\">@txn</span> = <span class=\"ruby-identifier\">txn</span>\n\
      218:         <span class=\"ruby-ivar\">@cookie</span> = <span class=\"ruby-identifier\">cookie</span>\n\
      219: \n\
      220:         <span class=\"ruby-ivar\">@store</span>[ <span class=\"ruby-identifier\">:_session_id</span> ] = <span class=\"ruby-identifier\">id</span>.<span class=\"ruby-identifier\">to_s</span>\n\
      221:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create a <a href="Session.html#M000362">new</a> <a
      href="Session.html">Arrow::Session</a> object for the given <tt>idobj</tt>
      (an <a href="Session/Id.html">Arrow::Session::Id</a> object), using the
      given <tt>lock</tt> (an Arrow::Session::Locker object) for serializing
      access.
      </p>
    params: ( idobj, lock, store, txn, cookie=nil )
  - visibility: public
    aref: M000352
    name: parse_uri
    sourcecode: "    <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 62</span>\n\
      62:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">parse_uri</span>( <span class=\"ruby-identifier\">str</span> )\n\
      63:         <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">str</span> <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">str</span>.<span class=\"ruby-identifier\">is_a?</span>( <span class=\"ruby-constant\">URI</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Generic</span> )\n\
      64:         <span class=\"ruby-identifier\">str</span> <span class=\"ruby-operator\">+=</span> <span class=\"ruby-value str\">&quot;:.&quot;</span> <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-regexp re\">/^\\w+$/</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-identifier\">str</span>\n\
      65:         <span class=\"ruby-constant\">URI</span>.<span class=\"ruby-identifier\">parse</span>( <span class=\"ruby-identifier\">str</span> )\n\
      66:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Parse the given string into a URI object, appending the path part if it
      doesn&#8216;t exist.
      </p>
    params: ( str )
  - visibility: public
    aref: M000359
    name: session_cookie_name
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 164</span>\n\
      164:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">session_cookie_name</span>\n\
      165:         <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-ivar\">@config</span>.<span class=\"ruby-identifier\">idName</span>\n\
      166:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Return the configured name of the session cookie.
      </p>
    params: ()
  category: Class
  type: Public
- methods: 
  - visibility: protected
    aref: M000360
    name: def_delegated_readers
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 176</span>\n\
      176:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">def_delegated_readers</span>( <span class=\"ruby-operator\">*</span><span class=\"ruby-identifier\">syms</span> )\n\
      177:         <span class=\"ruby-identifier\">syms</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">sym</span><span class=\"ruby-operator\">|</span>\n\
      178:             <span class=\"ruby-identifier\">define_method</span>( <span class=\"ruby-identifier\">sym</span> ) <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-operator\">*</span><span class=\"ruby-identifier\">args</span><span class=\"ruby-operator\">|</span>\n\
      179:                 <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">read_lock</span>\n\
      180:                 <span class=\"ruby-ivar\">@store</span>.<span class=\"ruby-identifier\">send</span>( <span class=\"ruby-identifier\">sym</span>, <span class=\"ruby-operator\">*</span><span class=\"ruby-identifier\">args</span> )\n\
      181:             <span class=\"ruby-keyword kw\">end</span>\n\
      182:         <span class=\"ruby-keyword kw\">end</span>\n\
      183:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create delegators that readlock the session store before accessing it.
      </p>
    params: ( *syms )
  - visibility: protected
    aref: M000361
    name: def_delegated_writers
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 188</span>\n\
      188:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">def_delegated_writers</span>( <span class=\"ruby-operator\">*</span><span class=\"ruby-identifier\">syms</span> )\n\
      189:         <span class=\"ruby-identifier\">syms</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">sym</span><span class=\"ruby-operator\">|</span>\n\
      190:             <span class=\"ruby-identifier\">define_method</span>( <span class=\"ruby-identifier\">sym</span> ) <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-operator\">*</span><span class=\"ruby-identifier\">args</span><span class=\"ruby-operator\">|</span>\n\
      191:                 <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">write_lock</span>\n\
      192:                 <span class=\"ruby-ivar\">@store</span>.<span class=\"ruby-identifier\">send</span>( <span class=\"ruby-identifier\">sym</span>, <span class=\"ruby-operator\">*</span><span class=\"ruby-identifier\">args</span> )\n\
      193:             <span class=\"ruby-keyword kw\">end</span>\n\
      194:         <span class=\"ruby-keyword kw\">end</span>\n\
      195:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Create delegators that writelock the session store before accessing it.
      </p>
    params: ( *syms )
  category: Class
  type: Protected
- methods: 
  - visibility: public
    aref: M000364
    name: clear
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 252</span>\n\
      252:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">clear</span>\n\
      253:         <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">with_write_lock</span> <span class=\"ruby-keyword kw\">do</span>\n\
      254:             <span class=\"ruby-ivar\">@store</span>.<span class=\"ruby-identifier\">clear</span>\n\
      255:             <span class=\"ruby-ivar\">@store</span>[ <span class=\"ruby-identifier\">:_session_id</span> ] = <span class=\"ruby-ivar\">@id</span>.<span class=\"ruby-identifier\">to_s</span>\n\
      256:         <span class=\"ruby-keyword kw\">end</span>\n\
      257:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Clear all data from the session object.
      </p>
    params: ()
  - visibility: public
    aref: M000365
    name: each
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 262</span>\n\
      262:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">each</span>( <span class=\"ruby-operator\">&amp;</span><span class=\"ruby-identifier\">block</span> )\n\
      263:         <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">LocalJumpError</span>, <span class=\"ruby-value str\">&quot;no block given&quot;</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">block</span>\n\
      264:         <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">read_lock</span>\n\
      265:         <span class=\"ruby-ivar\">@store</span>.<span class=\"ruby-identifier\">each</span>( <span class=\"ruby-operator\">&amp;</span><span class=\"ruby-identifier\">block</span> )\n\
      266:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Enumerable iterface: iterate over the session&#8216;s key/value pairs,
      calling the given block once for <a href="Session.html#M000365">each</a>
      pair.
      </p>
    params: ( &amp;block )
  - visibility: public
    aref: M000367
    name: finish
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 286</span>\n\
      286:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">finish</span>\n\
      287:         <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">release_all_locks</span>\n\
      288:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Tell the session that it will not be used again in the current session.
      </p>
    params: ()
  - visibility: public
    aref: M000363
    name: remove
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 242</span>\n\
      242:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">remove</span>\n\
      243:         <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">with_write_lock</span> <span class=\"ruby-keyword kw\">do</span>\n\
      244:             <span class=\"ruby-ivar\">@store</span>.<span class=\"ruby-identifier\">remove</span>\n\
      245:         <span class=\"ruby-keyword kw\">end</span>\n\
      246:         <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">release_all_locks</span>\n\
      247:         <span class=\"ruby-ivar\">@cookie</span>.<span class=\"ruby-identifier\">expires</span> = <span class=\"ruby-constant\">Time</span>.<span class=\"ruby-identifier\">at</span>(<span class=\"ruby-value\">0</span>)\n\
      248:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Delete the session
      </p>
    params: ()
  - visibility: public
    aref: M000366
    name: save
    sourcecode: "     <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/session.rb, line 271</span>\n\
      271:     <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">save</span>\n\
      272:         <span class=\"ruby-keyword kw\">begin</span>\n\
      273:             <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Saving session data&quot;</span>\n\
      274:             <span class=\"ruby-ivar\">@store</span>.<span class=\"ruby-identifier\">save</span>\n\
      275:             <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Writing session cookie (%p)&quot;</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-ivar\">@cookie</span> ]\n\
      276:             <span class=\"ruby-ivar\">@txn</span>.<span class=\"ruby-identifier\">cookies</span>[ <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">class</span>.<span class=\"ruby-identifier\">session_cookie_name</span> ] = <span class=\"ruby-ivar\">@cookie</span>\n\
      277:         <span class=\"ruby-keyword kw\">ensure</span>\n\
      278:             <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">&quot;Releasing all locks&quot;</span>\n\
      279:             <span class=\"ruby-ivar\">@lock</span>.<span class=\"ruby-identifier\">release_all_locks</span>\n\
      280:         <span class=\"ruby-keyword kw\">end</span>\n\
      281:     <span class=\"ruby-keyword kw\">end</span>"
    m_desc: |-
      <p>
      Save the session to fixed storage and set the session cookie in the
      creating transaction&#8216;s outgoing headers.
      </p>
    params: ()
  category: Instance
  type: Public

sectitle

--- 

constants

--- 
- name: SVNRev
  desc: |+
    
    SVN Revision
    
  value: "%q$Rev: 437 $"
- name: SVNId
  desc: |+
    
    SVN Id
    
  value: "%q$Id: session.rb 437 2008-03-28 00:49:20Z deveiant $"

[Validate]

Generated with the Darkfish Rdoc Generator.