Add Sequel + SQLite setup with migrate and rollback tasks
Assisted-by: GLM-5.1 via pi
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")