Sha256: da27c041f372a6f6a6fe20d0a31551a979906eb6d905fbb0e8ce02a8bbc7ec63

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

require 'ruby-duration'

class FormattedDuration
  CONSTRAINTS = [:minutes, :hours, :days, :weeks]

  def initialize(minutes, constraint = :weeks)
    @constraint = CONSTRAINTS.index(constraint)

    @minutes = minutes
    @hours = minutes / 60
    @days = @hours / 24
    @weeks = @days / 7
  end

  def format
    weekless_days = @days % 7
    dayless_hours = @hours % 24
    hourless_minutes = @minutes % 60
    output = []

    if @weeks != 0 && @constraint > 2
      output << Duration.new(weeks: @weeks).format('%w %~w')
    end

    if weekless_days != 0 && @constraint > 1
      output << Duration.new(days: weekless_days).format('%d %~d')
    elsif @days > 0 && @constraint == 2
      output << Duration.new(days: @days).format('%tdu')
    end

    if dayless_hours != 0 && @constraint > 0
      output << Duration.new(hours: dayless_hours).format('%h %~h')
    elsif @hours > 0 && @constraint == 1
      output << Duration.new(hours: @hours).format('%thu')
    end

    if hourless_minutes != 0
      output << Duration.new(minutes: hourless_minutes).format('%m %~m')
    elsif @minutes > 0 && @constraint == 0
      output << Duration.new(minutes: @minutes).format('%tmu')
    end

    output.join(', ')
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
duration-formatter-1.0.0 lib/formatted_duration.rb