Add Sequel + SQLite setup with migrate and rollback tasks
Assisted-by: GLM-5.1 via pi
change wvzlwsknuoktzlnsqrwrtlstuyoullxn
commit 3befaa67041e9fa97f4a9ff7403e4539c107c4ea
author Alpha Chen <alpha@kejadlen.dev>
date
parent xkrkrzqw
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e069230
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/db/*.db
diff --git a/Rakefile b/Rakefile
index a06b1c5..de53127 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,6 +1,7 @@
 # frozen_string_literal: true
 
 require "rake/testtask"
+require_relative "lib/db"
 
 Rake::TestTask.new(:test) do |t|
   t.libs << "test"
@@ -9,3 +10,26 @@ Rake::TestTask.new(:test) do |t|
 end
 
 task default: :test
+
+namespace :db do
+  desc "Run pending migrations"
+  task :migrate do
+    if Dir.empty?("db/migrate")
+      puts "No migrations."
+    else
+      Sequel::Migrator.run(DB, "db/migrate")
+      puts "Migrated."
+    end
+  end
+
+  desc "Rollback the last migration"
+  task :rollback do
+    version = DB[:schema_migrations].order(Sequel.desc(:filename)).limit(1).get(:filename)
+    if version
+      Sequel::Migrator.run(DB, "db/migrate", target: 0, current: version.sub(/\.rb$/, ""))
+      puts "Rolled back #{version}."
+    else
+      puts "Nothing to rollback."
+    end
+  end
+end
diff --git a/db/migrate/.gitkeep b/db/migrate/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/lib/db.rb b/lib/db.rb
new file mode 100644
index 0000000..bd44788
--- /dev/null
+++ b/lib/db.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+require "sequel"
+require "sequel/extensions/migration"
+
+DB = Sequel.connect("sqlite://db/domus.db")