Skip to content

Instantly share code, notes, and snippets.

@tannerwelsh
Created May 7, 2013 18:50
Show Gist options
  • Save tannerwelsh/5535101 to your computer and use it in GitHub Desktop.
Save tannerwelsh/5535101 to your computer and use it in GitHub Desktop.
require_relative "university"
University.open_db
student = University::Student.new('Tanner Welsh')
student.save
student = University::Student.new('Mike Busch')
student.save
University::Student.find_by_id(1)
-- ---
-- Table 'students'
--
-- ---
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` VARCHAR NULL DEFAULT NULL
);
-- ---
-- Table 'classes'
--
-- ---
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`title` VARCHAR NULL DEFAULT NULL,
`department_id` INTEGER NULL DEFAULT NULL
);
-- ---
-- Table 'teachers'
--
-- ---
DROP TABLE IF EXISTS `teachers`;
CREATE TABLE `teachers` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` VARCHAR NULL DEFAULT NULL
);
-- ---
-- Table 'attendance'
--
-- ---
DROP TABLE IF EXISTS `attendance`;
CREATE TABLE `attendance` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`student_id` INTEGER NULL DEFAULT NULL,
`section_id` INTEGER NULL DEFAULT NULL,
`grade` CHAR(1) NULL DEFAULT NULL
);
-- ---
-- Table 'sections'
--
-- ---
DROP TABLE IF EXISTS `sections`;
CREATE TABLE `sections` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`start_time` INTEGER NULL DEFAULT NULL,
`end_time` INTEGER NULL DEFAULT NULL,
`days_of_week` VARCHAR(4) NULL DEFAULT NULL,
`class_id` INTEGER NULL DEFAULT NULL,
`teacher_id` INTEGER NULL DEFAULT NULL
);
-- ---
-- Table 'departments'
--
-- ---
DROP TABLE IF EXISTS `departments`;
CREATE TABLE `departments` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`title` VARCHAR NULL DEFAULT NULL
);
require 'sqlite3'
module University
DB_FILE = 'university.db'
SCHEMA = 'schema.sql'
def self.open_db
load_schema unless File.exists? DB_FILE
$db = SQLite3::Database.new(DB_FILE)
end
def self.load_schema
system "sqlite3 #{DB_FILE} < #{SCHEMA}"
end
class Student
attr_reader :name
attr_accessor :id
def initialize(name)
@name = name
end
def save
$db.execute("INSERT INTO students (name) VALUES (?);", self.name)
end
def self.find_by_id(id)
record = $db.execute("SELECT * FROM students WHERE id = ? LIMIT 1;", id).first
id, name = record
found_student = self.new(name)
found_student.id = id
found_student
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment