lib/release_collection.rb (25 lines of code) (raw):

class ReleaseCollection def initialize(api_client:) @api_client = api_client end def current all.last end def previous all[-2] end def at(release) all.find { |m| m['title'] == release } end # Returns a list of release milestones, sorted in ascending order by start # date and ending with the one currently in development. # # Can be traversed using the array methods; such as #[] and #last. For # example, if the milestone in progress is %16.4: # `all[-1]` will return the %16.4 milestone. # `all.last` will return the %16.4 milestone. # `all[-2]` will return the %16.3 milestone. # `all[0]` will return the earliest milestone in the set (e.g. %15.5) def all @all ||= begin today = Time.now.strftime('%Y-%m-%d') api_client.get('groups/gitlab-org/milestones?state=active') .select { |milestone| milestone['start_date'] && milestone['start_date'] < today } .select { |milestone| /\A\d+\.\d+\z/.match?(milestone['title']) } .sort_by { |x| x['start_date'] } end end private attr_reader :api_client end