class Anemone::Storage::SQLite3
Public Class Methods
new(file)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 12 def initialize(file) @db = ::SQLite3::Database.new(file) create_schema end
Public Instance Methods
[](url)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 17 def [](url) value = @db.get_first_value('SELECT data FROM anemone_storage WHERE key = ?', url.to_s) if value Marshal.load(value) end end
[]=(url, value)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 24 def []=(url, value) data = Marshal.dump(value) if has_key?(url) @db.execute('UPDATE anemone_storage SET data = ? WHERE key = ?', data, url.to_s) else @db.execute('INSERT INTO anemone_storage (data, key) VALUES(?, ?)', data, url.to_s) end end
close()
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 63 def close @db.close end
delete(url)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 33 def delete(url) page = self[url] @db.execute('DELETE FROM anemone_storage WHERE key = ?', url.to_s) page end
each() { |row, value| ... }
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 39 def each @db.execute("SELECT key, data FROM anemone_storage ORDER BY id") do |row| value = Marshal.load(row[1]) yield row[0], value end end
has_key?(url)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 59 def has_key?(url) !!@db.get_first_value('SELECT id FROM anemone_storage WHERE key = ?', url.to_s) end
keys()
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 55 def keys @db.execute("SELECT key FROM anemone_storage ORDER BY id").map{|t| t[0]} end
merge!(hash)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 46 def merge!(hash) hash.each { |key, value| self[key] = value } self end
size()
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 51 def size @db.get_first_value('SELECT COUNT(id) FROM anemone_storage') end
Private Instance Methods
create_schema()
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 69 def create_schema @db.execute_batch <<SQL create table if not exists anemone_storage ( id INTEGER PRIMARY KEY ASC, key TEXT, data BLOB ); create index if not exists anemone_key_idx on anemone_storage (key); SQL end
load_page(hash)
click to toggle source
# File lib/anemone/storage/sqlite3.rb, line 80 def load_page(hash) BINARY_FIELDS.each do |field| hash[field] = hash[field].to_s end Page.from_hash(hash) end