Class: Anemone::Storage::SQLite3

Inherits:
Object
  • Object
show all
Defined in:
lib/anemone/storage/sqlite3.rb

Instance Method Summary collapse

Constructor Details

#initialize(file) ⇒ SQLite3

Returns a new instance of SQLite3.



12
13
14
15
16
# File 'lib/anemone/storage/sqlite3.rb', line 12

def initialize(file)
  @db = ::SQLite3::Database.new(file)
  @db.busy_timeout = 4000
  create_schema
end

Instance Method Details

#[](url) ⇒ Object



18
19
20
21
22
23
# File 'lib/anemone/storage/sqlite3.rb', line 18

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) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/anemone/storage/sqlite3.rb', line 25

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

#closeObject



64
65
66
# File 'lib/anemone/storage/sqlite3.rb', line 64

def close
  @db.close
end

#delete(url) ⇒ Object



34
35
36
37
38
# File 'lib/anemone/storage/sqlite3.rb', line 34

def delete(url)
  page = self[url]
  @db.execute('DELETE FROM anemone_storage WHERE key = ?', url.to_s)
  page
end

#eachObject



40
41
42
43
44
45
# File 'lib/anemone/storage/sqlite3.rb', line 40

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) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/anemone/storage/sqlite3.rb', line 60

def has_key?(url)
  !!@db.get_first_value('SELECT id FROM anemone_storage WHERE key = ?', url.to_s)
end

#keysObject



56
57
58
# File 'lib/anemone/storage/sqlite3.rb', line 56

def keys
  @db.execute("SELECT key FROM anemone_storage ORDER BY id").map{|t| t[0]}
end

#merge!(hash) ⇒ Object



47
48
49
50
# File 'lib/anemone/storage/sqlite3.rb', line 47

def merge!(hash)
  hash.each { |key, value| self[key] = value }
  self
end

#sizeObject



52
53
54
# File 'lib/anemone/storage/sqlite3.rb', line 52

def size
  @db.get_first_value('SELECT COUNT(id) FROM anemone_storage')
end