lib/gitlab/feature_flag_alert/milestone.rb (36 lines of code) (raw):
# frozen_string_literal: true
module Gitlab
module FeatureFlagAlert
class Milestone
include Comparable
def initialize(value)
@value = value
end
def value
@value || 0.0
end
def present?
!@value.nil?
end
def ago(num_milestones)
major, minor = value.split(".").map(&:to_i)
older_major = minor >= num_milestones ? major : major - 1
older_minor = (0..12).to_a[minor - num_milestones]
self.class.new([older_major, older_minor].join("."))
end
def +(other)
major, minor = value.split(".").map(&:to_i)
# Releases are "base 12" because they consist of 12 numbers from 0 - 11.
# We can do the math using a base-10 number and then use a modulo to convert it back to base 12.
total = (major * 12) + minor + other
new_major, new_minor = total.divmod(12)
self.class.new([new_major, new_minor].join("."))
end
def <=>(other)
other = self.class.new(other) unless other.is_a?(self.class)
Gem::Version.new(value.to_s) <=> Gem::Version.new(other.value.to_s)
end
def inspect
@value || "N/A"
end
alias to_s inspect
end
end
end