From bffbab8fbc8e0691f3d8375531a32ddb597d1edd Mon Sep 17 00:00:00 2001 From: James Dinkel Date: Thu, 28 Dec 2023 18:36:49 -0600 Subject: [PATCH] Added sequel with example setup --- Gemfile | 1 + README.md | 2 +- Rakefile | 33 +++++++++++++++++++++++++++++++ config.ru | 3 ++- db.rb | 4 ++++ migrate/001_create_users_table.rb | 11 +++++++++++ models.rb | 14 +++++++++++++ models/user.rb | 3 +++ views/index.erb | 2 +- 9 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 Rakefile create mode 100644 db.rb create mode 100644 migrate/001_create_users_table.rb create mode 100644 models.rb create mode 100644 models/user.rb diff --git a/Gemfile b/Gemfile index 6e8b26c..b668a39 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,7 @@ gem 'rack-unreloader' gem 'tilt' gem 'erubi' gem 'sequel' +gem 'rake' # Change to whatever database you plan to use gem 'sqlite3' diff --git a/README.md b/README.md index e8d83d1..159cce8 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Will need ruby; install it via package manager or a ruby manager like rbenv/ruby With this example, will basically just ignore the project's Gemfile. Debian 12 has a pretty current ruby version so just using it. ``` -sudo apt install ruby ruby-rack puma ruby-erubi ruby-tilt ruby-sequel ruby-sqlite3 +sudo apt install ruby ruby-rack puma ruby-erubi ruby-tilt ruby-sequel ruby-sqlite3 rake sudo gem install roda rack-unreloader ``` diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..4a4ce07 --- /dev/null +++ b/Rakefile @@ -0,0 +1,33 @@ +namespace :db do + + migrator = lambda do |version| + require_relative 'db' + Sequel.extension :migration + Sequel::Migrator.apply(DB, 'migrate', version) + end + + namespace :migrate do + + desc "Perform migration up to latest migration available" + task :up do + migrator.call(nil) + end + + desc "Perform migration all the way down (erase all data)" + task :down do + migrator.call(0) + end + + end + + desc "Erase all data, then bring back to latest migration" + task :reset do + migrator.call(0) + Sequel::Migrator.apply(DB, 'migrate') + end + + #desc "Migrate to a specific version" + #task :migrate do |version| + #end + +end diff --git a/config.ru b/config.ru index 4e24994..1af6d15 100644 --- a/config.ru +++ b/config.ru @@ -3,7 +3,8 @@ dev = ENV['RACK_ENV'] == 'development' require 'rack/unreloader' -Unreloader = Rack::Unreloader.new(:subclasses=>%w'Roda', :reload=>dev){App} +Unreloader = Rack::Unreloader.new(:subclasses=>%w'Roda Sequel::Model', reload: dev, autoload: dev){App} +Unreloader.require './models.rb' Unreloader.require './app.rb' run(dev ? Unreloader : App) diff --git a/db.rb b/db.rb new file mode 100644 index 0000000..5c72eb9 --- /dev/null +++ b/db.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true +require 'sequel/core' + +DB = Sequel.connect('sqlite://temp.db') diff --git a/migrate/001_create_users_table.rb b/migrate/001_create_users_table.rb new file mode 100644 index 0000000..29d513d --- /dev/null +++ b/migrate/001_create_users_table.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +Sequel.migration do + change do + create_table(:users) do + primary_key :id + String :name, unique: true, null: false + end + end +end + diff --git a/models.rb b/models.rb new file mode 100644 index 0000000..33c6865 --- /dev/null +++ b/models.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +require_relative 'db' +require 'sequel/model' + +if ENV['RACK_ENV'] == 'development' + Sequel::Model.cache_associations = false +end + +unless defined?(Unreloader) + require 'rack/unreloader' + Unreloader = Rack::Unreloader.new(reload: false, autoload: !ENV['NO_AUTOLOAD']) +end + +Unreloader.autoload('models'){|f| Sequel::Model.send(:camelize, File.basename(f).sub(/\.rb\z/, ''))} diff --git a/models/user.rb b/models/user.rb new file mode 100644 index 0000000..a4f2fa1 --- /dev/null +++ b/models/user.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true +class User < Sequel::Model +end diff --git a/views/index.erb b/views/index.erb index 4762d4c..31b3b2d 100644 --- a/views/index.erb +++ b/views/index.erb @@ -1,3 +1,3 @@

- Welcome to my new page! + Welcome to my new page! Running in <%= ENV['RACK_ENV'] %> mode!