-
-
Save ThawanFidelis/1445777 to your computer and use it in GitHub Desktop.
Carrinho
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
class Carrinho | |
def initialize | |
@itens = [] | |
end | |
def incluir(produto) | |
@itens << ItemCarrinho.new(produto) | |
end | |
def remover(produto) | |
@itens.delete(item_contendo(produto)) | |
end | |
def produtos | |
result = [] | |
for item in @itens | |
result << item.produto | |
end | |
result | |
end | |
def quantidade(produto) | |
item_contendo(produto).quantidade | |
end | |
def alterar_quantidade(produto, quantidade) | |
item_contendo(produto).quantidade = quantidade | |
end | |
def total | |
soma = 0 | |
for item in @itens | |
# soma += item.quantidade * item.produto.preco (NÃO!!!) | |
soma += item.total | |
end | |
soma | |
end | |
private | |
def item_contendo(produto) | |
for item in @itens | |
return item if item.produto == produto | |
end | |
end | |
end | |
class ItemCarrinho | |
def initialize(produto) | |
@produto = produto | |
@quantidade = 1 | |
end | |
def total | |
@quantidade * @produto.preco | |
end | |
attr_reader :produto | |
attr_accessor :quantidade | |
end | |
class Produto | |
def initialize(nome, preco) | |
@nome, @preco = nome, preco | |
end | |
attr_reader :nome, :preco | |
end |
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
# coding: utf-8 | |
require './carrinho' | |
describe Carrinho do | |
let(:produto) { Produto.new('livro de java', 50) } | |
let(:carrinho) { Carrinho.new } | |
it 'permite incluir produto' do | |
carrinho.incluir(produto) | |
carrinho.produtos.should == [produto] | |
end | |
it 'permite remover produto' do | |
carrinho.incluir(produto) | |
carrinho.remover(produto) | |
carrinho.produtos.count.should == 0 | |
end | |
it 'permite alterar quantidade do produto' do | |
carrinho.incluir(produto) | |
carrinho.quantidade(produto).should == 1 | |
carrinho.alterar_quantidade(produto, 2) | |
carrinho.quantidade(produto).should == 2 | |
end | |
it 'calcula seu total' do | |
carrinho.incluir(produto) | |
livro_ruby = Produto.new('livro de ruby', 40) | |
carrinho.incluir(livro_ruby) | |
carrinho.alterar_quantidade(livro_ruby, 2) | |
carrinho.total.should == 130 | |
end | |
end |
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
class Carrinho | |
def initialize | |
@itens = [] | |
end | |
def incluir(produto) | |
@itens << ProdutoCarrinho.new(produto) | |
end | |
def remover(produto) | |
@itens.delete(item_contendo(produto)) | |
end | |
def produtos | |
return @itens.map{|x| x.produto} | |
end | |
def quantidade(produto) | |
item_contendo(produto).quantidade | |
end | |
def alterar_quantidade(produto, quantidade) | |
item_contendo(produto).quantidade = quantidade | |
end | |
def total | |
@itens.map {|x| x.total}.reduce {|x, y| x + y} | |
end | |
private | |
def item_contendo(produto) | |
@itens.each{|x| return x if x.produto == produto } | |
end | |
end | |
class Produto | |
def initialize(nome, preco) | |
@nome, @preco = nome, preco | |
end | |
attr_reader :nome, :preco | |
end | |
class ProdutoCarrinho | |
def initialize(produto) | |
@produto, @quantidade = produto, 1 | |
end | |
def total | |
@produto.preco * @quantidade | |
end | |
attr_reader :produto | |
attr_accessor :quantidade | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment