SAÍDA:
C:\Users\User\Documents\Alura-2017\Ruby\OO>ruby sistema.rb
ebook_que_mais_vendeu_por_titulo
Programming Ruby
Revista de Ruby
sistema.rb:35:in <main>': undefined method
titulo' for nil:NilClass (NoMethodError)
Códigos:será que alguém pode me ajudar?
#imports
require_relative "livro"
require_relative "estoque"
def livro_para_newsletter(livro)
if livro.ano_lancamento < 1999
puts "Newnsletter/Liquidação"
puts livro.titulo
puts livro.preco
puts livro.possui_reimpressao?
end
end
algoritmos = Livro.new("Algoritmos", 100, 1998, true, "Editora", "livro")
arquitetura = Livro.new("Introdução à Arquitetura de Software", 70, 2011, true, "Editora", "livro")
programmer = Livro.new("The Pragmatic Programmer", 100, 1999, true, "Editora", "livro")
ruby = Livro.new("Programming Ruby", 100, 2004, true, "Editora", "livro")
revistona = Livro.new("Revista de Ruby", 10, 2012, true, "Revistas", "revista")
online_arquitetura = Livro.new("Introdução à Arquitetura de Software", 50, 2012, true, "Editora", "ebook")
estoque = Estoque.new
estoque << algoritmos << algoritmos << ruby << programmer << arquitetura << ruby << ruby << revistona << revistona << online_arquitetura
estoque.vende ruby
estoque.vende ruby
estoque.vende ruby
estoque.vende algoritmos
estoque.vende algoritmos
estoque.vende revistona
puts estoque.respond_to?(:ebook_que_mais_vendeu_por_titulo)
puts estoque.livro_que_mais_vendeu_por_titulo.titulo
puts estoque.revista_que_mais_vendeu_por_titulo.titulo
puts estoque.ebook_que_mais_vendeu_por_editora.titulo
require_relative "contador"
class Estoque
attr_reader :livros
def initialize
@livros = []
@vendas = []
@livros.extend Contador
end
def exporta_csv
@livros.each do |livro|
puts livro.to_csv
end
end
def mais_baratos_que(valor)
@livros.select do |livro|
livro.preco <= valor
end
end
def total
@livros.size
end
def << (livro)
@livros << livro if livro
end
def vende(livro)
@livros.delete livro
@vendas << livro
end
def maximo_necessario
@livros.maximo_necessario
end
#def quantidade_de_vendas_de_titulo(produto)
# @vendas.count {|venda| venda.titulo == produto.titulo}
#end
def method_missing(name)
matcher = name.to_s.match "(.+)_que_mais_vendeu_por_(.+)"
if matcher
tipo = matcher[1]
campo = matcher[2].to_sym
que_mais_vendeu_por(tipo, &campo)
else
super
end
end
def respond_to?(name)
name.to_s.match("(.+)_que_mais_vendeu_por_(.+)") || super
end
private
def quantidade_de_vendas_por(produto, &campo)
@vendas.count { |venda| campo.call(venda) == campo.call(produto) }
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
end