Module: Fmog::DB

Defined in:
lib/fmog/db.rb

Constant Summary collapse

DB_DIR =
XDG.new.data_home.join("fmog").to_s
DB_PATH =
File.join(DB_DIR, "fmog.db")

Class Method Summary collapse

Class Method Details

.connection ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/fmog/db.rb', line 12

def self.connection
  @connection ||= begin
    FileUtils.mkdir_p(DB_DIR)
    db = SQLite3::Database.new(DB_PATH)
    db.results_as_hash = true
    db.execute("PRAGMA foreign_keys = ON")
    migrate(db)
    db
  end
end

.migrate(db) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/fmog/db.rb', line 23

def self.migrate(db)
  db.execute(<<~SQL)
    CREATE TABLE IF NOT EXISTS feeds (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      url TEXT NOT NULL UNIQUE,
      title TEXT,
      last_fetched_at DATETIME,
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    )
  SQL

  db.execute(<<~SQL)
    CREATE TABLE IF NOT EXISTS items (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      feed_id INTEGER NOT NULL REFERENCES feeds(id) ON DELETE CASCADE,
      guid TEXT NOT NULL,
      title TEXT,
      url TEXT,
      body TEXT,
      published_at DATETIME,
      read_at DATETIME,
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
      UNIQUE(feed_id, guid)
    )
  SQL
end

.reset! ⇒ Object



50
51
52
# File 'lib/fmog/db.rb', line 50

def self.reset!
  @connection = nil
end