]> git.openstreetmap.org Git - rails.git/blobdiff - app/helpers/banner_helper.rb
Merge remote-tracking branch 'upstream/pull/3377'
[rails.git] / app / helpers / banner_helper.rb
index 92b633eca5f343c643601431675968c85f286c54..17c6eace3d4eb2cf4c4f24e5d208ab07925acdd7 100644 (file)
@@ -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
+      # pick banner with minimum 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