Class: SequelSessionStorage
- Inherits:
-
Object
- Object
- SequelSessionStorage
- Defined in:
- lib/rsence/session/sequel_sessionstorage.rb
Overview
SequelSessionStorage is the SessionStorage backend for Sequel (SQL) database storage
Instance Method Summary collapse
-
#create_session_table ⇒ Object
Creates the ‘rsence_session’ table, if necessary This table is used to store sessions.
-
#create_uploads_table ⇒ Object
Creates the ‘rsence_uploads’ table, if necessary This table is used for storing temporary uploads before processing.
-
#create_version_table ⇒ Object
Creates the ‘rsence_version’ table, if necessary This table is used to check for the need of future database upgrades.
-
#db_close ⇒ Object
Closes database connection.
-
#db_init ⇒ Object
Checks database connectivity and loads stored sessions from the database.
-
#db_open ⇒ Object
Opens database connection.
-
#db_test ⇒ Object
Tests database connection.
- #del_upload(row_id) ⇒ Object
- #del_uploads(ticket_id, ses_id) ⇒ Object
- #get_upload_data(row_id) ⇒ Object
- #get_upload_meta(row_id) ⇒ Object
- #insert_session_data(ses_data) ⇒ Object
- #load_session_data ⇒ Object
- #new_upload_data(data) ⇒ Object
- #remove_all_session_data ⇒ Object
- #remove_session_data(ses_id) ⇒ Object
- #set_upload_data(upload_id, file_data) ⇒ Object
- #store_session_data(ses_data) ⇒ Object
-
#table_version ⇒ Object
returns the version in the rsence_version table.
Instance Method Details
#create_session_table ⇒ Object
Creates the ‘rsence_session’ table, if necessary This table is used to store sessions
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 57 def create_session_table db_open unless @db.table_exists?(:rsence_session) puts "Creating session table..." if RSence.args[:verbose] @db.create_table :rsence_session do primary_key( :id ) column( :cookie_key, String ) column( :ses_key, String ) column( :ses_timeout, Integer ) column( :user_id, Integer ) column( :ses_active, TrueClass ) column( :ses_stored, Integer ) column( :ses_data, File ) end end db_close end |
#create_uploads_table ⇒ Object
Creates the ‘rsence_uploads’ table, if necessary This table is used for storing temporary uploads before processing
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 91 def create_uploads_table db_open unless @db.table_exists?(:rsence_uploads) puts "Creating uploads table..." if RSence.args[:verbose] @db.create_table :rsence_uploads do primary_key( :id ) foreign_key( :ses_id, :rsence_session ) column( :upload_date, Integer ) column( :upload_done, Integer ) column( :ticket_id, String ) column( :file_size, Integer ) column( :file_name, String ) column( :file_mime, String ) column( :file_data, File ) end end db_close end |
#create_version_table ⇒ Object
Creates the ‘rsence_version’ table, if necessary This table is used to check for the need of future database upgrades
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 77 def create_version_table db_open unless @db.table_exists?(:rsence_version) puts "Creating version info table..." if RSence.args[:verbose] @db.create_table :rsence_version do Integer :version end @db[:rsence_version].insert(:version => 586) end db_close end |
#db_close ⇒ Object
Closes database connection
51 52 53 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 51 def db_close @db.disconnect end |
#db_init ⇒ Object
Checks database connectivity and loads stored sessions from the database
119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 119 def db_init create_session_table create_version_table create_uploads_table ## Used for future upgrades: # version = table_version return true end |
#db_open ⇒ Object
Opens database connection
9 10 11 12 13 14 15 16 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 9 def db_open # work-around for windows (drive letters causing confusion) if @db_uri.start_with?('sqlite://') @db = Sequel.sqlite( @db_uri.split('sqlite://')[1] ) else @db = Sequel.connect(@db_uri) end end |
#db_test ⇒ Object
Tests database connection
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 19 def db_test begin db_open if @db.table_exists?(:rsence_test) @db.drop_table(:rsence_test) end @db.create_table(:rsence_test) { primary_key :id; String :test } test_id = @db[:rsence_test].insert( :test => 'TestFoo' ) @db[:rsence_test].filter( :id => test_id ).update( :test => 'TestFoo2' ) @db[:rsence_test].filter( :id => test_id ).delete @db[:rsence_test].delete @db.drop_table(:rsence_test) db_close return true rescue => e if RSence.args[:debug] err_msg = [ "ERROR: SessionStorage couldn't open database", "#{e.class.to_s}, #{e.}", "Backtrace:", "\t"+e.backtrace.join("\n\t") ].join("\n")+"\n" $stderr.write( err_msg ) elsif RSence.args[:verbose] puts "Failed to open database '#{@db_uri}'." puts "Run RSence in debug mode for full error output." end return false end end |
#del_upload(row_id) ⇒ Object
228 229 230 231 232 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 228 def del_upload( row_id ) db_open @db[:rsence_uploads].filter( :id => row_id ).delete db_close end |
#del_uploads(ticket_id, ses_id) ⇒ Object
234 235 236 237 238 239 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 234 def del_uploads( ticket_id, ses_id ) db_open @db[:rsence_uploads].filter( :ticket_id => ticket_id ).delete @db[:rsence_uploads].filter( :ses_id => ses_id ).delete db_close end |
#get_upload_data(row_id) ⇒ Object
204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 204 def get_upload_data( row_id ) db_open row_datas = @db[:rsence_uploads].select( :upload_date, :upload_done, :file_name, :file_size, :file_mime, :file_data ).filter( :id => row_id ) db_close return row_datas.first end |
#get_upload_meta(row_id) ⇒ Object
216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 216 def ( row_id ) db_open row_datas = @db[:rsence_uploads].select( :upload_date, :upload_done, :file_name, :file_size, :file_mime ).filter( :id => row_id ) db_close return row_datas.first end |
#insert_session_data(ses_data) ⇒ Object
149 150 151 152 153 154 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 149 def insert_session_data( ses_data ) db_open new_id = @db[:rsence_session].insert( ses_data ) db_close return new_id end |
#load_session_data ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 131 def load_session_data @db[:rsence_session].all do |ses_row| ses_id = ses_row[:id] ses_data_dump = ses_row[:ses_data] if ses_data_dump.nil? remove_session_data( ses_id ) else begin ses_data = Marshal.load( ses_data_dump ) restore_session( ses_id, ses_data ) rescue => e warn "Unable to load session: #{ses_id}, because: #{e.}" remove_session_data( ses_id ) end end end end |
#new_upload_data(data) ⇒ Object
188 189 190 191 192 193 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 188 def new_upload_data( data ) db_open new_id = @db[:rsence_uploads].insert( data ) db_close return new_id end |
#remove_all_session_data ⇒ Object
181 182 183 184 185 186 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 181 def remove_all_session_data db_open @db[:rsence_session].delete if @db.table_exists?(:rsence_session) @db[:rsence_uploads].delete if @db.table_exists?(:rsence_uploads) db_close end |
#remove_session_data(ses_id) ⇒ Object
173 174 175 176 177 178 179 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 173 def remove_session_data( ses_id ) db_open # Deletes the session's row from the database @db[:rsence_uploads].filter(:ses_id => ses_id).delete @db[:rsence_session].filter(:id => ses_id).delete db_close end |
#set_upload_data(upload_id, file_data) ⇒ Object
195 196 197 198 199 200 201 202 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 195 def set_upload_data( upload_id, file_data ) db_open @db[:rsence_uploads].filter(:id => upload_id).update( { :file_data => Sequel.blob( file_data ), :upload_done => true } ) db_close end |
#store_session_data(ses_data) ⇒ Object
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 156 def store_session_data( ses_data ) ses_data_dump = Marshal.dump( ses_data ) ses_id = ses_data[:ses_id] db_open @db[:rsence_session].filter( :id => ses_id ).update( :cookie_key => ses_data[:cookie_key], :ses_key => ses_data[:ses_key], :user_id => ses_data[:user_id], :ses_data => Sequel.blob( ses_data_dump ), :ses_timeout => ses_data[:timeout], :ses_stored => Time.now.to_i ) db_close end |
#table_version ⇒ Object
returns the version in the rsence_version table
111 112 113 114 115 116 |
# File 'lib/rsence/session/sequel_sessionstorage.rb', line 111 def table_version db_open rsence_version = @db[:rsence_version].select(:version).all[0][:version] db_close return rsence_version end |