在Ruby中如何重构case

在Ruby中如何重构case,ruby,refactoring,rubocop,reek,Ruby,Refactoring,Rubocop,Reek,林特谈到了以下错误,如何修复 FeatureEnvy:Time#readable指的是“正常运行时间”,而不是self(可能会转移到另一个类?)[ TooManyStatements:Time#readable大约有10条语句[ 可读的分配分支条件大小太大 高。[20.64/15] 可读的圈复杂度太高。[9/6] 方法的行太多。[12/10] 查看并自由使用它或它的代码 关于代码度量-您的代码非常简单,您应该只提取正常运行时间方法。是这类问题的合适位置。我投票关闭这个问题,因为它是工作代码,应

林特谈到了以下错误,如何修复

  • FeatureEnvy:Time#readable指的是“正常运行时间”,而不是self(可能会转移到另一个类?)[
  • TooManyStatements:Time#readable大约有10条语句[

  • 可读的分配分支条件大小太大 高。[20.64/15]

  • 可读的圈复杂度太高。[9/6]
  • 方法的行太多。[12/10]
查看并自由使用它或它的代码


关于代码度量-您的代码非常简单,您应该只提取
正常运行时间
方法。

是这类问题的合适位置。我投票关闭这个问题,因为它是工作代码,应该发布在这个案例中,我暂时禁用rubocop规则b/c我同意这是一个非常好的concise实现。没有那么简单,是吗?当然。没有机会写得更简单。我只是想到不要重复Rails:)
  def readable
    uptime = (Time.now - self).to_i
    case uptime
    when 0 then 'just now'
    when 1 then 'uptime second ago'
    when 2..59 then uptime.to_s + ' seconds ago'
    when 60..119 then 'uptime minute ago' # 120 = 2 minutes
    when 120..3540 then (uptime / 60).to_i.to_s + ' minutes ago'
    when 3541..7100 then 'an hour ago' # 3600 = 1 hour
    when 7101..82_800 then ((uptime + 99) / 3600).to_i.to_s + ' hours ago'
    when 82_801..172_000 then 'uptime day ago' # 86400 = 1 day
    else ((uptime + 800) / 86_400).to_i.to_s + ' days ago'
    end
  end