A lightweight Object-Relational Mapping (ORM) library for Ruby. Allows you to keep code DRY and easily perform database operations in an object-oriented manner.


  1. From the demo directory of this repo, open pry or irb in the console
  2. load 'hp_demo.rb'
  3. Use hp_demo.rb and the API section below as a reference to play around with the data

How to Use WORMY

  • Navigate to the folder in your directory where you would like your .db database file to be saved.
  • If you have an existing database.rb file you need to rewrite, run rm database.db
  • Run cat '{YOUR_SQL_FILE_NAME}' | sqlite3 'database.db' (replacing YOUR_SQL_FILE_NAME with your own .sql file)
  • Then, in your project, open a connection with DBConnection.open('database.db')


  • SQLite3
  • ActiveSupport::Inflector


Associations between models are defined by simple class methods, like so:

class Pet < WORMY::Base
  belongs_to :owner,
    class_name: "Wizard"

  has_one_through :house, :owner, :house


Querying and updating the database is made easy with WORMY::Base's methods like:

  • ::all
  • ::count
  • ::destroy_all
  • ::find
  • ::first
  • ::last
  • ::where
  • #create
  • #save
  • #destroy

Perform custom model validations by adding a call to validates in your subclass definition:

class House < WORMY::Base
  has_many :wizards
  has_many_through :pets, :wizards, :pets
  validates :house_name

  def house_name
    ["Gryffindor", "Slytherin", "Ravenclaw", "Hufflepuff"].include?(self.name)



WORMY opens a connection to a provided database file by instantiating a singleton of SQLite3::Database via DBConnection. DBConnection uses native SQLite3::Database methods (execute, execute2, last_insert_row_id) to allow WORMY to perform complex SQL queries using heredocs. The Searchable and Associatable modules extend WORMY::Base to provide an intuitive API.

WORMY emphasizes convention over configuration by setting sensible defaults for associations, but also allows for easy overrides if desired.