Refactor banner logic into BannerHelper module
authorBryan Housel <bryan@mapbox.com>
Wed, 22 Jun 2016 12:19:13 +0000 (08:19 -0400)
committerBryan Housel <bryan@mapbox.com>
Wed, 22 Jun 2016 12:19:13 +0000 (08:19 -0400)
app/helpers/banner_helper.rb [new file with mode: 0644]
app/views/layouts/_banner.html.erb

diff --git a/app/helpers/banner_helper.rb b/app/helpers/banner_helper.rb
new file mode 100644 (file)
index 0000000..b96409d
--- /dev/null
@@ -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
index a1091c8..6a62e19 100644 (file)
@@ -1,41 +1,4 @@
-<% active_banners = {
-  :sotmus2016 => {
-    :alt => 'State of the Map US 2016',
-    :link => 'http://stateofthemap.us/',
-    :img => 'banners/sotmus-2016.jpg'
-  },
-  :sotm2016 => {
-    :alt => 'State of the Map 2016',
-    :link => 'http://2016.stateofthemap.org/',
-    :img => 'banners/sotm-2016.jpg'
-  }
-}
-
-bannerSym = nil
-cookieStr = nil
-queuePos = 9999
-
-# pick least recently seen banner that is not hidden
-active_banners.each_key do |k|
-  c = '_osm_banner_' + k.to_s
-  val = cookies[c.to_sym] || 0
-  next if val == 'hide'
-
-  if val.to_i > 0
-    cookies[c.to_sym] = val.to_i - 1
-  end
-
-  if val.to_i <= queuePos
-    bannerSym = k
-    cookieStr = c
-    queuePos = val.to_i
-  end
-end
-
-unless bannerSym.nil?
-  banner = active_banners[bannerSym]
-  cookies[cookieStr.to_sym] = active_banners.length   # bump to end of queue
-%>
+<% unless (banner = next_banner()).nil? %>
 <%= link_to (image_tag banner[:img], :alt => banner[:alt], :title => banner[:alt]), banner[:link] %>
-<div class="close-wrap" id="<%= cookieStr %>"><span class="icon close"></span></div>
+<div class="close-wrap" id="<%= cookie_id(banner[:id]) %>"><span class="icon close"></span></div>
 <% end %>