app/controllers/application_controller.rb
require "application_responder"
class ApplicationController < ActionController::Base
include DisplayCase::ExhibitsHelper
self.responder = ApplicationResponder
respond_to :html
protect_from_forgery
analytical :modules => [:console, :google, :mixpanel],
:use_session_store => true,
:disable_if => lambda{|controller| controller.class.ancestors.include?(Admin)}
before_filter :tag_guest, :store_location, :locate_user
helper_method :current_user, :user_signed_in?, :identifiable_user
protected
def current_user
@current_user ||= User.find_by_id(session[:user_id] || cookies.signed['remember_me'])
exhibit(@current_user) if @current_user
end
def guest_user
GuestUser.new(session[:guest_id] || cookies.signed[:guest_id] || tag_guest ).tap do |guest|
locator = Geolocator.new(cookies)
guest.location = locator.location
guest.market = locator.market
end
end
def identifiable_user
current_user || guest_user
end
def sign_in(user)
@current_user = user.sign_in!
cookies.permanent.signed[:remember_me] = session[:user_id] = @current_user.id
TrackAnalytics.new(@current_user, analytical).do_tracking
@current_user
end
def sign_out
cookies.delete :remember_me
session[:user_id] = @current_user = nil
end
def authenticate_user!
unless user_signed_in?
store_location
redirect_to sign_in_url, :alert => I18n.t('omniauth.need_sign_in')
end
end
def user_signed_in?
!!(current_user)
end
def store_location(url = nil)
session[:return_to] = url || request.url
end
def stored_location
destination, session[:return_to] = session[:return_to], nil
destination
end
private
def tag_guest
unless (user_signed_in? || session[:guest_id] || cookies.signed[:guest_id])
session[:guest_id] = cookies.permanent.signed[:guest_id] = UUIDTools::UUID.random_create.to_i
end
end
def locate_user
Rails.application.config.locate_users && (set_user_location || set_browser_location)
end
def exhibit_exposed(*names)
names.each do |name|
_resources[name] = exhibit(self.send(name))
end
end
def set_user_location
if user_signed_in?
current_user.located? || current_user.set_location(request.location)
end
end
def set_browser_location
if cookies.signed[:location].blank?
cookies.signed[:location] = Location.attributes_from_gecoder_result(request.location).to_yaml
end
end
end