Rubocop:方法有太多行

时间:2015-11-15 12:20:00

标签: ruby enumerable rubocop

您好我是ruby编程的新手。 在我的项目中进行rubocop检查,它说:

  

方法行太多了。 [13/10] def refresh_status

这是我的方法:

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

找不到简化方法的方法,也许你可以提供帮助?

1 个答案:

答案 0 :(得分:1)

您可以使用一些Enumerable方法。

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