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