Sha256: 90bc380347e78b6f29bb82a30195ae7a2296d1c4ae41fdea2181c4e1086b3f70

Contents?: true

Size: 1.1 KB

Versions: 35

Compression:

Stored size: 1.1 KB

Contents

module CoreExtensions
  module ActiveSupport
    module DurationAdditions
      FORMATTING_ELEMENTS = [:years, :months, :weeks, :days, :hours, :minutes, :seconds].freeze

      # Add a custom method on ActiveSupportDuration.
      # This is a variation on Duration#inspect that excludes empty parts.
      # Given an iso8601 duration of 1 week:
      #   duration = Duration.parse("P1W")
      #   duration.inspect        #=> "1 week, 0 days, and 0 hours"
      #   duration.to_formatted_s #=> "1 week"
      #
      # rubocop:disable Style/Semicolon, Style/EachWithObject, Metrics/AbcSize
      def to_formatted_s
        parts
          .reduce(::Hash.new(0)) { |h, (l, r)| h[l] += r; h }
          .reject{ |_, val| val < 1 }
          .sort_by { |unit, _| FORMATTING_ELEMENTS.index(unit) }
          .map { |unit, val| "#{val} #{val == 1 ? unit.to_s.chop : unit.to_s}" }
          .to_sentence(locale: ::I18n.default_locale)
      end
      # rubocop:enable Style/Semicolon, Style/EachWithObject, Metrics/AbcSize
    end
  end
end

ActiveSupport::Duration.send(:include, CoreExtensions::ActiveSupport::DurationAdditions)

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
renalware-core-2.0.16 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.15 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.14 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.13 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.12 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.11 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.9 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.8 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.7 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.5 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.4 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.3 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.2 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.1 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.0 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.0.pre.rc13 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.0.pre.rc11 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.0.pre.rc10 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.0.pre.rc9 lib/core_extensions/active_support/duration.rb
renalware-core-2.0.0.pre.rc8 lib/core_extensions/active_support/duration.rb