This is a fork of rtomayko's Sinatra Sequel extension, which has apparently not been maintained since early 2013. This fork was adopted for incorporation into my other project, Canto. Versioning starts at 0.9.0, the version at the time of forking.
Extends Sinatra with a variety of extension methods for dealing with a SQL database using the Sequel ORM.
As a courtesy to the gem's original author, sinatra-sequel_extension
is not yet
published on https://rubygems.org pending the addition of substantial differentiating
features. Instead, you will need to use the following code to install
Install the sinatra-sequel_extension
gem along with one of the database adapters:
sudo gem install sinatra-sequel_extension --source https://github.com/danascheider/sinatra-sequel_extension
If you are using Bundler, then add the source to your Gemfile:
gem 'sinatra-sequel_extension', :git => 'git://github.com/danascheider/sinatra-sequel_extension.git'
Once listed in your Gemfile, this gem can be installed like other gems using
bundle install
. Be aware that gem list
will not display gems added in this manner.
I like to split database configuration and migrations out into a separate
database.rb
file and then require it from the main app file, but you can plop
the following code in about anywhere and it'll work just fine:
require 'sinatra'
require 'sinatra/sequel'
# Establish the database connection; or, omit this and use the DATABASE_URL
# environment variable as the connection string:
set :database, 'sqlite://foo.db'
# At this point, you can access the Sequel Database object using the
# "database" object:
puts "the foos table doesn't exist" if !database.table_exists?('foos')
# define database migrations. pending migrations are run at startup and
# are guaranteed to run exactly once per database.
migration "create teh foos table" do
database.create_table :foos do
primary_key :id
text :bar
integer :baz, :default => 42
timestamp :bizzle, :null => false
index :baz, :unique => true
end
end
# you can also alter tables
migration "everything's better with bling" do
database.alter_table :foos do
drop_column :baz
add_column :bling, :float
end
end
# models just work ...
class Foo < Sequel::Model
many_to_one :bar
end
# see:
Foo.filter(:baz => 42).each { |foo| puts(foo.bar.name) }
# access the database within the context of an HTTP request
get '/foos/:id' do
@foo = database[:foos].filter(:id => params[:id]).first
erb :foos
end
# or, using the model
delete '/foos/:id' do
@foo = Foo[params[:id]]
@foo.delete
end
-
The Sequel README and CHEATSHEET are quite useful.
-
Migrations are a light facade over Sequel's Schema module, like create_table and alter_table.
-
The best reference on Sequel Models is the README and the Associations doc. You might find this post on many_to_many / one_to_one useful.