switch_user 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rspec +1 -0
 - data/README.md +15 -13
 - data/app/controllers/switch_user_controller.rb +20 -94
 - data/app/helpers/switch_user_helper.rb +38 -27
 - data/lib/switch_user/provider/authlogic.rb +26 -0
 - data/lib/switch_user/provider/base.rb +26 -0
 - data/lib/switch_user/provider/devise.rb +24 -0
 - data/lib/switch_user/provider/restful_authentication.rb +23 -0
 - data/lib/switch_user/provider/sorcery.rb +23 -0
 - data/lib/switch_user/provider.rb +8 -0
 - data/lib/switch_user/rails.rb +17 -0
 - data/lib/switch_user/user_loader.rb +35 -0
 - data/lib/switch_user/version.rb +1 -1
 - data/lib/switch_user.rb +30 -28
 - data/spec/provider/authlogic_spec.rb +37 -0
 - data/spec/provider/devise_spec.rb +86 -0
 - data/spec/provider/restful_authrentication_spec.rb +17 -0
 - data/spec/provider/sorcery_spec.rb +23 -0
 - data/spec/spec_helper.rb +1 -0
 - data/spec/support/provider.rb +27 -0
 - data/spec/switch_user/user_loader_spec.rb +36 -0
 - data/spec/switch_user_spec.rb +26 -0
 - data/switch_user.gemspec +3 -1
 - metadata +60 -5
 
    
        data/.rspec
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --color
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,10 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            switch_user
         
     | 
| 
       2 
     | 
    
         
            -
            ===========
         
     | 
| 
      
 1 
     | 
    
         
            +
            # switch_user
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            Inspired from [hobo][0], switch_user provides a convenient way to switch current user that speeds up your development and reproduce user specified error on production.
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            Use Case
         
     | 
| 
       7 
     | 
    
         
            -
            --------
         
     | 
| 
      
 5 
     | 
    
         
            +
            ## Use Case
         
     | 
| 
       8 
6 
     | 
    
         | 
| 
       9 
7 
     | 
    
         
             
            switch_user is very useful in such use cases
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
         @@ -12,20 +10,17 @@ switch_user is very useful in such use cases 
     | 
|
| 
       12 
10 
     | 
    
         | 
| 
       13 
11 
     | 
    
         
             
            2. reproduce the user specified error on production. Sometimes the error is only raised for specified user, which is difficult to reproduce for developers, switch_user can help you reproduce it by login as that user.
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Example
         
     | 
| 
       16 
     | 
    
         
            -
            -------
         
     | 
| 
      
 13 
     | 
    
         
            +
            ## Example
         
     | 
| 
       17 
14 
     | 
    
         | 
| 
       18 
