diff --git a/T2/steamdb.rb b/T2/steamdb.rb index f42c55cff0894be9d58eb764e9d9b31540655adc..54f8ae6dbf3150ff8541b7b9f6dd23acd3723aeb 100644 --- a/T2/steamdb.rb +++ b/T2/steamdb.rb @@ -233,37 +233,38 @@ def insere(tabela, args) end end -def exclui(tabela, args) - to_be_deleted = nil +def select_rows(tabela, args) + selected = [] error = false case tabela when "developers" - to_be_deleted = Developer.all + selected = Developer.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} + selected = selected.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('"','')} + selected = selected.select {|delete| delete.name == x[1].tr('"','')} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true end when "country" if is_a_string(x[1]) - to_be_deleted = to_be_deleted.select {|delete| delete.country == x[1].tr('"','')} + selected = selected.select {|delete| delete.country == x[1].tr('"','')} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true end else + puts "foi no select" puts "Atributo #{x[0]} não encontrado." error = true end @@ -272,48 +273,42 @@ def exclui(tabela, args) end next end - if to_be_deleted.length > 0 - to_be_deleted.each do |d| - d.destroy - end - puts "#{to_be_deleted.length} linha(s) deletada(s) da tabela #{tabela}!" - end when "games" - to_be_deleted = Game.all + selected = Game.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} + selected = selected.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('"','')} + selected = selected.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.country == x[1].tr('"','')} + selected = selected.select {|delete| delete.country == x[1].tr('"','')} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true end when "is_released" if x[1] === "true" || x[1] === "false" - to_be_deleted = to_be_deleted.select {|delete| (delete.is_released == (x[1] === "true" ? true : false))} + selected = selected.select {|delete| (delete.is_released == (x[1] === "true" ? true : false))} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true end when "developer_id" if is_a_integer(x[1]) - to_be_deleted = to_be_deleted.select {|delete| delete.developer_id == x[1].to_i} + selected = selected.select {|delete| delete.developer_id == x[1].to_i} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true @@ -327,48 +322,42 @@ def exclui(tabela, args) end next end - if to_be_deleted.length > 0 - to_be_deleted.each do |d| - d.destroy - end - puts "#{to_be_deleted.length} linha(s) deletada(s) da tabela #{tabela}!" - end when "prices" - to_be_deleted = Price.all + selected = 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} + selected = selected.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} + selected = selected.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} + selected = selected.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} + selected = selected.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} + selected = selected.select {|delete| delete.game_id == x[1].to_i} else puts "Erro de SÃntaxe: valor inválido para #{x[0]}" error = true @@ -382,34 +371,28 @@ def exclui(tabela, args) end next end - if to_be_deleted.length > 0 - to_be_deleted.each do |d| - d.destroy - end - puts "#{to_be_deleted.length} linha(s) deletada(s) da tabela #{tabela}!" - end when "categories" - to_be_deleted = Category.all + selected = 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} + selected = selected.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('"','')} + selected = selected.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('"','')} + selected = selected.select {|delete| delete.name == x[1].tr('"','')} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true @@ -423,27 +406,21 @@ def exclui(tabela, args) end next end - if to_be_deleted.length > 0 - to_be_deleted.each do |d| - d.destroy - end - puts "#{to_be_deleted.length} linha(s) deletada(s) da tabela #{tabela}!" - end when "category_games" - to_be_deleted = CategoryGame.all + selected = 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} + selected = selected.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} + selected = selected.select {|delete| delete.category_id == x[1].to_i} else puts "Erro de SÃntaxe: Valor inválido para #{x[0]}" error = true @@ -457,32 +434,228 @@ def exclui(tabela, args) end next end - if to_be_deleted.length > 0 - to_be_deleted.each do |d| - d.destroy - end - puts "#{to_be_deleted.length} linha(s) deletada(s) da tabela #{tabela}!" - end else puts "Tabela #{tabela} não encontrada." end + return selected end -.select {|alt| alt.name == x[1].tr('"','')} +def exclui(tabela, args) + selected = select_rows(tabela,args) + if selected.length > 0 + selected.each do |d| + d.destroy + end + puts "#{selected.length} linha(s) deletada(s) da tabela #{tabela}!" + end +end def altera(tabela, args) error = false case tabela when "developers" - + selected = select_rows(tabela, args[0..0]) + args[1..args.length-1].each do |x| + x = x.split("=") + selected.each do |dev| + case x[0] + when "name" + if is_a_string(x[1]) + dev.name = x[1].tr('"',''); + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "country" + if is_a_string(x[1]) + dev.country = 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 + if error + break + else + dev.save + end + end + next + end + if !error + puts "#{selected.length} linha(s) atualizada(s) na tabela #{tabela}!" + end when "games" - + selected = select_rows(tabela, args[0..0]) + args[1..args.length-1].each do |x| + x = x.split("=") + selected.each do |game| + case x[0] + when "name" + if is_a_string(x[1]) + game.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]) + game.description = x[1].tr('"','') + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "is_released" + if x[1] === "true" || x[1] === "false" + game.is_released = x[1] === "true" ? true : false + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "developer_id" + if is_a_integer(x[1]) + game.developer_id = x[1] + 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 + if error + break + else + game.save + end + end + next + end + if !error + puts "#{selected.length} linha(s) atualizada(s) na tabela #{tabela}!" + end when "prices" - + selected = select_rows(tabela, args[0..0]) + args[1..args.length-1].each do |x| + x = x.split("=") + selected.each do |price| + case x[0] + when "price_us" + if is_a_integer(x[1]) + price.price_us = x[1] + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "price_br" + if is_a_integer(x[1]) + price.price_br = x[1] + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "price_ru" + if is_a_integer(x[1]) + price.price_ru = x[1] + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "game_id" + if is_a_integer(x[1]) + price.game_id = x[1] + 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 + if error + break + else + price.save + end + end + next + end + if !error + puts "#{selected.length} linha(s) atualizada(s) na tabela #{tabela}!" + end when "categories" - + selected = select_rows(tabela, args[0..0]) + args[1..args.length-1].each do |x| + x = x.split("=") + selected.each do |category| + case x[0] + when "name" + if is_a_string(x[1]) + category.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]) + category.description = 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 + if error + break + else + category.save + end + end + next + end + if !error + puts "#{selected.length} linha(s) atualizada(s) na tabela #{tabela}!" + end when "category_games" - + selected = select_rows(tabela, args[0..0]) + args[1..args.length-1].each do |x| + x = x.split("=") + selected.each do |game| + case x[0] + when "category_id" + if is_a_integer(x[1]) + category_game.category_id = x[1]; + else + puts "Erro de SÃntaxe: Valor inválido para #{x[0]}!" + error = true + end + when "game_id" + if is_a_integer(x[1]) + category_game.game_id = x[1] + 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 + if error + break + else + category_game.save + end + end + next + end + if !error + puts "#{selected.length} linha(s) atualizada(s) na tabela #{tabela}!" + end else puts "Tabela #{tabela} não encontrada." end @@ -532,7 +705,6 @@ puts "Olá! Seja bem vindo ao SteamDB!" while true do args = parse_input(gets.tr("\n","")) - if args.length > 0 case args[0] when "insere"