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