15 
     | 
    
         
             
            Visit here: [http://switch-user-example.heroku.com/][1], switch the current user in the select box.
         
     | 
| 
       19 
16 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            Install
         
     | 
| 
       21 
     | 
    
         
            -
            -------
         
     | 
| 
      
 17 
     | 
    
         
            +
            ## Install
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
19 
     | 
    
         
             
            Add in Gemfile.
         
     | 
| 
       24 
20 
     | 
    
         | 
| 
       25 
21 
     | 
    
         
             
                gem "switch_user"
         
     | 
| 
       26 
22 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            Usage
         
     | 
| 
       28 
     | 
    
         
            -
            -----
         
     | 
| 
      
 23 
     | 
    
         
            +
            ## Usage
         
     | 
| 
       29 
24 
     | 
    
         | 
| 
       30 
25 
     | 
    
         
             
            Add following code into your layout page.
         
     | 
| 
       31 
26 
     | 
    
         | 
| 
         @@ -50,8 +45,14 @@ If you use it in a Rails 2 project, you have to add a route manually. 
     | 
|
| 
       50 
45 
     | 
    
         
             
                # config/routes.rb
         
     | 
| 
       51 
46 
     | 
    
         
             
                map.switch_user '/switch_user', :controller => 'switch_user', :action => 'set_current_user'
         
     | 
| 
       52 
47 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
      
 48 
     | 
    
         
            +
            If you have a wildcard route in your Rails 3 project, add a route before the wildcard route.
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                # config/routes.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
                match 'switch_user' => 'switch_user#set_current_user'
         
     | 
| 
      
 52 
     | 
    
         
            +
                # wildcard route that will match anything
         
     | 
| 
      
 53 
     | 
    
         
            +
                match ':id' => 'pages#show'
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            ## Configuration
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
            By default, you can switch between Guest and all users in users table, you don't need to do anything. The following is the default configuration.
         
     | 
| 
       57 
58 
     | 
    
         | 
| 
         @@ -120,8 +121,9 @@ If you want to redirect user to "/dashboard" page 
     | 
|
| 
       120 
121 
     | 
    
         | 
| 
       121 
122 
     | 
    
         
             
                config.redirect_path = lambda { |request, params| "/dashboard" }
         
     | 
| 
       122 
123 
     | 
    
         | 
| 
      
 124 
     | 
    
         
            +
            ## Credit
         
     | 
| 
       123 
125 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
            Copyright © 2010 Richard Huang (flyerhzm@gmail.com), released under the MIT license
         
     | 
| 
      
 126 
     | 
    
         
            +
            Copyright © 2010 - 2012 Richard Huang (flyerhzm@gmail.com), released under the MIT license
         
     | 
| 
       125 
127 
     | 
    
         | 
| 
       126 
128 
     | 
    
         
             
            [0]: https://github.com/tablatom/hobo
         
     | 
| 
       127 
129 
     | 
    
         
             
            [1]: http://switch-user-example.heroku.com/
         
     | 
| 
         @@ -7,108 +7,34 @@ class SwitchUserController < ApplicationController 
     | 
|
| 
       7 
7 
     | 
    
         
             
              before_filter :developer_modes_only
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
              def set_current_user
         
     | 
| 
       10 
     | 
    
         
            -
                 
     | 
| 
      
 10 
     | 
    
         
            +
                handle_request(params)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       11 
12 
     | 
    
         
             
                redirect_to(SwitchUser.redirect_path.call(request, params))
         
     | 
| 
       12 
13 
     | 
    
         
             
              end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
              private
         
     | 
| 
       15 
     | 
    
         
            -
                def developer_modes_only
         
     | 
| 
       16 
     | 
    
         
            -
                  render :text => "Permission Denied", :status => 403 unless available?
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                def available?
         
     | 
| 
       20 
     | 
    
         
            -
                  current_user = send("#{SwitchUser.provider}_current_user")
         
     | 
| 
       21 
     | 
    
         
            -
                  SwitchUser.controller_guard.call(current_user, request)
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                def devise_handle(params)
         
     | 
| 
       25 
     | 
    
         
            -
                  if params[:scope_identifier].blank?
         
     | 
| 
       26 
     | 
    
         
            -
                    SwitchUser.available_users.keys.each do |s|
         
     | 
| 
       27 
     | 
    
         
            -
                      warden.logout(s)
         
     | 
| 
       28 
     | 
    
         
            -
                    end
         
     | 
| 
       29 
     | 
    
         
            -
                  else
         
     | 
| 
       30 
     | 
    
         
            -
                    params[:scope_identifier] =~ /^([^_]+)_(.*)$/
         
     | 
| 
       31 
     | 
    
         
            -
                    scope, identifier = $1, $2
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                    SwitchUser.available_users.keys.each do |s|
         
     | 
| 
       34 
     | 
    
         
            -
                      if scope == s.to_s
         
     | 
| 
       35 
     | 
    
         
            -
                        user = find_user(scope, s, identifier)
         
     | 
| 
       36 
     | 
    
         
            -
                        warden.set_user(user, :scope => scope)
         
     | 
| 
       37 
     | 
    
         
            -
                      else
         
     | 
| 
       38 
     | 
    
         
            -
                        warden.logout(s)
         
     | 
| 
       39 
     | 
    
         
            -
                      end
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                def authlogic_handle(params)
         
     | 
| 
       45 
     | 
    
         
            -
                  if params[:scope_identifier].blank?
         
     | 
| 
       46 
     | 
    
         
            -
                    current_user_session.destroy
         
     | 
| 
       47 
     | 
    
         
            -
                  else
         
     | 
| 
       48 
     | 
    
         
            -
                    params[:scope_identifier] =~ /^([^_]+)_(.*)$/
         
     | 
| 
       49 
     | 
    
         
            -
                    scope, identifier = $1, $2
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                    SwitchUser.available_users.keys.each do |s|
         
     | 
| 
       52 
     | 
    
         
            -
                      if scope == s.to_s
         
     | 
| 
       53 
     | 
    
         
            -
                        user = find_user(scope, s, identifier)
         
     | 
| 
       54 
     | 
    
         
            -
                        UserSession.create(user)
         
     | 
| 
       55 
     | 
    
         
            -
                      end
         
     | 
| 
       56 
     | 
    
         
            -
                    end
         
     | 
| 
       57 
     | 
    
         
            -
                  end
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                def restful_authentication_handle(params)
         
     | 
| 
       61 
     | 
    
         
            -
                  if params[:scope_identifier].blank?
         
     | 
| 
       62 
     | 
    
         
            -
                    logout_killing_session!
         
     | 
| 
       63 
     | 
    
         
            -
                  else
         
     | 
| 
       64 
     | 
    
         
            -
                    params[:scope_identifier] =~ /^([^_]+)_(.*)$/
         
     | 
| 
       65 
     | 
    
         
            -
                    scope, identifier = $1, $2
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                    SwitchUser.available_users.keys.each do |s|
         
     | 
| 
       68 
     | 
    
         
            -
                      if scope == s.to_s && user = find_user(scope, s, identifier)
         
     | 
| 
       69 
     | 
    
         
            -
                        self.current_user = user
         
     | 
| 
       70 
     | 
    
         
            -
                      end
         
     | 
| 
       71 
     | 
    
         
            -
                    end
         
     | 
| 
       72 
     | 
    
         
            -
                  end
         
     | 
| 
       73 
     | 
    
         
            -
                end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                def sorcery_handle(params)
         
     | 
| 
       76 
     | 
    
         
            -
                  if params[:scope_identifier].blank?
         
     | 
| 
       77 
     | 
    
         
            -
                    self.logout
         
     | 
| 
       78 
     | 
    
         
            -
                  else
         
     | 
| 
       79 
     | 
    
         
            -
                    params[:scope_identifier] =~ /^([^_]+)_(.*)$/
         
     | 
| 
       80 
     | 
    
         
            -
                    scope, identifier = $1, $2
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                    SwitchUser.available_users.keys.each do |s|
         
     | 
| 
       83 
     | 
    
         
            -
                      if scope == s.to_s && user = find_user(scope, s, identifier)
         
     | 
| 
       84 
     | 
    
         
            -
                        self.auto_login(user)
         
     | 
| 
       85 
     | 
    
         
            -
                      end
         
     | 
| 
       86 
     | 
    
         
            -
                    end
         
     | 
| 
       87 
     | 
    
         
            -
                  end
         
     | 
| 
       88 
     | 
    
         
            -
                end
         
     | 
| 
       89 
16 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                    scope.classify.constantize.find(identifier)
         
     | 
| 
       94 
     | 
    
         
            -
                  else
         
     | 
| 
       95 
     | 
    
         
            -
                    scope.classify.constantize.send("find_by_#{identifier_column}!", identifier)
         
     | 
| 
       96 
     | 
    
         
            -
                  end
         
     | 
| 
       97 
     | 
    
         
            -
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              def developer_modes_only
         
     | 
| 
      
 18 
     | 
    
         
            +
                render :text => "Permission Denied", :status => 403 unless available?
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
       98 
20 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 22 
     | 
    
         
            +
                SwitchUser.controller_guard.call(provider.current_user, request)
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
       102 
24 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
              def handle_request(params)
         
     | 
| 
      
 26 
     | 
    
         
            +
                if params[:scope_identifier].blank?
         
     | 
| 
      
 27 
     | 
    
         
            +
                  provider.logout_all
         
     | 
| 
      
 28 
     | 
    
         
            +
                else
         
     | 
| 
      
 29 
     | 
    
         
            +
                  params[:scope_identifier] =~ /^([^_]+)_(.*)$/
         
     | 
| 
      
 30 
     | 
    
         
            +
                  scope, identifier = $1, $2
         
     | 
| 
       106 
31 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                   
     | 
| 
      
 32 
     | 
    
         
            +
                  user = SwitchUser::UserLoader.new(scope, identifier).load
         
     | 
| 
      
 33 
     | 
    
         
            +
                  provider.login_exclusive(user, :scope => scope)
         
     | 
| 
       109 
34 
     | 
    
         
             
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
       110 
36 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
              def provider
         
     | 
| 
      
 38 
     | 
    
         
            +
                SwitchUser.provider_class.new(self)
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
       114 
40 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,37 +1,48 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module SwitchUserHelper
         
     | 
| 
       2 
2 
     | 
    
         
             
              def switch_user_select
         
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                   
     | 
| 
       9 
     | 
    
         
            -
                  SwitchUser. 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                     
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                      end
         
     | 
| 
       19 
     | 
    
         
            -
                    end
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
       21 
     | 
    
         
            -
                  if options.respond_to?(:html_safe)
         
     | 
| 
       22 
     | 
    
         
            -
                    options = options.html_safe
         
     | 
| 
      
 3 
     | 
    
         
            +
                return unless available?
         
     | 
| 
      
 4 
     | 
    
         
            +
                options = ""
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                options += content_tag(:option, "Guest", :value => "", :selected => !current_user)
         
     | 
| 
      
 7 
     | 
    
         
            +
                SwitchUser.available_users.each do |scope, user_proc|
         
     | 
| 
      
 8 
     | 
    
         
            +
                  current_user = provider.current_user(scope)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  id_name = SwitchUser.available_users_identifiers[scope]
         
     | 
| 
      
 10 
     | 
    
         
            +
                  name = SwitchUser.available_users_names[scope]
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  user_proc.call.each do |user|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    user_match = (user == current_user)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    options += content_tag(:option,
         
     | 
| 
      
 15 
     | 
    
         
            +
                                           tag_label(user, name),
         
     | 
| 
      
 16 
     | 
    
         
            +
                                           :value => tag_value(user, id_name, scope),
         
     | 
| 
      
 17 
     | 
    
         
            +
                                           :selected => user_match)
         
     | 
| 
       23 
18 
     | 
    
         
             
                  end
         
     | 
| 
       24 
     | 
    
         
            -
                  select_tag "switch_user_identifier", options,
         
     | 
| 
       25 
     | 
    
         
            -
                             :onchange => "location.href = '/switch_user?scope_identifier=' + encodeURIComponent(this.options[this.selectedIndex].value)"
         
     | 
| 
       26 
19 
     | 
    
         
             
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                if options.respond_to?(:html_safe)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  options = options.html_safe
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                select_tag "switch_user_identifier", options,
         
     | 
| 
      
 25 
     | 
    
         
            +
                  :onchange => "location.href = '/switch_user?scope_identifier=' + encodeURIComponent(this.options[this.selectedIndex].value)"
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              private
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def tag_value(user, id_name, scope)
         
     | 
| 
      
 31 
     | 
    
         
            +
                identifier = user.send(id_name)
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                "#{scope}_#{identifier}"
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def tag_label(user, name)
         
     | 
| 
      
 37 
     | 
    
         
            +
                user.send(name)
         
     | 
| 
       27 
38 
     | 
    
         
             
              end
         
     | 
| 
       28 
39 
     | 
    
         | 
| 
       29 
40 
     | 
    
         
             
              def available?
         
     | 
| 
       30 
     | 
    
         
            -
                user =  
     | 
| 
       31 
     | 
    
         
            -
                SwitchUser.available_users.keys.each do |scope|
         
     | 
| 
       32 
     | 
    
         
            -
                  user = send("current_#{scope}")
         
     | 
| 
       33 
     | 
    
         
            -
                  break if user
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                user = provider.current_users_without_scope.first
         
     | 
| 
       35 
42 
     | 
    
         
             
                SwitchUser.view_guard.call(user, request)
         
     | 
| 
       36 
43 
     | 
    
         
             
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              def provider
         
     | 
| 
      
 46 
     | 
    
         
            +
                SwitchUser.provider_class.new(controller)
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
       37 
48 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'switch_user/provider/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Provider
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Authlogic < Base
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(controller)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @controller = controller
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def login(user, scope = nil)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    UserSession.create(user)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def logout(scope = nil)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @controller.current_user_session.destroy
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def current_user(scope = nil)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    result = UserSession.find
         
     | 
| 
      
 20 
     | 
    
         
            +
                    if result
         
     | 
| 
      
 21 
     | 
    
         
            +
                      result.record
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Provider
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Base
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def current_users_without_scope
         
     | 
| 
      
 5 
     | 
    
         
            +
                    SwitchUser.available_scopes.inject([]) do |users, scope|
         
     | 
| 
      
 6 
     | 
    
         
            +
                      user = current_user(scope)
         
     | 
| 
      
 7 
     | 
    
         
            +
                      users << user if user
         
     | 
| 
      
 8 
     | 
    
         
            +
                      users
         
     | 
| 
      
 9 
     | 
    
         
            +
                    end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def login_exclusive(user, args)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    requested_scope = args.fetch(:scope, :user).to_sym
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    logout_all
         
     | 
| 
      
 16 
     | 
    
         
            +
                    login(user, requested_scope)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def logout_all
         
     | 
| 
      
 20 
     | 
    
         
            +
                    SwitchUser.available_scopes.each do |scope|
         
     | 
| 
      
 21 
     | 
    
         
            +
                      logout(scope)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'switch_user/provider/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Provider
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Devise < Base
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(controller)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @controller = controller
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @warden = @controller.warden
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def login(user, scope = :user)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @warden.set_user(user, :scope => scope)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def logout(scope = :user)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @warden.logout(scope)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def current_user(scope = :user)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @controller.send("current_#{scope}")
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'switch_user/provider/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Provider
         
     | 
| 
      
 5 
     | 
    
         
            +
                class RestfulAuthentication < Base
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(controller)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @controller = controller
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def login(user, scope = nil)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @controller.current_user = user
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def logout(scope = nil)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @controller.logout_killing_session!
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def current_user(scope = nil)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @controller.current_user
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'switch_user/provider/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Provider
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Sorcery < Base
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(controller)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @controller = controller
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def login(user, scope = nil)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @controller.auto_login(user)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def logout(scope = nil)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @controller.logout
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def current_user(scope = nil)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @controller.current_user
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,8 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Provider
         
     | 
| 
      
 3 
     | 
    
         
            +
                autoload :Authlogic, "switch_user/provider/authlogic"
         
     | 
| 
      
 4 
     | 
    
         
            +
                autoload :Devise, "switch_user/provider/devise"
         
     | 
| 
      
 5 
     | 
    
         
            +
                autoload :RestfulAuthentication, "switch_user/provider/restful_authentication"
         
     | 
| 
      
 6 
     | 
    
         
            +
                autoload :Sorcery, "switch_user/provider/sorcery"
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            if defined?(Rails)
         
     | 
| 
      
 2 
     | 
    
         
            +
              if defined? Rails::Engine
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Engine < Rails::Engine
         
     | 
| 
      
 4 
     | 
    
         
            +
                  config.to_prepare do
         
     | 
| 
      
 5 
     | 
    
         
            +
                    ActionView::Base.send :include, SwitchUserHelper
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
              else
         
     | 
| 
      
 9 
     | 
    
         
            +
                %w(controllers helpers).each do |dir|
         
     | 
| 
      
 10 
     | 
    
         
            +
                  path = File.join(File.dirname(__FILE__), '..', 'app', dir)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  $LOAD_PATH << path
         
     | 
| 
      
 12 
     | 
    
         
            +
                  ActiveSupport::Dependencies.load_paths << path
         
     | 
| 
      
 13 
     | 
    
         
            +
                  ActiveSupport::Dependencies.load_once_paths.delete(path)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  ActionView::Base.send :include, SwitchUserHelper
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SwitchUser
         
     | 
| 
      
 2 
     | 
    
         
            +
              class UserLoader
         
     | 
| 
      
 3 
     | 
    
         
            +
                attr_reader :scope
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_accessor :id
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                def initialize(scope, id)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  self.scope = scope
         
     | 
| 
      
 8 
     | 
    
         
            +
                  self.id = id
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def load
         
     | 
| 
      
 12 
     | 
    
         
            +
                  user_class.send(finder, id)
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                private
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def scope=(scope)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  if SwitchUser.available_scopes.include?(scope.to_sym)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @scope = scope
         
     | 
| 
      
 20 
     | 
    
         
            +
                  else
         
     | 
| 
      
 21 
     | 
    
         
            +
                    raise InvalidScope
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def user_class
         
     | 
| 
      
 26 
     | 
    
         
            +
                  scope.classify.constantize
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def finder
         
     | 
| 
      
 30 
     | 
    
         
            +
                  column_name = SwitchUser.available_users_identifiers[scope.to_sym]
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  "find_by_#{column_name}"
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/switch_user/version.rb
    CHANGED
    
    
    
        data/lib/switch_user.rb
    CHANGED
    
    | 
         @@ -1,41 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'switch_user/rails'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user/provider'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'active_support/core_ext'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       1 
5 
     | 
    
         
             
            module SwitchUser
         
     | 
| 
       2 
     | 
    
         
            -
               
     | 
| 
       3 
     | 
    
         
            -
                class Engine < Rails::Engine
         
     | 
| 
       4 
     | 
    
         
            -
                  config.to_prepare do
         
     | 
| 
       5 
     | 
    
         
            -
                    ActionView::Base.send :include, SwitchUserHelper
         
     | 
| 
       6 
     | 
    
         
            -
                  end
         
     | 
| 
       7 
     | 
    
         
            -
                end
         
     | 
| 
       8 
     | 
    
         
            -
              else
         
     | 
| 
       9 
     | 
    
         
            -
                %w(controllers helpers).each do |dir|
         
     | 
| 
       10 
     | 
    
         
            -
                  path = File.join(File.dirname(__FILE__), '..', 'app', dir)
         
     | 
| 
       11 
     | 
    
         
            -
                  $LOAD_PATH << path
         
     | 
| 
       12 
     | 
    
         
            -
                  ActiveSupport::Dependencies.load_paths << path
         
     | 
| 
       13 
     | 
    
         
            -
                  ActiveSupport::Dependencies.load_once_paths.delete(path)
         
     | 
| 
       14 
     | 
    
         
            -
                  ActionView::Base.send :include, SwitchUserHelper
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
      
 6 
     | 
    
         
            +
              autoload :UserLoader, "switch_user/user_loader"
         
     | 
| 
       17 
7 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
               
     | 
| 
       19 
     | 
    
         
            -
              self.provider = :devise
         
     | 
| 
      
 8 
     | 
    
         
            +
              class InvalidScope < Exception; end
         
     | 
| 
       20 
9 
     | 
    
         | 
| 
      
 10 
     | 
    
         
            +
              mattr_accessor :provider
         
     | 
| 
       21 
11 
     | 
    
         
             
              mattr_accessor :available_users
         
     | 
| 
       22 
     | 
    
         
            -
              self.available_users = { :user => lambda { User.all } }
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
12 
     | 
    
         
             
              mattr_accessor :available_users_identifiers
         
     | 
| 
       25 
     | 
    
         
            -
              self.available_users_identifiers = { :user => :id }
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
13 
     | 
    
         
             
              mattr_accessor :available_users_names
         
     | 
| 
       28 
     | 
    
         
            -
              self.available_users_names = { :user => :email }
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
14 
     | 
    
         
             
              mattr_accessor :controller_guard
         
     | 
| 
       31 
     | 
    
         
            -
              self.controller_guard = lambda { |current_user, request| Rails.env.development? }
         
     | 
| 
       32 
15 
     | 
    
         
             
              mattr_accessor :view_guard
         
     | 
| 
       33 
     | 
    
         
            -
              self.view_guard = lambda { |current_user, request| Rails.env.development? }
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
16 
     | 
    
         
             
              mattr_accessor :redirect_path
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       38 
18 
     | 
    
         
             
              def self.setup
         
     | 
| 
       39 
19 
     | 
    
         
             
                yield self
         
     | 
| 
       40 
20 
     | 
    
         
             
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def self.provider_class
         
     | 
| 
      
 23 
     | 
    
         
            +
                "SwitchUser::Provider::#{provider.to_s.classify}".constantize
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def self.available_scopes
         
     | 
| 
      
 27 
     | 
    
         
            +
                available_users.keys
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              private
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def self.reset_config
         
     | 
| 
      
 33 
     | 
    
         
            +
                self.provider = :devise
         
     | 
| 
      
 34 
     | 
    
         
            +
                self.available_users = { :user => lambda { User.all } }
         
     | 
| 
      
 35 
     | 
    
         
            +
                self.available_users_identifiers = { :user => :id }
         
     | 
| 
      
 36 
     | 
    
         
            +
                self.available_users_names = { :user => :email }
         
     | 
| 
      
 37 
     | 
    
         
            +
                self.controller_guard = lambda { |current_user, request| Rails.env.development? }
         
     | 
| 
      
 38 
     | 
    
         
            +
                self.view_guard = lambda { |current_user, request| Rails.env.development? }
         
     | 
| 
      
 39 
     | 
    
         
            +
                self.redirect_path = lambda { |request, params| request.env["HTTP_REFERER"] ? :back : root_path }
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              reset_config
         
     | 
| 
       41 
43 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user/provider/authlogic'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class UserSession
         
     | 
| 
      
 5 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_accessor :user
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def create(user)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  self.user = user
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def destroy
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.user = nil
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def find
         
     | 
| 
      
 17 
     | 
    
         
            +
                  self
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def record
         
     | 
| 
      
 21 
     | 
    
         
            +
                  user
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            class AuthlogicController
         
     | 
| 
      
 27 
     | 
    
         
            +
              def current_user_session
         
     | 
| 
      
 28 
     | 
    
         
            +
                UserSession
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            describe SwitchUser::Provider::Authlogic do
         
     | 
| 
      
 33 
     | 
    
         
            +
              let(:controller) { AuthlogicController.new }
         
     | 
| 
      
 34 
     | 
    
         
            +
              let(:provider) { SwitchUser::Provider::Authlogic.new(controller) }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              it_behaves_like "a provider"
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,86 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user/provider/devise'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class FakeWarden
         
     | 
| 
      
 5 
     | 
    
         
            +
              attr_reader :user_hash
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def initialize
         
     | 
| 
      
 8 
     | 
    
         
            +
                @user_hash = {}
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def set_user(user, args)
         
     | 
| 
      
 12 
     | 
    
         
            +
                scope = args.fetch(:scope, :user)
         
     | 
| 
      
 13 
     | 
    
         
            +
                @user_hash[scope] = user
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              def logout(scope)
         
     | 
| 
      
 17 
     | 
    
         
            +
                @user_hash.delete(scope)
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            class DeviseController
         
     | 
| 
      
 22 
     | 
    
         
            +
              def warden
         
     | 
| 
      
 23 
     | 
    
         
            +
                @warden ||= FakeWarden.new
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def current_user
         
     | 
| 
      
 27 
     | 
    
         
            +
                @warden.user_hash[:user]
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def current_admin
         
     | 
| 
      
 31 
     | 
    
         
            +
                @warden.user_hash[:admin]
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            describe SwitchUser::Provider::Devise do
         
     | 
| 
      
 36 
     | 
    
         
            +
              let(:controller) { DeviseController.new }
         
     | 
| 
      
 37 
     | 
    
         
            +
              let(:provider) { SwitchUser::Provider::Devise.new(controller) }
         
     | 
| 
      
 38 
     | 
    
         
            +
              let(:user) { stub(:user) }
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              it_behaves_like "a provider"
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              it "can use alternate scopes" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                user = stub(:user)
         
     | 
| 
      
 44 
     | 
    
         
            +
                provider.login(user, :admin)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                provider.current_user(:admin).should == user
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              describe "#login_exclusive" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                before do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
         
     | 
| 
      
 52 
     | 
    
         
            +
                  provider.login(user, :admin)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  provider.login_exclusive(user, :scope => "user")
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                it "logs the user in" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  provider.current_user.should == user
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                it "logs out other scopes" do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  provider.current_user(:admin).should be_nil
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              describe "#logout_all" do
         
     | 
| 
      
 66 
     | 
    
         
            +
                it "logs out users under all scopes" do
         
     | 
| 
      
 67 
     | 
    
         
            +
                  SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
         
     | 
| 
      
 68 
     | 
    
         
            +
                  provider.login(user, :admin)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  provider.login(user, :user)
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  provider.logout_all
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  provider.current_user(:admin).should be_nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                  provider.current_user(:user).should be_nil
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              describe "#all_current_users" do
         
     | 
| 
      
 79 
     | 
    
         
            +
                it "pulls users from an alternate scope" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
         
     | 
| 
      
 81 
     | 
    
         
            +
                  provider.login(user, :admin)
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  provider.current_users_without_scope.should == [user]
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user/provider/restful_authentication'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class RestfulAuthenticationController
         
     | 
| 
      
 5 
     | 
    
         
            +
              attr_accessor :current_user
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def logout_killing_session!
         
     | 
| 
      
 8 
     | 
    
         
            +
                self.current_user = nil
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
            end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            describe SwitchUser::Provider::RestfulAuthentication do
         
     | 
| 
      
 13 
     | 
    
         
            +
              let(:controller) { RestfulAuthenticationController.new }
         
     | 
| 
      
 14 
     | 
    
         
            +
              let(:provider) { SwitchUser::Provider::RestfulAuthentication.new(controller) }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              it_behaves_like "a provider"
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user/provider/sorcery'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class SorceryController
         
     | 
| 
      
 5 
     | 
    
         
            +
              def logout
         
     | 
| 
      
 6 
     | 
    
         
            +
                @user = nil
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def auto_login(user)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @user = user
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def current_user
         
     | 
| 
      
 14 
     | 
    
         
            +
                @user
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            describe SwitchUser::Provider::Sorcery do
         
     | 
| 
      
 19 
     | 
    
         
            +
              let(:controller) { SorceryController.new }
         
     | 
| 
      
 20 
     | 
    
         
            +
              let(:provider) { SwitchUser::Provider::Sorcery.new(controller) }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              it_behaves_like "a provider"
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'support/provider'
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            shared_examples_for "a provider" do
         
     | 
| 
      
 2 
     | 
    
         
            +
              let(:user) { stub(:user) }
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              it "can log a user in" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                provider.login(user)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                provider.current_user.should == user
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              it "can log a user out" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                provider.login(user)
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                provider.logout
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                provider.current_user.should == nil
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              it "responds to login_exclusive" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                provider.should respond_to(:login_exclusive)
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              it "knows if there are any users logged in" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                provider.login(user)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                provider.current_users_without_scope.should == [user]
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user/user_loader'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class User
         
     | 
| 
      
 5 
     | 
    
         
            +
              def self.find_by_id(id)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
            end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            describe SwitchUser::UserLoader do
         
     | 
| 
      
 10 
     | 
    
         
            +
              let(:user) { stub(:user) }
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it "raises an exception if we are passed an invalid scope" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                expect { SwitchUser::UserLoader.new("useeer", 1) }.to raise_error(SwitchUser::InvalidScope)
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              it "loads a user" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                User.stub(:find_by_id).with(1).and_return(user)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                loader = SwitchUser::UserLoader.new("user", 1)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                loader.load.should == user
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              it "returns nil if no user is found" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                loader = SwitchUser::UserLoader.new("user", 2)
         
     | 
| 
      
 26 
     | 
    
         
            +
                loader.load.should == nil
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              it "loads a user with an alternate identifier column" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                User.stub(:find_by_email).with(2).and_return(user)
         
     | 
| 
      
 31 
     | 
    
         
            +
                SwitchUser.available_users_identifiers = {:user => :email}
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                loader = SwitchUser::UserLoader.new("user", 2)
         
     | 
| 
      
 34 
     | 
    
         
            +
                loader.load.should == user
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'switch_user'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe SwitchUser do
         
     | 
| 
      
 5 
     | 
    
         
            +
              it "has a default provider" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                SwitchUser.provider.should == :devise
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              describe "#available_scopes" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                it "returns a list of available scopes" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  SwitchUser.available_scopes.should == [:user]
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              describe "assigning the provider" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                it "sets the provider" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # ensure we aren't breaking existing functionality
         
     | 
| 
      
 18 
     | 
    
         
            +
                  SwitchUser.provider = :sorcery
         
     | 
| 
      
 19 
     | 
    
         
            +
                  SwitchUser.provider.should == :sorcery
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
                it "sets the provider class" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  SwitchUser.provider = :devise
         
     | 
| 
      
 23 
     | 
    
         
            +
                  SwitchUser.provider_class.should == SwitchUser::Provider::Devise
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
    
        data/switch_user.gemspec
    CHANGED
    
    | 
         @@ -5,7 +5,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       5 
5 
     | 
    
         
             
              s.name        = "switch_user"
         
     | 
| 
       6 
6 
     | 
    
         
             
              s.version     = SwitchUser::VERSION
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.platform    = Gem::Platform::RUBY
         
     | 
| 
       8 
     | 
    
         
            -
              s.authors     = ["Richard Huang"]
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.authors     = ["Richard Huang", "Luke Cowell"]
         
     | 
| 
       9 
9 
     | 
    
         
             
              s.email       = ["flyerhzm@gmail.com"]
         
     | 
| 
       10 
10 
     | 
    
         
             
              s.homepage    = "http://rubygems.org/gems/switch_user"
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.summary     = "Easily switch current user to speed up development"
         
     | 
| 
         @@ -14,7 +14,9 @@ Gem::Specification.new do |s| 
     | 
|
| 
       14 
14 
     | 
    
         
             
              s.required_rubygems_version = ">= 1.3.6"
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.rubyforge_project         = "switch_user"
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
              s.add_dependency "activesupport"
         
     | 
| 
       17 
18 
     | 
    
         
             
              s.add_development_dependency "bundler", ">= 1.0.0"
         
     | 
| 
      
 19 
     | 
    
         
            +
              s.add_development_dependency "rspec", "~> 2.11.0"
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
       19 
21 
     | 
    
         
             
              s.files        = `git ls-files`.split("\n")
         
     | 
| 
       20 
22 
     | 
    
         
             
              s.executables  = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,27 +1,65 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: switch_user
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Richard Huang
         
     | 
| 
      
 9 
     | 
    
         
            +
            - Luke Cowell
         
     | 
| 
       9 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2012-10-31 00:00:00.000000000 Z
         
     | 
| 
       13 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
      
 15 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 16 
     | 
    
         
            +
              name: activesupport
         
     | 
| 
      
 17 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 18 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 19 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 20 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 21 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 22 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 23 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 24 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 25 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 26 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 27 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 28 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 29 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 30 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       14 
31 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
32 
     | 
    
         
             
              name: bundler
         
     | 
| 
       16 
     | 
    
         
            -
              requirement:  
     | 
| 
      
 33 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 34 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 35 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 36 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 37 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 38 
     | 
    
         
            +
                    version: 1.0.0
         
     | 
| 
      
 39 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 40 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 41 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       17 
42 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
43 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
44 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       20 
45 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       21 
46 
     | 
    
         
             
                    version: 1.0.0
         
     | 
| 
      
 47 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 48 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 49 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 50 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: 2.11.0
         
     | 
| 
       22 
55 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
56 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements:  
     | 
| 
      
 57 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 59 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 60 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 61 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 62 
     | 
    
         
            +
                    version: 2.11.0
         
     | 
| 
       25 
63 
     | 
    
         
             
            description: Easily switch current user to speed up development
         
     | 
| 
       26 
64 
     | 
    
         
             
            email:
         
     | 
| 
       27 
65 
     | 
    
         
             
            - flyerhzm@gmail.com
         
     | 
| 
         @@ -30,6 +68,7 @@ extensions: [] 
     | 
|
| 
       30 
68 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       31 
69 
     | 
    
         
             
            files:
         
     | 
| 
       32 
70 
     | 
    
         
             
            - .gitignore
         
     | 
| 
      
 71 
     | 
    
         
            +
            - .rspec
         
     | 
| 
       33 
72 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       34 
73 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       35 
74 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -38,8 +77,24 @@ files: 
     | 
|
| 
       38 
77 
     | 
    
         
             
            - app/helpers/switch_user_helper.rb
         
     | 
| 
       39 
78 
     | 
    
         
             
            - config/routes.rb
         
     | 
| 
       40 
79 
     | 
    
         
             
            - lib/switch_user.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - lib/switch_user/provider.rb
         
     | 
| 
      
 81 
     | 
    
         
            +
            - lib/switch_user/provider/authlogic.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - lib/switch_user/provider/base.rb
         
     | 
| 
      
 83 
     | 
    
         
            +
            - lib/switch_user/provider/devise.rb
         
     | 
| 
      
 84 
     | 
    
         
            +
            - lib/switch_user/provider/restful_authentication.rb
         
     | 
| 
      
 85 
     | 
    
         
            +
            - lib/switch_user/provider/sorcery.rb
         
     | 
| 
      
 86 
     | 
    
         
            +
            - lib/switch_user/rails.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - lib/switch_user/user_loader.rb
         
     | 
| 
       41 
88 
     | 
    
         
             
            - lib/switch_user/version.rb
         
     | 
| 
       42 
89 
     | 
    
         
             
            - rails/init.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - spec/provider/authlogic_spec.rb
         
     | 
| 
      
 91 
     | 
    
         
            +
            - spec/provider/devise_spec.rb
         
     | 
| 
      
 92 
     | 
    
         
            +
            - spec/provider/restful_authrentication_spec.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - spec/provider/sorcery_spec.rb
         
     | 
| 
      
 94 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 95 
     | 
    
         
            +
            - spec/support/provider.rb
         
     | 
| 
      
 96 
     | 
    
         
            +
            - spec/switch_user/user_loader_spec.rb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - spec/switch_user_spec.rb
         
     | 
| 
       43 
98 
     | 
    
         
             
            - switch_user.gemspec
         
     | 
| 
       44 
99 
     | 
    
         
             
            homepage: http://rubygems.org/gems/switch_user
         
     | 
| 
       45 
100 
     | 
    
         
             
            licenses: []
         
     | 
| 
         @@ -61,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       61 
116 
     | 
    
         
             
                  version: 1.3.6
         
     | 
| 
       62 
117 
     | 
    
         
             
            requirements: []
         
     | 
| 
       63 
118 
     | 
    
         
             
            rubyforge_project: switch_user
         
     | 
| 
       64 
     | 
    
         
            -
            rubygems_version: 1.8. 
     | 
| 
      
 119 
     | 
    
         
            +
            rubygems_version: 1.8.23
         
     | 
| 
       65 
120 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       66 
121 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       67 
122 
     | 
    
         
             
            summary: Easily switch current user to speed up development
         
     |