pretender 0.3.2 → 0.3.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c0ab4d0149f46b7e67a8dce743f1ca1af138dc83
4
- data.tar.gz: 024cda09d36830a14181e4c2804f0e0de91e79d0
2
+ SHA256:
3
+ metadata.gz: 3deb0e2dc3a17b16d42141dd2552f14c5060f33c1190bc7507293ad7b1db5684
4
+ data.tar.gz: 9931e74f8ad318081ee5f2b77148871fe14934f274124e77c6b94a3d6558e135
5
5
  SHA512:
6
- metadata.gz: c9363670918c4f314ca836ef35e0f605e072592ec52bcd71bd8e24302338a06f6acc004dfe38daf83a9071305edc522b811aab9537e7bea450e233b6ced32e10
7
- data.tar.gz: 372bde2ce4d5e55abaa2ef747afa726b243e2fe6dc9bbcf7a90f72722f454bb1f5d33e561147e0e35e34959a4a44656f03c970bc3fa514d0f56eb1ee1a37dd83
6
+ metadata.gz: c56b632e14b220ae4e795eabc36a5b08b71ed78eb9a19f60c3f4a1b9fb4a3a376a152e3d135b441cbbefe0e1ebd5351ffa2413ce96a9b363006ec5f9896593b4
7
+ data.tar.gz: 3bf7ae9760fc675dbe3ba74caa02229f542a6eb840041d2089a2730bb182116c9ba50959891559e10a7e3818cbda0f11ac2ccc8d08028e642756952093b9db71
@@ -1,3 +1,7 @@
1
+ ## 0.3.3
2
+
3
+ - Added support for Action Cable
4
+
1
5
  ## 0.3.2
2
6
 
3
7
  - Support for Mongoid `BSON::ObjectId` out of the box
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Andrew Kane
1
+ Copyright (c) 2013-2018 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Pretender
2
2
 
3
- As an admin, there are times you want to see exactly what another user sees. Meet Pretender.
3
+ As an admin, there are times you want to see exactly what another user sees. Meet Pretender.
4
4
 
5
5
  - Easily to switch between users
6
6
  - Minimal code changes
7
- - Plays nicely with auditing tools
7
+ - Plays nicely with Action Cable and auditing tools
8
8
 
9
- :boom: [Rock on](http://www.youtube.com/watch?v=SBjQ9tuuTJQ)
9
+ :boom: [Rock on](https://www.youtube.com/watch?v=SBjQ9tuuTJQ)
10
10
 
11
- Pretender is flexible and lightweight - less than 60 lines of code :-)
11
+ Pretender is flexible and lightweight - less than 100 lines of code :-)
12
12
 
