public
Description: Sinatra extension that adds Sequel ORM features, database config, and database migrations
Homepage:
Clone URL: git://github.com/rtomayko/sinatra-sequel.git
name age message
file .gitignore Tue Aug 25 22:56:31 -0700 2009 Ignore VIM swap file. Signed-off-by: Ryan Toma... [Dylan Egan]
file COPYING Sat Aug 08 01:57:06 -0700 2009 add COPYING file -- MIT license [rtomayko]
file README.md Sat Aug 08 01:49:23 -0700 2009 first crack at README [rtomayko]
file Rakefile Sat Aug 08 02:14:22 -0700 2009 add gem packaging stuff to Rakefile [rtomayko]
directory lib/ Tue Aug 25 22:56:34 -0700 2009 Define a method for each available adapter so y... [Dylan Egan]
file sinatra-sequel.gemspec Sat Aug 08 02:14:22 -0700 2009 add gem packaging stuff to Rakefile [rtomayko]
directory spec/ Tue Aug 25 22:56:34 -0700 2009 Define a method for each available adapter so y... [Dylan Egan]
README.md

Sinatra Sequel Extension

Extends Sinatra with a variety of extension methods for dealing with a SQL database using the Sequel ORM.

Install the sinatra-sequel gem along with one of the database adapters:

sudo gem install sequel sinatra-sequel
sudo gem install sqlite3
sudo gem install mysql
sudo gem install postgres

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

Sequel Reference Material