Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Código acusa erro de syntax mas não consigo encontrar. Orientação a Objetos - Aula 06

Está acusando erro de syntax, porém não consigo identificar. A linha 55 é exatamente o "end" da função "respond.to?"

ruby sistema.rb sistema.rb:4:in require_relative': C:/Users/MYRFRTS/Documents/Curso/livro/estoque.rb:55: syntax error, unexpected '!', expecting keyword_end (SyntaxError) ...+)_que_mais_vendeu_por_(.+)") !!matched || super ... ^ from sistema.rb:4:in'

require_relative "contador"

class Estoque
    attr_reader :livros, :vendas

    def initialize
         @livros = []
         @vendas = []
         @livros.extend Contador
     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

    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 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)
        matched = name.to_s.match("(.+)_que_mais_vendeu_por_(.+)") !!matched || super
    end

    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 {|produto| produto.matches?(tipo)}.sort {|v1,v2| quantidade_de_vendas_por(v1, &campo) <=> quantidade_de_vendas_por(v2, &campo)}.last
    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(&campo)
    #    que_mais_vendeu_por("livro", &campo)
    #end

    #def revista_que_mais_vendeu_por(&campo)
    #    que_mais_vendeu_por("revista", &campo)
    #end
end
1 resposta
solução!

Não sei se foi um erro na hora de colar mas nesse método dá um enter para ficar numa linha separada:

def respond_to?(name)
  matched = name.to_s.match("(.+)_que_mais_vendeu_por_(.+)") 
  !!matched || super
end

Porque isso seria o retorno do método !!matched || super.