13
13
  Works with any authentication system - [Devise](https://github.com/plataformatec/devise), [Authlogic](https://github.com/binarylogic/authlogic), and [Sorcery](https://github.com/Sorcery/sorcery) to name a few.
14
14
 
@@ -113,14 +113,40 @@ If you keep audit logs with a library like [Audited](https://github.com/collecti
113
113
  Audited.current_user_method = :true_user
114
114
  ```
115
115
 
116
+ ## Action Cable
117
+
118
+ And add this to your `ApplicationCable::Connection`:
119
+
120
+ ```ruby
121
+ module ApplicationCable
122
+ class Connection < ActionCable::Connection::Base
123
+ identified_by :current_user, :true_user
124
+ impersonates :user
125
+
126
+ def connect
127
+ self.current_user = find_verified_user
128
+ reject_unauthorized_connection unless current_user
129
+ end
130
+
131
+ private
132
+
133
+ def find_verified_user
134
+ env["warden"].user # for Devise
135
+ end
136
+ end
137
+ end
138
+ ```
139
+
140
+ The `current_user` method now returns the impersonated user in channels.
141
+
116
142
  ## Configuration
117
143
 
118
- Pretender is super flexible. You can change the names of methods and even impersonate multiple roles at the same time. Here’s the default configuration.
144
+ Pretender is super flexible. You can change the names of methods and even impersonate multiple roles at the same time. Here’s the default configuration.
119
145
 
120
146
  ```ruby
121
147
  impersonates :user,
122
148
  method: :current_user,
123
- with: -> (id) { User.find_by(id: id) }
149
+ with: ->(id) { User.find_by(id: id) }
124
150
  ```
125
151
 
126
152
  Mold it to fit your application.
@@ -128,7 +154,7 @@ Mold it to fit your application.
128
154
  ```ruby
129
155
  impersonates :account,
130
156
  method: :authenticated_account,
131
- with: -> (id) { EnterpriseAccount.find_by(id: id) }
157
+ with: ->(id) { EnterpriseAccount.find_by(id: id) }
132
158
  ```
133
159
 
134
160
  This creates three methods:
@@ -33,14 +33,14 @@ module Pretender
33
33
  define_method impersonated_method do
34
34
  impersonated_resource = instance_variable_get(impersonated_var) if instance_variable_defined?(impersonated_var)
35
35
 
36
- if !impersonated_resource && session[session_key]
36
+ if !impersonated_resource && request.session[session_key]
37
37
  # only fetch impersonation if user is logged in
38
38
  # this is a safety check (once per request) so
39
39
  # if a user logs out without session being destroyed
40
40
  # or stop_impersonating_user being called,
41
41
  # we can stop the impersonation
42
42
  if send(true_method)
43
- impersonated_resource = impersonate_with.call(session[session_key])
43
+ impersonated_resource = impersonate_with.call(request.session[session_key])
44
44
  instance_variable_set(impersonated_var, impersonated_resource) if impersonated_resource
45
45
  else
46
46
  # TODO better message
@@ -58,12 +58,12 @@ module Pretender
58
58
 
59
59
  instance_variable_set(impersonated_var, resource)
60
60
  # use to_s for Mongoid for BSON::ObjectId
61
- session[session_key] = resource.id.is_a?(Numeric) ? resource.id : resource.id.to_s
61
+ request.session[session_key] = resource.id.is_a?(Numeric) ? resource.id : resource.id.to_s
62
62
  end
63
63
 
64
64
  define_method stop_impersonating_method do
65
65
  remove_instance_variable(impersonated_var) if instance_variable_defined?(impersonated_var)
66
- session.delete(session_key)
66
+ request.session.delete(session_key)
67
67
  end
68
68
  end
69
69
  end
@@ -72,3 +72,7 @@ end
72
72
  ActiveSupport.on_load(:action_controller) do
73
73
  extend Pretender::Methods
74
74
  end
75
+
76
+ ActiveSupport.on_load(:action_cable) do
77
+ ActionCable::Connection::Base.extend Pretender::Methods
78
+ end
@@ -1,3 +1,3 @@
1
1
  module Pretender
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pretender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-22 00:00:00.000000000 Z
11
+ date: 2018-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,21 +67,16 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description:
70
- email:
71
- - andrew@chartkick.com
70
+ email: andrew@chartkick.com
72
71
  executables: []
73
72
  extensions: []
74
73
  extra_rdoc_files: []
75
74
  files:
76
- - ".gitignore"
77
75
  - CHANGELOG.md
78
- - Gemfile
79
76
  - LICENSE.txt
80
77
  - README.md
81
- - Rakefile
82
78
  - lib/pretender.rb
83
79
  - lib/pretender/version.rb
84
- - pretender.gemspec
85
80
  homepage: https://github.com/ankane/pretender
86
81
  licenses:
87
82
  - MIT
@@ -94,7 +89,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
89
  requirements:
95
90
  - - ">="
96
91
  - !ruby/object:Gem::Version
97
- version: '0'
92
+ version: '2.2'
98
93
  required_rubygems_version: !ruby/object:Gem::Requirement
99
94
  requirements:
100
95
  - - ">="
@@ -102,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
97
  version: '0'
103
98
  requirements: []
104
99
  rubyforge_project:
105
- rubygems_version: 2.6.13
100
+ rubygems_version: 2.7.7
106
101
  signing_key:
107
102
  specification_version: 4
108
103
  summary: Log in as another user in Rails
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in pretender.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: :test
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.pattern = "test/**/*_test.rb"
8
- end
@@ -1,27 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "pretender/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "pretender"
8
- spec.version = Pretender::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.summary = "Log in as another user in Rails"
12
- spec.homepage = "https://github.com/ankane/pretender"
13
- spec.license = "MIT"
14
-
15
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
- f.match(%r{^(test|spec|features)/})
17
- end
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
21
-
22
- spec.add_dependency "actionpack"
23
-
24
- spec.add_development_dependency "bundler"
25
- spec.add_development_dependency "rake"
26
- spec.add_development_dependency "minitest"
27
- end