X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/e15c00dc2cfdc220be15ce1392d29b238b3d6991..dcd55590709ab18657cdbe5ab4ddd5e360ba6b43:/app/helpers/banner_helper.rb?ds=sidebyside diff --git a/app/helpers/banner_helper.rb b/app/helpers/banner_helper.rb index 92b633eca..fef6eaa5e 100644 --- a/app/helpers/banner_helper.rb +++ b/app/helpers/banner_helper.rb @@ -4,10 +4,10 @@ module BannerHelper enddate = v[:enddate] begin parsed = enddate && Date.parse(enddate) - rescue + rescue StandardError parsed = nil end - parsed.is_a?(Date) && parsed.past? + !parsed.is_a?(Date) || (parsed.is_a?(Date) && parsed.past?) end end @@ -17,22 +17,28 @@ module BannerHelper banner_key = nil cookie_key = nil min_index = 9999 + min_date = Date.new(9999, 1, 1) banners.each do |k, v| - ckey = cookie_id(v[:id]).to_sym + ckey = banner_cookie(v[:id]).to_sym cval = cookies[ckey] || 0 next if cval == "hide" # rotate all banner queue positions index = cval.to_i - cookies[ckey] = index - 1 if index > 0 + cookies[ckey] = index - 1 if index.positive? # pick banner with mininum queue position next if index > min_index + # or if equal queue position, pick banner with soonest end date (i.e. next expiring) + end_date = Date.parse(v[:enddate]) + next if index == min_index && end_date > min_date + banner_key = k cookie_key = ckey min_index = index + min_date = end_date end unless banner_key.nil? @@ -41,7 +47,7 @@ module BannerHelper end end - def cookie_id(key) + def banner_cookie(key) "_osm_banner_#{key}" end end