diff options
-rw-r--r-- | lib/zorglub/config.rb | 3 | ||||
-rw-r--r-- | lib/zorglub/node.rb | 11 | ||||
-rw-r--r-- | lib/zorglub/session.rb | 26 |
3 files changed, 29 insertions, 11 deletions
diff --git a/lib/zorglub/config.rb b/lib/zorglub/config.rb index 70fdfcc..3916ac7 100644 --- a/lib/zorglub/config.rb +++ b/lib/zorglub/config.rb @@ -8,7 +8,8 @@ module Zorglub :engine => nil, :view_dir => 'view', :layout_dir => 'layout', - :default_layout => 'default' + :default_layout => 'default', + :session_on => false } @engines = { } class << self diff --git a/lib/zorglub/node.rb b/lib/zorglub/node.rb index 2e080ca..14808ae 100644 --- a/lib/zorglub/node.rb +++ b/lib/zorglub/node.rb @@ -33,8 +33,6 @@ module Zorglub action = {:engine=>engine,:layout=>layout,:view=>File.join(r,meth),:method=>meth,:args=>args} node = self.new Rack::Request.new(env), Rack::Response.new, action return error_404 node if not node.respond_to? meth - # TODO - # - session node.realize end # @@ -58,9 +56,8 @@ module Zorglub # def realize @content = self.send @action[:method], *@action[:args] - e = Config.engine_proc @action[:engine] - v = view - l = layout + e, v, l = Config.engine_proc(@action[:engine]), view, layout + # TODO compile and cache @content = e.call v, self if e and File.exists? v @content = e.call l, self if e and File.exists? l response.write @content @@ -90,6 +87,10 @@ module Zorglub self.class.r end # + def session + @session ||= Session.new( Config.session_on ? @request.cookies : {} ) + end + # def r File.join map, @action[:method] end diff --git a/lib/zorglub/session.rb b/lib/zorglub/session.rb index b119e2b..da30deb 100644 --- a/lib/zorglub/session.rb +++ b/lib/zorglub/session.rb @@ -4,13 +4,29 @@ require 'securerandom' # module Zorglub # - Config.session_id_length ||= 64 - Config.session_ttl ||= (60 * 60 * 24 * 5) - # class Session # - def gen_session_id - SecureRandom.hex Config.session_id_length + @session_key = 'zorglub.sid' + @session_data = {} + class << self + attr_reader :session_key, :session_data + end + # + def initialize cookies + @sid = cookies[self.class.session_key] + @data = self.class.session_data[@sid]||={} + end + # + def exists? + not @sid.nil? + end + # + def [] idx + @data[idx] + end + # + def []= idx, v + @data[idx] = v end # end |