Sha256: 4a778d1e971149be33aacbcaaac588874917be9c91b8f0b1d70f27885b125b88

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

module Clearance
  module App
    module Controllers
      module ApplicationController
    
        def self.included(base)
          base.class_eval do
            helper_method :current_user
            helper_method :logged_in?
        
            include InstanceMethods

         protected
            include ProtectedInstanceMethods
          end
        end
    
        module InstanceMethods
          def current_user
            @current_user ||= (user_from_session || user_from_cookie)
          end
      
          def logged_in?
            ! current_user.nil?
          end
        end

        module ProtectedInstanceMethods
          def authenticate
            deny_access unless self.current_user
          end

          def user_from_session
            user_model.find_by_id session[:user_id]
          end

          def user_from_cookie
            user = user_model.find_by_remember_token(cookies[:auth_token]) if cookies[:auth_token]
            user && user.remember_token? ? user : nil
          end

          def login(user)
            create_session_for(user)
            @current_user = user
          end

          def create_session_for(user)
            session[:user_id] = user.id if user
          end

          def redirect_back_or(default)
            session[:return_to] ? redirect_to(session[:return_to]) : redirect_to(default)
            session[:return_to] = nil
          end
      
          def redirect_to_root
            redirect_to root_url
          end

          def store_location
            session[:return_to] = request.request_uri
          end

          def deny_access(flash_message = nil, opts = {})
            opts[:redirect] ||= root_url
            store_location
            flash[:error] = flash_message if flash_message
            redirect_to opts[:redirect]
          end
      
          def user_model
            User
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thoughtbot-clearance-0.3.3 lib/clearance/app/controllers/application_controller.rb