Skip to content

Instantly share code, notes, and snippets.

@claytonflesher
Created June 28, 2015 19:02
Show Gist options
  • Save claytonflesher/40cd430d495f66ff116b to your computer and use it in GitHub Desktop.
Save claytonflesher/40cd430d495f66ff116b to your computer and use it in GitHub Desktop.
require "pg"
module Todo
class Database
READ_ONLY = true
def initialize
@db = PG.connect(dbname: 'todo')
db.prepare("new_user", "INSERT INTO users (email, password, first_name, last_name) VALUES ($1, $2, $3, $4);")
db.prepare("authentication", "SELECT email, password FROM users WHERE email = $1 AND password = $2;")
db.prepare("load_up", "SELECT * FROM users WHERE email = $1;")
db.prepare("emails", "SELECT email FROM users WHERE email = $1;")
end
attr_reader :db
def valid?(email)
check_if_email_available(email)
end
def errors(email)
errors = [ ]
unless check_if_email_available(email)
errors << "#{email} is already taken. Please login or use another."
end
end
def setup
db.exec("CREATE TABLE IF NOT EXISTS users (
email text,
password text,
first_name text,
last_name text );"
)
end
def save_user(user)
db.exec_prepared("new_user", [user.email, user.password, user.first_name, user.last_name])
p user.email
end
def authenticate(email:, password:)
user_data = {"email" => nil, "password" => nil }
db.exec_prepared("authentication", [email, password]).each { |result|
result.each { |line|
user_data[line[0]] = line[1]
}
}
if user_data["email"] == email && user_data["password"] == password
user_data["email"]
else
nil
end
end
def load_user(email)
user_data = {}
db.exec_prepared("load_up", [email]).each { |result|
result.each { |line|
user_data[line[0]] = line[1]
}
}
user_data["email"]
end
private
def check_if_email_available(email)
user_data = {"email" => nil }
db.exec_prepared("emails", [email]).each { |result|
result.each { |line|
user_data[line[0]] = line[1]
}
}
user_data["email"].nil?
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment