master
 1module Admin
 2  class SessionsController < AdminController
 3    def index
 4      @user_sessions = sessions.filter_by(search_filters)
 5      @direction = params[:direction].present? ? directions[params[:direction].to_sym] : :asc
 6    end
 7
 8    def destroy
 9      UserSession.find(params[:id]).revoke!
10      redirect_to admin_sessions_path
11    end
12
13    private
14
15    def sessions
16      UserSession.includes(:user, :location)
17    end
18
19    def search_filters
20      [sort_filter]
21    end
22
23    def sort_filter
24      direction = params[:direction].present? ? params[:direction].to_sym : :asc
25      case params[:sort].try(:downcase)
26      when "ip"
27        ->(sessions) { sessions.order(ip: direction) }
28      when 'city'
29        ->(sessions) { sessions.joins(:location).order("locations.city #{direction}") }
30      when 'ua'
31        ->(sessions) { sessions.order(user_agent: direction) }
32      else
33        ->(sessions) { sessions.order(created_at: :desc) }
34      end
35    end
36
37    def directions
38      {
39        asc: :desc,
40        desc: :asc,
41      }
42    end
43  end
44end