This is a very simple framework to be able to access database rows as objects without forcing you to inherit from a Model class. Instead you create the class-hierarchy you want and use mixin to add persistance functionality to the object.

It a lot simpler than an real Object-Relation-Mapper since it’s ignores relations.

The benefit of this framework is that you can write code like this:

class AnObject

include DBStruct
@non_persisted_field
attr_accessor :non_persisted_field

def initialize(*args)
  @non_persisted_field = args[0]
end

def return_value_from_field
  return @non_persisted_field
end

end

Create a simple migration:

class CreateDb < Sequel::Migration

def up
  create_table :person do
    primary_key :id
    text :name
    float :amount
    integer :age
  end
end

end

An then start coding. To create new field you only have to add it to the migration.

DB = Sequel.sqlite '', :logger => [Logger.new($stdout)]
CreateDb.apply(DB,:up)
AnObject.bind_table(DB,:person)

r = AnObject.template
r.name = 'Donald'
r.amount = 10.1
r.age = 77

r.insert(DB)

r.age = 98
r.update(DB)
r.delete(DB)

This framework relies heavely on the work of others (Sequel and OpenStruct)

Morten Udnæs.