Skip to content

Instantly share code, notes, and snippets.

@joffilyfe
Created June 7, 2017 19:36
Show Gist options
  • Save joffilyfe/1b820845433f1fdbae0a4cc60d912a78 to your computer and use it in GitHub Desktop.
Save joffilyfe/1b820845433f1fdbae0a4cc60d912a78 to your computer and use it in GitHub Desktop.
class Produto
attr_reader :preco, :categorias, :id, :nome
def initialize(id, nome, preco, categorias=[])
@id = id
@nome = nome
@preco = preco
@categorias = categorias
end
end
class Compra
def initialize
@produtos = []
end
def addProduto(produto)
@produtos.push(produto)
end
def total(categorias=[])
if not categorias.empty?
produtos = []
@produtos.each do |produto|
categorias_filtradas = produto.categorias.select { |categoria| categorias.index(categoria) }
if not categorias_filtradas.empty?
produtos << produto
end
end
produtos.reduce 0 {|soma, produto| soma + produto.preco }
else
@produtos.reduce 0 {|soma, produto| soma + produto.preco }
end
end
def to_s
result = ""
@produtos.uniq.each do |produto|
quantidade = @produtos.count(produto)
total = produto.preco * quantidade
result += "%03d %s\t %03d %0.2f %0.2f\n" % [produto.id, produto.nome, quantidade, produto.preco, total]
end
result
end
end
pencil = Produto.new(1, "Lápis", 1.5, ["lapis", "office"])
pen = Produto.new(2, "Caneta", 3, ["lapis"])
notebook = Produto.new(3, "Caderno", 20, ["caderno", "office"])
order = Compra.new()
order.addProduto(pencil)
order.addProduto(pencil)
order.addProduto(pen)
order.addProduto(notebook)
puts order.total(["lapis", "office"]) #=> 26
puts order
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment