class ActiveSupport::Duration::HumanStringSerializer

Based on: active_support/duration/iso8601_serializer.rb Inherits: normalize

Public Class Methods

new(duration, precision: nil, separator: '', delimiter: ' ', use_2_digit_numbers: false) click to toggle source
# File lib/active_support/duration/human_string.rb, line 62
def initialize(duration, precision: nil, separator: '', delimiter: ' ', use_2_digit_numbers: false)
  @duration            = duration
  @precision           = precision
  @separator           = separator
  @delimiter           = delimiter
  @use_2_digit_numbers = use_2_digit_numbers
end

Public Instance Methods

serialize() click to toggle source

Builds and returns output_parts string.

# File lib/active_support/duration/human_string.rb, line 71
def serialize
  parts, sign = normalize

  output_parts = []
  output_parts << [parts[:years],   'y'] if parts.key?(:years)
  output_parts << [parts[:months],  'm'] if parts.key?(:months)
  output_parts << [parts[:weeks],   'w'] if parts.key?(:weeks)
  output_parts << [parts[:days],    'd'] if parts.key?(:days)
  output_parts << [parts[:hours],   'h'] if parts.key?(:hours)
  output_parts << [parts[:minutes], 'm'] if parts.key?(:minutes)
  if parts.key?(:seconds)
    output_parts << [sprintf(@precision ? "%0.0#{@precision}f" : '%g', parts[:seconds]), 's']
  end

  output_parts.map!.with_index { |(n, units), i|
    if @use_2_digit_numbers && i >= 1
      n = sprintf('%02d', n)
    end
    "#{n}#{@separator}#{units}"
  }

  output = output_parts.join(@delimiter)
  "#{sign}#{output}"
end