No exercício, é sugerido que as Classes Livro
e Estoque
sejam da seguinte forma:
class Livro
def to_csv
"#{@titulo}, #{@ano_lancamento}, #{@preco}"
end
end
class Estoque
# código já existente na classe
def exporta_csv
@livros.each do |livro|
puts livro.to_csv
end
end
end
Eu criei um teste pra garantir que fosse impresso da forma correta:
require 'test/unit'
require './estoque'
require './livro'
class TestEstoque < Test::Unit::TestCase
#...
def setup
@estoque = Estoque.new
@livro_algoritmos = Livro.new("Algoritmos", 100, 1998, true)
end
def test_exporta_csv
@estoque.adiciona @livro_algoritmos
csv = "Algoritmos, 1998, 90.0"
assert_equal(csv, @estoque.exporta_csv)
end
o Resultado do meu teste:
Failure: test_exporta_csv(TestEstoque)
test_estoque.rb:38:in `test_exporta_csv'
35: @estoque.adiciona @livro_algoritmos
36:
37: csv = "Algoritmos, 1998, 90.0"
=> 38: assert_equal(csv, @estoque.exporta_csv)
39: end
40: end
<"Algoritmos, 1998, 90.0"> expected but was
<[#<Livro:0x007fc6748258d8
@ano_lancamento=1998,
@possui_reimpressao=true,
@preco=90.0,
@titulo="Algoritmos">]>
diff:
+ [#<Livro:0x007fc6748258d8
+ @ano_lancamento=1998,
+ @possui_reimpressao=true,
+ @preco=90.0,
? @titulo="Algoritmos, 1998, 90.0">]
Duas solucoes possiveis que encontrei foi criar a string na mao:
def exporta_csv
string = ""
@livros.each do |livro|
string += livro.to_csv
end
string
end
ou usando inject
def exporta_csv
@livros.inject("") do |csv, livro|
csv += livro.to_csv
end
end