Refactor banner logic into BannerHelper module
This commit is contained in:
parent
933335a0ea
commit
e14ec1547e
2 changed files with 56 additions and 39 deletions
54
app/helpers/banner_helper.rb
Normal file
54
app/helpers/banner_helper.rb
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue