class Persistent::StorageSQLite
Constants
- DB_TABLE
- DB_TIMEOUT
Attributes
storage_details[RW]
storage_handler[RW]
Public Class Methods
new(storage_details)
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 15 def initialize(storage_details) raise ArgumentError.new("Storage details not provided") if storage_details.nil? or storage_details == "" @storage_details = storage_details @storage_handler = connect_to_database @storage_handler.busy_timeout = 30000 end
Public Instance Methods
clear()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 55 def clear EH.retry!(:args => []) do @storage_handler.execute("DELETE FROM #{DB_TABLE}") end end
delete_entry(key)
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 37 def delete_entry(key) EH.retry!(:args => [serialize(key)]) do @storage_handler.execute("DELETE FROM #{DB_TABLE} WHERE key=?", serialize(key)) end end
keys()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 49 def keys EH.retry!(:args => []) do @storage_handler.execute("SELECT key FROM #{DB_TABLE}").collect { |k| deserialize(k[0]) } end end
lookup_key(key)
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 30 def lookup_key(key) EH.retry!(:args => [serialize(key)]) do result = @storage_handler.execute("SELECT value, timestamp FROM #{DB_TABLE} WHERE key=?", serialize(key)) !result.nil? && !result.empty? ? [deserialize(result[0][0]), result[0][1]] : nil end end
save_key_value_pair(key, value, timestamp = nil)
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 22 def save_key_value_pair(key, value, timestamp = nil) delete_entry(key) time_entry = timestamp.nil? ? Time.now.to_s : timestamp.to_s EH.retry!(:args => [serialize(key), serialize(value), time_entry]) do @storage_handler.execute("INSERT INTO #{DB_TABLE} (key, value, timestamp) VALUES(?, ?, ?)",serialize(key), serialize(value), time_entry) end end
size()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 43 def size EH.retry!(:args => []) do @storage_handler.execute("SELECT value FROM #{DB_TABLE}").size end end
Private Instance Methods
connect_to_database()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 74 def connect_to_database File.exists?(@storage_details) ? open_database : create_database end
create_database()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 84 def create_database EH.retry!(:args => []) do @storage_handler = SQLite3::Database.new(@storage_details) create_table end @storage_handler end
create_table()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 92 def create_table EH.retry!(:args => []) do @storage_handler.execute("CREATE TABLE #{DB_TABLE}(key TEXT PRIMARY KEY, value TEXT, timestamp TEXT)") end @storage_handler end
deserialize(data)
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 67 def deserialize(data) Marshal.load(Base64.decode64(data)) rescue TypeError Marshal.load(data) end
open_database()
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 78 def open_database EH.retry!(:args => []) do SQLite3::Database.open(@storage_details) end end
serialize(data)
click to toggle source
# File lib/persistent-cache/storage_sqlite.rb, line 63 def serialize(data) Base64.encode64(Marshal.dump(data)) end