1 # frozen_string_literal: true
 
   5     BANNERS.reject do |_k, v|
 
   7         startdate = v[:startdate] && Date.parse(v[:startdate])
 
  13         enddate = v[:enddate] && Date.parse(v[:enddate])
 
  18       startdate&.future? || enddate&.past?
 
  22   # returns the least recently seen banner that is not hidden
 
  24     banners = active_banners
 
  28     min_date = Date.new(9999, 1, 1)
 
  30     banners.each do |k, v|
 
  31       ckey = banner_cookie(v[:id]).to_sym
 
  32       cval = cookies[ckey] || 0
 
  33       next if cval == "hide"
 
  35       # rotate all banner queue positions
 
  37       cookies[ckey] = index - 1 if index.positive?
 
  39       # pick banner with minimum queue position
 
  40       next if index > min_index
 
  42       # or if equal queue position, pick banner with soonest end date (i.e. next expiring)
 
  43       end_date = Date.parse(v[:enddate])
 
  44       next if index == min_index && end_date > min_date
 
  52     unless banner_key.nil?
 
  53       cookies[cookie_key] = banners.length # bump to end of queue
 
  58   def banner_cookie(key)