Quando executo o código, não retorna nada e não exibe nenhum erro...
livro.rb
class Livro
attr_reader :titulo, :preco, :ano_lancamento, :editora, :tipo
def initialize(titulo, preco, ano_lancamento, possui_reimpressao, editora, tipo)
@titulo = titulo
@ano_lancamento = ano_lancamento
@preco = calcula_preco(preco)
@possui_reimpressao = possui_reimpressao
@editora = editora
@tipo = tipo
end
def possui_reimpressao?
@possui_reimpressao
end
def to_csv
"#{titulo}, #{ano_lancamento}, #{preco}"
end
private
def calcula_preco(base)
if @ano_lancamento < 2006
if @possui_reimpressao
base * 0.9
else
base * 0.95
end
elsif @ano_lancamento <= 2010
base * 0.96
else
base
end
end
end
estoque.rb
require_relative 'contador'
class Estoque
attr_reader :livros
def initialize
@livros = []
@vendas = []
@livros.extend Contador
end
def quantidade_de_vendas_por(produto, &campo)
@vendas.count {|venda| campo.call(venda) == campo.call(produto)}
end
def livro_que_mais_vendeu_por_titulo
que_mais_vendeu_por("livro", &:titulo)
end
def livro_que_mais_vendeu_por_ano
que_mais_vendeu_por("livro", &:ano_lancamento)
end
def livro_que_mais_vendeu_por_editora
que_mais_vendeu_por("livro", &:editora)
end
def revista_que_mais_vendeu_por_titulo
que_mais_vendeu_por("revista", &:titulo)
end
def revista_que_mais_vendeu_por_ano_lancamento
que_mais_vendeu_por("revista", &:ano_lancamento)
end
def revista_que_mais_vendeu_por_editora
que_mais_vendeu_por("revista", &:editora)
end
def que_mais_vendeu_por(tipo, &campo)
@vendas.select {|l| l.tipo == tipo}.sort {|v1,v2|
quantidade_de_vendas_por(v1, &campo) <=> quantidade_de_vendas_por(v2, &campo)
}.last
end
def exporta_csv
@livros.each do |livro|
puts livro.to_csv
end
end
def mais_barato_que(valor)
@livros.select do |livro|
livro.preco <= valor
end
end
def total
@livros.size
end
def << (livro)
@livros << livro if livro
self
end
def vende(livro)
@livros.delete livro
@vendas << livro
end
def maximo_necessario
@livros.maximo_necessario
end
end
contador.rb
module Contador
def << (livro)
push (livro)
if @maximo_necessario.nil? || @maximo_necessario < size
@maximo_necessario = size
end
self
end
def maximo_necessario
@maximo_necessario
end
attr_reader :maximo_necessario
end
sistema.rb
require_relative 'livro'
require_relative 'estoque'
def livro_para_newsletter(livro)
if livro.ano_lancamento < 1999
puts "Newsletter/Liquidacao"
puts livro.titulo
puts livro.preco
puts livro.possui_reimpressao?
end
end
algoritmos = Livro.new("Algoritmos", 100, 1998, true, "", "Livro")
arquitetura = Livro.new("Introdução a Arquitetura e Design de Software", 70, 2011, true, "", "Livro")
programmer = Livro.new("The Pragmatic Programmer", 100, 1999, true, "", "Livro")
ruby = Livro.new("Programming Ruby", 100, 2004, true, "", "Livro")
revistona = Livro.new("Revista de Ruby", 10, 2012, true, "Revistas", "revista")
estoque = Estoque.new
estoque << algoritmos << algoritmos << ruby << programmer << arquitetura << ruby << ruby << revistona << revistona
estoque.vende ruby
estoque.vende algoritmos
estoque.vende algoritmos
puts estoque.livro_que_mais_vendeu_por_titulo.titulo
puts estoque.revista_que_mais_vendeu_por_titulo.titulo