Changeset 1240
- Timestamp:
- 01/09/08 18:25:26 (9 months ago)
- Files:
-
- plugins/merb_sequel/Rakefile (modified) (1 diff)
- plugins/merb_sequel/lib/merb/orms/sequel/connection.rb (modified) (6 diffs)
- plugins/merb_sequel/lib/merb/session/sequel_session.rb (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
plugins/merb_sequel/Rakefile
r1232 r1240 5 5 NAME = "merb_sequel" 6 6 VERSION = "0.5" 7 AUTHOR = "Wayne E. Seguin "8 EMAIL = "wayneeseguin@gmail.com "7 AUTHOR = "Wayne E. Seguin, Lance Carlson" 8 EMAIL = "wayneeseguin@gmail.com, lancecarlson@gmail.com" 9 9 HOMEPAGE = "http://merb-plugins.rubyforge.org/merb_sequel/" 10 10 SUMMARY = "Merb plugin that provides support for Sequel and Sequel::Model" plugins/merb_sequel/lib/merb/orms/sequel/connection.rb
r1230 r1240 4 4 module Orms 5 5 module Sequel 6 6 7 class << self 8 7 9 def config_file() Merb.root / "config" / "database.yml" end 8 10 def sample_dest() Merb.root / "config" / "database.sample.yml" end … … 14 16 15 17 def config 18 16 19 @config ||= 17 begin 18 # Convert string keys to symbols 19 full_config = Erubis.load_yaml_file(config_file) 20 config = (Merb::Plugins.config[:merb_sequel] = {}) 21 (full_config[MERB_ENV.to_sym] || full_config[MERB_ENV]).each do |key, value| 22 config[key.to_sym] = value 23 end 24 config 20 begin 21 # Convert string keys to symbols 22 full_config = Erubis.load_yaml_file(config_file) 23 config = (Merb::Plugins.config[:merb_sequel] = {}) 24 (full_config[Merb.environment.to_sym] || full_config[Merb.environment]).each do |key, value| 25 config[key.to_sym] = value 25 26 end 27 config 28 end 29 26 30 end 27 31 28 32 # Database connects as soon as the gem is loaded 29 33 def connect 34 30 35 require "sequel" 31 36 require "sequel_model" … … 34 39 puts "#{Time.now.httpdate}: Connecting to the '#{config[:database]}' database on '#{config[:host]}' using '#{config[:adapter]}' ..." 35 40 connection = ::Sequel.connect(config_options(config)) 36 M ERB_LOGGER.error("Connection Error: #{e}") unless connection41 Merb.logger.error("Connection Error: #{e}") unless connection 37 42 connection 38 43 else … … 42 47 exit(1) 43 48 end 49 44 50 end 45 51 46 52 def config_options(config = {}) 53 47 54 options = {} 48 55 options[:adapter] = (config[:adapter] || "sqlite") … … 54 61 end 55 62 options[:database] = config[:database] if config[:database] 56 options[:logger] = M ERB_LOGGER63 options[:logger] = Merb.logger 57 64 options 58 65 end … … 67 74 68 75 end 76 69 77 end 78 70 79 end 71 80 plugins/merb_sequel/lib/merb/session/sequel_session.rb
r1214 r1240 1 require 'base64'1 require "base64" 2 2 3 3 module Merb 4 4 5 module SessionMixin 5 6 6 7 def setup_session 7 M ERB_LOGGER.info("Setting up session")8 Merb.logger.info("Setting up session") 8 9 before = cookies[_session_id_key] 9 10 request.session, cookies[_session_id_key] = Merb::SequelSession.persist(cookies[_session_id_key]) … … 11 12 @_new_cookie = cookies[_session_id_key] != before 12 13 end 13 14 14 15 def finalize_session 15 M ERB_LOGGER.info("Finalize session")16 Merb.logger.info("Finalize session") 16 17 request.session.save if @_fingerprint != Marshal.dump(request.session.data).hash 17 18 set_cookie(_session_id_key, request.session.values[:session_id], _session_expiry) if (@_new_cookie || request.session.needs_new_cookie) 18 19 end 19 20 20 21 end 21 22 … … 23 24 24 25 class SequelSession < Sequel::Model(table_name.to_sym) 26 25 27 set_schema do 26 28 primary_key :id … … 29 31 timestamp :created_at 30 32 end 31 33 32 34 attr_accessor :needs_new_cookie 33 35 34 36 class << self 35 37 # Generates a new session ID and creates a row for the new session in the database. 36 38 def generate 37 39 create(:session_id => Merb::SessionMixin::rand_uuid, 38 :data => marshal({}), :created_at => Time.now)40 :data => marshal({}), :created_at => Time.now) 39 41 end 40 42 41 43 # Gets the existing session based on the <tt>session_id</tt> available in cookies. 42 44 # If none is found, generates a new session. … … 50 52 [session, session.values[:session_id]] 51 53 end 52 54 53 55 # Don't try to reload ARStore::Session in dev mode. 54 56 def reloadable? #:nodoc: 55 57 false 56 58 end 57 59 58 60 def data_column_size_limit 59 61 255 60 62 end 61 63 62 64 def marshal(data) 63 65 Base64.encode64(Marshal.dump(data)) if data 64 66 end 65 67 66 68 def unmarshal(data) 67 69 Marshal.load(Base64.decode64(data)) if data 68 70 end 69 71 70 72 alias :create_table! :create_table 71 73 alias :drop_table! :drop_table 72 74 end 73 75 74 76 # Regenerate the Session ID 75 77 def regenerate … … 77 79 self.needs_new_cookie = true 78 80 end 79 81 80 82 # Recreates the cookie with the default expiration time 81 83 # Useful during log in for pushing back the expiration date … … 83 85 self.needs_new_cookie = true 84 86 end 85 87 86 88 # Lazy-delete of session data 87 89 def delete(key = nil) 88 90 key ? self.data.delete(key) : self.data.clear 89 91 end 90 92 91 93 def [](key) 92 94 data[key] 93 95 end 94 96 95 97 def []=(key, val) 96 98 data[key] = val 97 99 end 98 100 99 101 def empty? 100 102 data.empty? 101 103 end 102 104 103 105 def each(&b) 104 106 data.each(&b) 105 107 end 106 108 107 109 # Lazy-unmarshal session state. 108 110 def data 109 111 @data ||= self.class.unmarshal(@values[:data]) || {} 110 112 end 111 113 112 114 # Has the session been loaded yet? 113 115 def loaded? 114 116 !! @data 115 117 end 116 117 private118 118 119 private 120 119 121 attr_writer :data 120 122 121 123 before_save do # marshal_data! 122 124 # return false if !loaded? 123 125 @values[:data] = self.class.marshal(self.data) 124 126 end 125 127 126 128 # Ensures that the data about to be stored in the database is not 127 129 # larger than the data storage column. Raises 128 130 # ActionController::SessionOverflowError. 129 131 # before_save do # raise_on_session_data_overflow! 130 # return false if !loaded? 131 # limit = self.class.data_column_size_limit 132 # if loaded? and limit and read_attribute(@@data_column_name).size > limit 133 # raise MerbController::SessionOverflowError 134 # end 132 # return false if !loaded? 133 # limit = self.class.data_column_size_limit 134 # if loaded? and limit and read_attribute(@@data_column_name).size > limit 135 # raise MerbController::SessionOverflowError 135 136 # end 137 # end 138 136 139 end 137 140 … … 145 148 puts "Created sessions table." 146 149 end 147 150 148 151 end
