Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

PAROU DE FUNCIONAR

Quando comecei a refatorar meu código, ele parou de funcionar. Voltei atrás nos exercícios, mudei os nomes, e deixei tudo como nos exemplos, mas ainda não está funcionando. Poderiam me ajudar? (detalhe: está tudo separado em arquivos diferentes)

class Livro
    attr_reader :titulo, :preco, :ano, :reimpressao, :editora, :tipo
    def initialize(titulo, preco, ano, reimpressao, editora, tipo)
        @titulo = titulo
        @ano = ano
        @reimpressao = reimpressao
        @preco = calcula_preco(preco)
        @editora = editora
        @tipo = tipo
    end

    def to_csv
        "#{@titulo}, #{@ano}, #{@preco}"
    end

    def reimpressao?
        @reimpressao
    end    

end
require_relative "livro"
require_relative "estoque"

def newsletter(livro)
    if livro.ano < 1999
        puts "Liquidação"
        puts livro.titulo
        puts livro.preco
        puts livro.reimpressao?
    end
end

algoritmos = Livro.new("Algoritmos", 100, 1998, true, "editora", "livro")
arquitetura = Livro.new("Introdução À Arquitetura e Design 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")


estoque = Estoque.new
estoque << algoritmos << algoritmos << ruby << programmer << arquitetura << ruby << ruby << revistona << revistona
estoque.vende ruby
estoque.vende algoritmos
estoque.vende algoritmos
estoque.vende revistona
puts estoque.livro_que_mais_vendeu_por_titulo.titulo
puts estoque.revista_que_mais_vendeu_por_titulo.titulo
module Contador
    def <<(livro)
    push(livro)
    if @maximo_necessario.nil? || @maximo_necessario < size
        @maximo_necessario = size
    end
    self
end
attr_reader :maximo_necessario
end
require_relative "contador"

class Estoque
attr_reader :livros

    def initialize
        @livros = []
        @vendas = []
        @livros.extend Contador
    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 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)
    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
      que_mais_vendeu_por("revista", &:ano)
    end

    def revista_que_mais_vendeu_por_editora
      que_mais_vendeu_por("revista", &:editora)
    end


    def exporta_csv
        @livros.each do |livro|
            puts livro.to_csv 
        end    
    end

    def mais_baratos(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
5 respostas

Qual erro está dando?

Então, é que não acontece nada

Agora está dando o seguinte erro:

/estoque.rb:14:in block in que_mais_vendeu_por': undefined methodquantidade_de_vendas_por' for # (NoMethodError)

solução!

O erro denota que o método quantidade_de_vendas_por() não está definido, ou seja, provavelmente não foi criado, poderia verificar?

Olá Rose, tudo bem

Na sua Classe 'Estoque' esta faltando o método quantidade_de_vendas_por

insira esse método e veja se volta a funcionar

    def quantidade_de_vendas_por(produto, &campo)
        @vendas.count {|venda| campo.call(venda) == campo.call(produto)}
    end

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software