Sha256: fd52db7fa17d6536318f17572deafa7d4d54fc91c0fdb08e04edc10bf93055f1

Contents?: true

Size: 1.22 KB

Versions: 17

Compression:

Stored size: 1.22 KB

Contents

module Hatchet
  class Reaper
    # Class for figuring out how old a given time is relative to another time
    #
    # Expects inputs as a DateTime instance
    #
    # Example:
    #
    #   time_now = DateTime.parse("2020-07-28T14:40:00Z")
    #   age = AppAge.new(created_at: DateTIme.parse("2020-07-28T14:40:00Z"), time_now: time_now, ttl_minutes: 1)
    #   age.in_minutes => 0.0
    #   age.too_young_to_die? # => true
    #   age.can_delete? # => false
    #   age.sleep_for_ttl #=> 60
    class AppAge
      SECONDS_IN_A_DAY = 24 * 60 * 60

      attr_reader :ttl_minutes

      def initialize(created_at:, ttl_minutes:, time_now: DateTime.now.new_offset(0))
        @seconds_ago = date_time_diff_in_seconds(time_now, created_at)
        @ttl_minutes = ttl_minutes
        @ttl_seconds = ttl_minutes * 60
      end

      def date_time_diff_in_seconds(now, whence)
        (now - whence) * SECONDS_IN_A_DAY
      end

      def too_young_to_die?
        !can_delete?
      end

      def can_delete?
        @seconds_ago > @ttl_seconds
      end

      def sleep_for_ttl
        return 0 if can_delete?

        @ttl_seconds - @seconds_ago
      end

      def in_minutes
        (@seconds_ago / 60.0).round(2)
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
heroku_hatchet-8.0.4 lib/hatchet/reaper/app_age.rb
heroku_hatchet-8.0.3 lib/hatchet/reaper/app_age.rb
heroku_hatchet-8.0.2 lib/hatchet/reaper/app_age.rb
heroku_hatchet-8.0.1 lib/hatchet/reaper/app_age.rb
heroku_hatchet-8.0.0 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.4.0 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.3.4 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.3.3 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.3.2 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.3.1 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.3.0 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.2.0 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.1.3 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.1.2 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.1.1 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.1.0 lib/hatchet/reaper/app_age.rb
heroku_hatchet-7.0.0 lib/hatchet/reaper/app_age.rb