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)