Search code examples
rubyenumerablerubocop

Rubocop:method has too many lines


Hello I am new at ruby programming. Ran rubocop inspection in my project and it says:

Method has too many lines. [13/10] def refresh_status

Here is my methods:

def refresh_status
    lost = false
    in_progress = false
    won = false
    @bets.each do |bet|
      lost = true if bet.result == :lost
      if bet.result == :canceled
        @to_return /= bet.odd
        won = true
      end
      in_progress = true if bet.result == :in_progress
      won = true if bet.result == :won
    end
    def_result_after_refresh(lost, in_progress, won)
  end

  def def_result_after_refresh(lost, in_progress, won)
    if lost
      @result = :lost
    elsif in_progress
      @result = :in_progress
    elsif won
      @result = :won
    end
  end

Can't find a way to make that method shorter, maybe you could help?


Solution

  • You can use some the Enumerable methods.

    def refresh_status
      @to_return /= @bets.select { |bet| bet.result == :canceled }.map(&:odd).reduce(1, :*)
    
      results = @bets.map { |bet| bet.result == :cancelled ? :won : bet.result }.uniq
      @result = case
                when results.include?(:lost) then :lost
                when results.include?(:in_progress ) then :in_progress 
                when results.include?(:won) then :won
                end
    end