Skip to content
Snippets Groups Projects
Commit 57b6f101 authored by Wellington Gabriel Vicente de Souza's avatar Wellington Gabriel Vicente de Souza
Browse files

add working model relationships and destroy methods

parent 168b5706
No related branches found
No related tags found
No related merge requests found
...@@ -4,13 +4,14 @@ ActiveRecord::Base.establish_connection :adapter => "sqlite3", ...@@ -4,13 +4,14 @@ ActiveRecord::Base.establish_connection :adapter => "sqlite3",
:database => "steamdb.sqlite3" :database => "steamdb.sqlite3"
class Game < ActiveRecord::Base; class Game < ActiveRecord::Base;
has_one :price has_one :price, dependent: :destroy
belongs_to :developer belongs_to :developer
has_and_belongs_to_many :categories has_many :category_games
has_many :categories, through: :category_games, dependent: :destroy
end end
class Developer < ActiveRecord::Base; class Developer < ActiveRecord::Base;
has_many :games has_many :games, dependent: :destroy
end end
class Price < ActiveRecord::Base; class Price < ActiveRecord::Base;
...@@ -18,5 +19,11 @@ class Price < ActiveRecord::Base; ...@@ -18,5 +19,11 @@ class Price < ActiveRecord::Base;
end end
class Category < ActiveRecord::Base; class Category < ActiveRecord::Base;
has_and_belongs_to_many :games has_many :category_games
has_many :games, through: :category_games, dependent: :destroy
end
class CategoryGame < ActiveRecord::Base;
belongs_to :category
belongs_to :game
end end
\ No newline at end of file
...@@ -28,7 +28,7 @@ ActiveRecord::Base.connection.create_table :categories do |t| ...@@ -28,7 +28,7 @@ ActiveRecord::Base.connection.create_table :categories do |t|
t.text :description t.text :description
end end
ActiveRecord::Base.connection.create_table :categories_games, id: false do |t| ActiveRecord::Base.connection.create_table :category_games, id: false do |t|
t.references :category t.references :category
t.references :game t.references :game
end end
\ No newline at end of file
require './models.rb' require './models.rb'
def is_a_string (string) def is_a_string (string)
string.start_with?('"') && string.end_with?('"') ? true : false string.start_with?('"') && string.end_with?('"') ? true : false
end end
def is_a_integer (integer) def is_a_integer (integer)
integer =~ /\A\d+\z/ ? true : false integer =~ /\A\d+\z/ ? true : false
end end
def insere(tabela, args) def insere(tabela, args)
error = false error = false
case tabela case tabela
when "developers" when "developers"
dev = Developer.new () dev = Developer.new ()
args.each do |x| args.each do |x|
x = x.split("=") x = x.split("=")
case x[0] case x[0]
when "name" when "name"
if is_a_string(x[1]) if is_a_string(x[1])
dev.name = x[1].tr('"',''); dev.name = x[1].tr('"','');
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "country" when "country"
if is_a_string(x[1]) if is_a_string(x[1])
dev.country = x[1].tr('"','') dev.country = x[1].tr('"','')
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
else else
puts "Atributo #{x[0]} não encontrado." puts "Atributo #{x[0]} não encontrado."
error = true error = true
end end
next next
end end
if (!error) if (!error)
dev.save dev.save
puts "Linha inserida na tabela #{tabela}." puts "Linha inserida na tabela #{tabela}."
end end
when "games" when "games"
game = Game.new () game = Game.new ()
args.each do |x| args.each do |x|
x = x.split("=") x = x.split("=")
case x[0] case x[0]
when "name" when "name"
if is_a_string(x[1]) if is_a_string(x[1])
game.name = x[1]; game.name = x[1].tr('"','')
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "description" when "description"
if is_a_string(x[1]) if is_a_string(x[1])
game.description = x[1] game.description = x[1].tr('"','')
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "is_released" when "is_released"
if x[1] === "true" || x[1] === "false" if x[1] === "true" || x[1] === "false"
game.is_released = x[1] === "true" ? true : false game.is_released = x[1] === "true" ? true : false
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "developer_id" when "developer_id"
if is_a_integer(x[1]) if is_a_integer(x[1])
game.developer_id = x[1] game.developer_id = x[1]
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
else else
puts "Atributo #{x[0]} não encontrado." puts "Atributo #{x[0]} não encontrado."
error = true error = true
end end
next next
end end
if (!error) if (!error)
game.save game.save
puts "Linha inserida na tabela #{tabela}." puts "Linha inserida na tabela #{tabela}."
end end
when "prices" when "prices"
price = Price.new () price = Price.new ()
args.each do |x| args.each do |x|
x = x.split("=") x = x.split("=")
case x[0] case x[0]
when "price_us" when "price_us"
if is_a_integer(x[1]) if is_a_integer(x[1])
price.price_us = x[1] price.price_us = x[1]
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "price_br" when "price_br"
if is_a_integer(x[1]) if is_a_integer(x[1])
price.price_br = x[1] price.price_br = x[1]
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "price_ru" when "price_ru"
if is_a_integer(x[1]) if is_a_integer(x[1])
price.price_ru = x[1] price.price_ru = x[1]
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "game_id" when "game_id"
if is_a_integer(x[1]) if is_a_integer(x[1])
price.game_id = x[1] price.game_id = x[1]
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
else else
puts "Atributo #{x[0]} não encontrado." puts "Atributo #{x[0]} não encontrado."
error = true error = true
end end
next next
end end
if (!error) if (!error)
price.save price.save
puts "Linha inserida na tabela #{tabela}." puts "Linha inserida na tabela #{tabela}."
end end
when "categories" when "categories"
category = Category.new () category = Category.new ()
args.each do |x| args.each do |x|
x = x.split("=") x = x.split("=")
case x[0] case x[0]
when "name" when "name"
if is_a_string(x[1]) if is_a_string(x[1])
category.name = x[1]; category.name = x[1].tr('"','')
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "description" when "description"
if is_a_string(x[1]) if is_a_string(x[1])
category.description = x[1] category.description = x[1].tr('"','')
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
else else
puts "Atributo #{x[0]} não encontrado." puts "Atributo #{x[0]} não encontrado."
error = true error = true
end end
next next
end end
if (!error) if (!error)
category.save category.save
puts "Linha inserida na tabela #{tabela}." puts "Linha inserida na tabela #{tabela}."
end end
when "categories_games" when "category_games"
category_game = CategoryGame.new () category_game = CategoryGame.new ()
args.each do |x| args.each do |x|
x = x.split("=") x = x.split("=")
case x[0] case x[0]
when "category_id" when "category_id"
if is_a_integer(x[1]) if is_a_integer(x[1])
category_game.category_id = x[1]; category_game.category_id = x[1];
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
when "game_id" when "game_id"
if is_a_integer(x[1]) if is_a_integer(x[1])
category_game.game_id = x[1] category_game.game_id = x[1]
else else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}!" puts "Erro de Síntaxe: Valor inválido para #{x[0]}!"
error = true error = true
end end
else else
puts "Atributo #{x[0]} não encontrado." puts "Atributo #{x[0]} não encontrado."
error = true error = true
end end
next next
end end
if (!error) if (!error)
category_game.save category_game.save
puts "Linha inserida na tabela #{tabela}." puts "Linha inserida na tabela #{tabela}."
end end
else else
puts "Tabela #{tabela} não encontrada." puts "Tabela #{tabela} não encontrada."
end end
end end
def exclui(tabela, args) def exclui(tabela, args)
to_be_deleted = nil to_be_deleted = nil
error = false error = false
case tabela case tabela
when "developers" when "developers"
to_be_deleted = Developer.all to_be_deleted = Developer.all
puts to_be_deleted args.each do |x|
args.each do |x| x = x.split("=")
x = x.split("=") case x[0]
case x[0] when "id"
when "name" if (is_a_integer(x[1]))
if is_a_string(x[1]) to_be_deleted = to_be_deleted.select {|delete| delete.id == x[1].to_i}
to_be_deleted = to_be_deleted.select {|delete| delete.name == x[1].tr('"','')} else
else puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
puts "Erro de Síntaxe: Valor inválido para #{{x[0]}}" error = true
error = true end
end when "name"
when "country" if is_a_string(x[1])
if is_a_string(x[1]) to_be_deleted = to_be_deleted.select {|delete| delete.name == x[1].tr('"','')}
to_be_deleted = to_be_deleted.select {|delete| delete.country == x[1].tr('"','')} else
else puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
puts "Erro de Síntaxe: Valor inválido para #{{x[0]}}" error = true
error = true end
end when "country"
else if is_a_string(x[1])
puts "Atributo #{x[0]} não encontrado." to_be_deleted = to_be_deleted.select {|delete| delete.country == x[1].tr('"','')}
error = true else
end puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
next error = true
end end
if to_be_deleted.length > 0 else
to_be_deleted.each do |d| puts "Atributo #{x[0]} não encontrado."
d.delete error = true
end end
end next
when "games" end
to_be_deleted = Game.all if to_be_deleted.length > 0
puts to_be_deleted to_be_deleted.each do |d|
args.each do |x| d.destroy
x = x.split("=") end
case x[0] end
when "name" when "games"
if is_a_string(x[1]) to_be_deleted = Game.all
to_be_deleted = to_be_deleted.select {|delete| delete.name == x[1].tr('"','')} args.each do |x|
else x = x.split("=")
puts "Erro de Síntaxe: Valor inválido para #{{x[0]}}" case x[0]
error = true when "id"
end if (is_a_integer(x[1]))
when "description" to_be_deleted = to_be_deleted.select {|delete| delete.id == x[1].to_i}
if is_a_string(x[1]) else
to_be_deleted = to_be_deleted.select {|delete| delete.country == x[1].tr('"','')} puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
else error = true
puts "Erro de Síntaxe: Valor inválido para #{{x[0]}}" end
error = true when "name"
end if is_a_string(x[1])
when "is_released" to_be_deleted = to_be_deleted.select {|delete| delete.name == x[1].tr('"','')}
if x[1] === "true" || x[1] === "false" else
to_be_deleted = to_be_deleted.select {|delete| (delete.is_released == (x[1] === "true" ? true : false))} puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
else error = true
puts "Erro de Síntaxe: Valor inválido para #{{x[0]}}" end
error = true when "description"
end if is_a_string(x[1])
when "description" to_be_deleted = to_be_deleted.select {|delete| delete.country == x[1].tr('"','')}
if is_a_integer(x[1]) else
to_be_deleted = to_be_deleted.select {|delete| delete.developer_id == x[1]} puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
else error = true
puts "Erro de Síntaxe: Valor inválido para #{{x[0]}}" end
error = true when "is_released"
end if x[1] === "true" || x[1] === "false"
else to_be_deleted = to_be_deleted.select {|delete| (delete.is_released == (x[1] === "true" ? true : false))}
puts "Atributo #{x[0]} não encontrado." else
error = true puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
end error = true
next end
end when "developer_id"
if to_be_deleted.length > 0 if is_a_integer(x[1])
to_be_deleted.each do |d| to_be_deleted = to_be_deleted.select {|delete| delete.developer_id == x[1].to_i}
d.delete else
end puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
end error = true
when "prices" end
else
when "categories" puts "Atributo #{x[0]} não encontrado."
error = true
when "categories_games" end
next
else end
puts "Tabela #{tabela} não encontrada." if to_be_deleted.length > 0
end to_be_deleted.each do |d|
d.destroy
end
end
when "prices"
to_be_deleted = Price.all
args.each do |x|
x = x.split("=")
case x[0]
when "id"
if (is_a_integer(x[1]))
to_be_deleted = to_be_deleted.select {|delete| delete.id == x[1].to_i}
else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
error = true
end
when "price_us"
if is_a_integer(x[1])
to_be_deleted = to_be_deleted.select {|delete| delete.price_us == x[1].to_i}
else
puts "Erro de Síntaxe: valor inválido para #{x[0]}"
error = true
end
when "price_br"
if is_a_integer(x[1])
to_be_deleted = to_be_deleted.select {|delete| delete.price_br == x[1].to_i}
else
puts "Erro de Síntaxe: valor inválido para #{x[0]}"
error = true
end
when "price_ru"
if is_a_integer(x[1])
to_be_deleted = to_be_deleted.select {|delete| delete.price_ru == x[1].to_i}
else
puts "Erro de Síntaxe: valor inválido para #{x[0]}"
error = true
end
when "game_id"
if is_a_integer(x[1])
to_be_deleted = to_be_deleted.select {|delete| delete.game_id == x[1].to_i}
else
puts "Erro de Síntaxe: valor inválido para #{x[0]}"
error = true
end
else
puts "Atributo #{x[0]} não encontrado."
error = true;
end
next
end
if to_be_deleted.length > 0
to_be_deleted.each do |d|
d.destroy
end
end
when "categories"
to_be_deleted = Category.all
args.each do |x|
x = x.split("=")
case x[0]
when "id"
if (is_a_integer(x[1]))
to_be_deleted = to_be_deleted.select {|delete| delete.id == x[1].to_i}
else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
error = true
end
when "name"
if is_a_string(x[1])
to_be_deleted = to_be_deleted.select {|delete| delete.name == x[1].tr('"','')}
else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
error = true
end
when "description"
if is_a_string(x[1])
to_be_deleted = to_be_deleted.select {|delete| delete.name == x[1].tr('"','')}
else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
error = true
end
else
puts "Atributo #{x[0]} não encontrado."
error = true;
end
next
end
if to_be_deleted.length > 0
to_be_deleted.each do |d|
d.destroy
end
end
when "category_games"
to_be_deleted = CategoryGame.all
args.each do |x|
x = x.split("=")
case x[0]
when "category_id"
if (is_a_integer(x[1]))
to_be_deleted = to_be_deleted.select {|delete| delete.category_id == x[1].to_i}
else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
error = true
end
when "game_id"
if (is_a_integer(x[1]))
to_be_deleted = to_be_deleted.select {|delete| delete.category_id == x[1].to_i}
else
puts "Erro de Síntaxe: Valor inválido para #{x[0]}"
error = true
end
else
puts "Atributo #{x[0]} não encontrado."
error = true;
end
next
end
if to_be_deleted.length > 0
to_be_deleted.each do |d|
d.destroy
end
end
else
puts "Tabela #{tabela} não encontrada."
end
end end
def altera(tabela) def altera(tabela)
case tabela case tabela
when "developers" when "developers"
#???????? como alterar? sintaxe do comando #???????? como alterar? sintaxe do comando
when "games" when "games"
when "prices" when "prices"
when "categories" when "categories"
when "categories_games" when "category_games"
else else
puts "Tabela #{tabela} não encontrada." puts "Tabela #{tabela} não encontrada."
end end
end end
def lista(tabela) def lista(tabela)
case tabela case tabela
when "developers" when "developers"
lista = Developer.all lista = Developer.all
lista.each do |l| puts "id|name|country"
puts "#{l.id}|#{l.name}|#{l.country}" lista.each do |l|
end puts "#{l.id}|#{l.name}|#{l.country}"
when "games" end
lista = Game.all when "games"
lista.each do |l| lista = Game.all
puts "#{l.id}|#{l.name}|#{l.description}|#{l.is_released}|#{l.developer_id}|#{l.price_id}" puts "id|name|description|is_released|developer_id"
end lista.each do |l|
when "prices" puts "#{l.id}|#{l.name}|#{l.description}|#{l.is_released}|#{l.developer_id}"
lista = Price.all end
lista.each do |l| when "prices"
puts "#{l.id}|#{l.price_us}|#{l.price_br}|#{l.price_ru}|#{l.game_id}" lista = Price.all
end puts "id|price_us|price_br|price_ru|game_id"
when "categories" lista.each do |l|
lista = Category.all puts "#{l.id}|#{l.price_us}|#{l.price_br}|#{l.price_ru}|#{l.game_id}"
lista.each do |l| end
puts "#{l.id}|#{l.name}|#{l.description}" when "categories"
end lista = Category.all
when "categories_games" puts "id|name|description"
lista = CategoryGame.all lista.each do |l|
lista.each do |l| puts "#{l.id}|#{l.name}|#{l.description}"
puts "#{l.id}|#{l.category_id}|#{l.game_id}" end
end when "category_games"
else lista = CategoryGame.all
puts "Tabela #{tabela} não encontrada." puts "category_id|game_id"
end lista.each do |l|
if (tabela) puts "#{l.category_id}|#{l.game_id}"
puts "Tabela #{tabela} listada com sucesso!" end
end else
puts "Tabela #{tabela} não encontrada."
end
if (tabela)
puts "Tabela #{tabela} listada com sucesso!"
end
end end
puts "Olá! Seja bem vindo ao SteamDB!" puts "Olá! Seja bem vindo ao SteamDB!"
while true do while true do
args = gets.split(" ") args = gets.split(" ")
case args[0] case args[0]
when "insere" when "insere"
insere(args[1],args[2..args.length-1]) insere(args[1],args[2..args.length-1])
when "exclui" when "exclui"
exclui(args[1],args[2..args.length-1]) exclui(args[1],args[2..args.length-1])
when "altera" when "altera"
altera(args[1],args[2..args.length-1]) altera(args[1],args[2..args.length-1])
when "lista" when "lista"
lista(args[1]) lista(args[1])
when "sair" when "sair"
exit() exit()
else else
puts "Comando não encontrado." puts "Comando não encontrado."
end end
end end
# 1 x n = 1 usuário tendo vários jogos # 1 x n = 1 usuário tendo vários jogos
# 1 x 1 = 1 jogo só tem 1 tabela de preços (preços por país) # 1 x 1 = 1 jogo só tem 1 tabela de preços (preços por país)
# n x n = vários jogos tem várias categorias # n x n = vários jogos tem várias categorias
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment