Created
June 6, 2026 21:45
-
-
Save RobertoBarros/472049c22c8bfb4316671bc6cb8fa891 to your computer and use it in GitHub Desktop.
batch_2302_christmas_list_complete
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require "csv" | |
| require 'open-uri' | |
| require 'nokogiri' | |
| require 'colored' | |
| FILEPATH = "gifts.csv" | |
| def add(gifts_list) | |
| #Perguntar qual item o usuário quer adicionar | |
| puts "Qual o nome do presente você gostaria de adicionar?".green_on_yellow | |
| #Ler a resposta do usuário | |
| name = gets.chomp | |
| puts "Qual o preço do presente" | |
| price = gets.chomp.to_i | |
| #Armazenar a resposta | |
| gifts_list << { gift: name, marked: false, price: price} | |
| save_list(gifts_list) | |
| end | |
| def list(gifts_list) | |
| #Listar os itens que estao na lista de presentes do usuario | |
| # item é um hash no formato { gift: "Meia", marked: false } | |
| gifts_list.each_with_index do |item, index| | |
| check = item[:marked] ? "[X]" : "[ ]" | |
| puts "#{index + 1} - #{check} #{item[:gift]} R$ #{item[:price]}" | |
| end | |
| end | |
| def remove(gifts_list) | |
| # Qual o número do item deseja remover? | |
| puts "Qual o número do item deseja remover?" | |
| # Armazenar a resposta | |
| index = gets.chomp.to_i - 1 | |
| if index >= 0 && index <= gifts_list.size - 1 | |
| # Remover da lista pelo index | |
| gifts_list.delete_at(index) | |
| save_list(gifts_list) | |
| else | |
| puts "Número inválido" | |
| end | |
| end | |
| def mark(gifts_list) | |
| puts "Qual item deseja marcar?" | |
| index = gets.chomp.to_i - 1 | |
| if index >= 0 && index <= gifts_list.size - 1 | |
| # marcar da lista pelo index | |
| gifts_list[index][:marked] = true | |
| save_list(gifts_list) | |
| else | |
| puts "Número inválido" | |
| end | |
| end | |
| def import(gifts_list) | |
| # Perguntar e armazenar qual produto está procurando | |
| puts "Qual o produto que está procurando?" | |
| product = gets.chomp | |
| # Scrape pelo produto na URL de pesquisa | |
| url = "https://letsy.lewagon.com/products?search=#{product}" | |
| # 1. We get the HTML page content | |
| html_content = URI.parse(url).read | |
| # 2. We build a Nokogiri document from this file | |
| doc = Nokogiri::HTML.parse(html_content) | |
| # Criando uma lista com os produtos encontrados | |
| products = [] | |
| doc.search('li.product-card').each do |tag| | |
| products << { | |
| name: tag.search('.title').text, | |
| price: tag.search('.price').text.match(/(?<price>\d*)\./)[:price].to_i | |
| } | |
| end | |
| # Se a lista estiver vazia informar | |
| if products.empty? | |
| puts "Nenhum produto encontrado".red | |
| return | |
| end | |
| # Listar os produtos encontrados no scrape | |
| puts "Produtos encontrados:" | |
| puts "-" * 40 | |
| products.each_with_index do |product, index| | |
| puts "#{index + 1} - #{product[:name]} - R$ #{product[:price]}" | |
| end | |
| # Escolher o número de um produto para adicionar na lista de presentes | |
| puts "Qual o número do produto para adicionar?" | |
| index = gets.chomp.to_i - 1 | |
| # Adicionar o produto escolhido na lista | |
| gifts_list << { | |
| gift: products[index][:name], | |
| marked: false, | |
| price: products[index][:price] | |
| } | |
| end | |
| def save_list(gifts_list) | |
| CSV.open(FILEPATH, "wb") do |csv| | |
| gifts_list.each do |item| | |
| csv << [item[:gift], item[:marked], item[:price]] | |
| end | |
| end | |
| end | |
| def load_list(gifts_list) | |
| CSV.foreach(FILEPATH) do |row| | |
| gift = row[0] | |
| marked = row[1] == "true" | |
| price = row[2].to_i | |
| gifts_list << { gift:, marked:, price: } # Isso é o mesmo que { gift: gift, marked: marked, price: price} | |
| end | |
| end | |
| # O programa começa a partir daqui: | |
| #Criar a variável da lista de presentes | |
| gifts_list = [] | |
| load_list(gifts_list) if File.exist?(FILEPATH) | |
| #Boas-vindas ao usuário | |
| puts "Bem-vind@ à sua lista de presentes de natal!" | |
| #Criar o loop do menu | |
| loop do | |
| #Apresentar o menu | |
| puts "Qual é a sua escolha? [Listar | Adicionar | Excluir | Marcar | Importar | Fechar]" | |
| #Pegar a resposta do usuário | |
| answer = gets.chomp.downcase | |
| #Procurar qual caso/alternativa é | |
| case answer | |
| #Mostrar a lista | |
| when "listar" then list(gifts_list) | |
| #Adicionar itens a lista | |
| when "adicionar" then add(gifts_list) | |
| #Excluir itens da lista | |
| when "excluir" then remove(gifts_list) | |
| # Marcar um item da Lista | |
| when "marcar" then mark(gifts_list) | |
| # Importar item por scrape | |
| when "importar" then import(gifts_list) | |
| #Sair da lista | |
| when "fechar" | |
| break | |
| else | |
| #Caso o usuário escolha uma alternativa não válida | |
| puts "Escolha uma alternativa válida!" | |
| end | |
| #Limpar a tela após cada "escolha" | |
| #print `clear` | |
| #Finalizar o loop | |
| end | |
| #Tchau! | |
| puts "Obrigad@! Volte sempre!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment