Skip to content

Instantly share code, notes, and snippets.

@RobertoBarros
Created January 28, 2025 18:05
Show Gist options
  • Save RobertoBarros/fea0baf36d087a8abc4850562f38aa25 to your computer and use it in GitHub Desktop.
Save RobertoBarros/fea0baf36d087a8abc4850562f38aa25 to your computer and use it in GitHub Desktop.
reboot_batch_1925_gifts_list_part_4
require "csv"
FILEPATH = "gifts.csv"
def list(gifts)
puts "Aqui está sua lista:"
# gift é um hash do tipo: {name: "Meia", bought: true}
gifts.each_with_index do |gift, index|
bought = gift[:bought] ? "[X]" : "[ ]"
puts "#{index + 1} - #{bought} - #{gift[:name]}"
end
end
def add(gifts)
# Perguntar qual o presente para adicionar na lista
puts "Qual presente deseja add na lista?"
name = gets.chomp
# Adicionar na lista de gifts
gifts << {name: name, bought: false}
# Salva os novos presentes no arquivo CSV
save_csv(gifts)
end
def delete(gifts)
# Mostrar os presentes
list(gifts)
# Perguntar qual o número do presente para excluir
puts "Qual Numero do presente deseja deletar?"
index = gets.chomp.to_i - 1
# Verificar se o index é válido
if index >= 0 && index < gifts.size
# Remover de gifts pelo index
gifts.delete_at(index)
# Salva os novos presentes no arquivo CSV
save_csv(gifts)
else
puts "Opção Inválida"
end
end
def mark(gifts)
# Listar os presentes
list(gifts)
# Perguntar qual o número do presente para excluir
puts "Qual Numero do presente deseja marcar?"
index = gets.chomp.to_i - 1
# Verificar se o index é válido
if index >= 0 && index < gifts.size
# Recuperar o gift pelo index
gift = gifts[index] # É o hash do tipo {name: "Meia", bought: false}
gift[:bought] = true
# Salva os novos presentes no arquivo CSV
save_csv(gifts)
else
puts "Opção Inválida"
end
end
# Salva o array gifts em um arquivo CSV
def save_csv(gifts)
CSV.open(FILEPATH, "wb") do |csv|
gifts.each do |gift|
csv << [gift[:name], gift[:bought]]
end
end
end
# Retorna um array de strings carregados do CSV
def load_csv(gifts)
CSV.foreach(FILEPATH) do |row|
name = row[0]
bought = row[1] == "true"
gifts << {name: name, bought: bought}
end
end
# ===============================================
# o programa começa a partir daqui
# ===============================================
gifts = []
# Carrega o CSV somente se o arquivo existir
load_csv(gifts) if File.exist?(FILEPATH)
# Mensagem de Boas Vindas
puts "Seja Bem vindo a sua lista"
# LOOP
loop do
# Informar e perguntar qual opção
puts "Which action [list|add|delete|mark|quit]?"
action = gets.chomp.downcase
#Executar a opção selecionada
case action
when "list"
list(gifts)
when "add"
add(gifts)
when "delete"
delete(gifts)
when "mark"
mark(gifts)
when "quit"
# Se for `quit` sai do loop
break
else
puts "Opção inválida"
end
# FIM DO LOOP
end
# Mensagem de Goodbye
puts "Goodbye"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment