Refactor banner logic into BannerHelper module

This commit is contained in:
Bryan Housel 2016-06-22 08:19:13 -04:00
parent 933335a0ea
commit e14ec1547e
2 changed files with 56 additions and 39 deletions

View file

@ -0,0 +1,54 @@
module BannerHelper
# returns the least recently seen banner that is not hidden
def next_banner()
active_banners = {
:sotmus2016 => {
:id => 'sotmus2016',
:alt => 'State of the Map US 2016',
:link => 'http://stateofthemap.us/',
:img => 'banners/sotmus-2016.jpg'
},
:sotm2016 => {
:id => 'sotm2016',
:alt => 'State of the Map 2016',
:link => 'http://2016.stateofthemap.org/',
:img => 'banners/sotm-2016.jpg'
}
}
bannerKey = nil
cookieKey = nil
queuePos = 9999
active_banners.each do |k, v|
ckey = cookie_id(v[:id]).to_sym
cval = cookies[ckey] || 0
next if cval == 'hide'
# rotate all banner queue positions
index = cval.to_i
if index > 0
cookies[ckey] = index - 1
end
# pick banner with mininum queue position
if index <= queuePos
bannerKey = k
cookieKey = ckey
queuePos = index
end
end
unless bannerKey.nil?
cookies[cookieKey] = active_banners.length # bump to end of queue
active_banners[bannerKey]
end
end
def cookie_id(key)
"_osm_banner_#{key}"
end
end