devise_capturable 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +18 -5
- data/lib/devise_capturable/model.rb +8 -14
- data/lib/devise_capturable/strategy.rb +11 -10
- data/lib/devise_capturable/version.rb +1 -1
- data/lib/devise_capturable.rb +0 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/strategy_spec.rb +17 -16
- metadata +2 -2
data/README.md
CHANGED
@@ -20,7 +20,7 @@ You will need to perform these steps to setup the gem.
|
|
20
20
|
#### Add gem to Gemfile
|
21
21
|
|
22
22
|
```ruby
|
23
|
-
gem "devise_capturable"
|
23
|
+
gem "devise_capturable"
|
24
24
|
```
|
25
25
|
|
26
26
|
#### Add `:capturable` to your `User` model
|
@@ -113,21 +113,34 @@ You can delete these settings from your embed code, as the gem will set them for
|
|
113
113
|
## Changing defaults
|
114
114
|
|
115
115
|
|
116
|
-
#### Overriding `
|
116
|
+
#### Overriding `before_capturable_create`
|
117
117
|
|
118
|
-
There are times where you might want to save more than the `email` of your user in the Rails `User` model. You can override the `
|
118
|
+
There are times where you might want to save more than the `email` of your user in the Rails `User` model. You can override the `before_capturable_create` instance method to do this. Here's an example where I'm also saving the `uuid`. The `capture_data` parameter passed to the function is the Janrain Capture `entity` JSON result that has a bunch of information about the user, and the `params` parameter is the controller parameters.
|
119
119
|
|
120
120
|
```ruby
|
121
121
|
class User < ActiveRecord::Base
|
122
122
|
devise ..., :capturable
|
123
|
-
|
124
|
-
def set_capturable_params(capture_data)
|
123
|
+
def before_capturable_create(capture_data, params)
|
125
124
|
self.email = capture_data["email"]
|
126
125
|
self.uuid = capture_data["uuid"]
|
127
126
|
end
|
128
127
|
end
|
129
128
|
```
|
130
129
|
|
130
|
+
#### Overriding `before_capturable_sign_in`
|
131
|
+
|
132
|
+
You might also want to update your Rails model if the data changes on the Janrain side. You can use the `before_capturable_sign_in` method for this. This method is empty by default, but can be defined in your model to update certain attributes. Here's an example where we update the fake "is_awesome" attribute.
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
class User < ActiveRecord::Base
|
136
|
+
devise ..., :capturable
|
137
|
+
def before_capturable_sign_in(capture_data, params)
|
138
|
+
self.is_awesome = capture_data["is_awesome"]
|
139
|
+
self.save!
|
140
|
+
end
|
141
|
+
end
|
142
|
+
```
|
143
|
+
|
131
144
|
#### Overriding `find_with_capturable_params`
|
132
145
|
|
133
146
|
When a user logs in, Devise will call the Capture API and try to find a user with the email returned by the API. You can change this by overriding the `find_with_capturable_params` instance method in your `User` model. Here's an example where I'm telling Devise to find the user by the `uuid` instead.
|
@@ -10,24 +10,18 @@ module Devise
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
# This is called from strategy and is used to fill a user model before
|
14
|
-
# It defaults to just setting the
|
15
|
-
def
|
13
|
+
# This is called from strategy and is used to fill a user model before creating it
|
14
|
+
# It defaults to just setting the email, but you can override this in your user model
|
15
|
+
def before_capturable_create(capture_data, params)
|
16
16
|
self.email = capture_data["email"]
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
# Devise.setup do |config|
|
24
|
-
# config.capturable_auto_create_account = true
|
25
|
-
# end
|
26
|
-
::Devise::Models.config(self, :capturable_auto_create_account)
|
19
|
+
# This is called from strategy and *can* be used to update an existing user model if
|
20
|
+
# the data changes on the janrain side. It defaults to doing nothing.
|
21
|
+
def before_capturable_sign_in(capture_data, params)
|
22
|
+
end
|
27
23
|
|
28
|
-
|
29
|
-
self.capturable_auto_create_account
|
30
|
-
end
|
24
|
+
module ClassMethods
|
31
25
|
|
32
26
|
# This is called from strategy and is used to find a user when returning from janrain
|
33
27
|
# It defaults to find_by_uuid, but you can override this in your user model
|
@@ -9,7 +9,7 @@ module Devise
|
|
9
9
|
class Capturable < ::Devise::Strategies::Base
|
10
10
|
|
11
11
|
def valid?
|
12
|
-
valid_controller? && valid_params? && mapping.to.respond_to?(:find_with_capturable_params) && mapping.to.method_defined?(:
|
12
|
+
valid_controller? && valid_params? && mapping.to.respond_to?(:find_with_capturable_params) && mapping.to.method_defined?(:before_capturable_create) && mapping.to.method_defined?(:before_capturable_sign_in)
|
13
13
|
end
|
14
14
|
|
15
15
|
def authenticate!
|
@@ -21,17 +21,18 @@ module Devise
|
|
21
21
|
fail!(:capturable_invalid) unless token['stat'] == 'ok'
|
22
22
|
|
23
23
|
entity = Devise::Capturable::API.entity(token['access_token'])
|
24
|
-
user = klass.find_with_capturable_params(entity["result"])
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
user = klass.find_with_capturable_params(entity["result"])
|
25
|
+
|
26
|
+
if user
|
27
|
+
user.before_capturable_sign_in(entity["result"], params)
|
28
|
+
else
|
29
|
+
user = klass.new
|
30
|
+
user.before_capturable_create(entity["result"], params)
|
31
|
+
user.save
|
29
32
|
end
|
30
|
-
|
31
|
-
user ||= klass.new
|
32
|
-
user.set_capturable_params(entity["result"])
|
33
|
-
user.save(:validate => false)
|
33
|
+
|
34
34
|
success!(user)
|
35
|
+
|
35
36
|
rescue Exception => e
|
36
37
|
fail!(:capturable_invalid)
|
37
38
|
end
|
data/lib/devise_capturable.rb
CHANGED
@@ -11,8 +11,6 @@ module Devise
|
|
11
11
|
mattr_accessor :capturable_server
|
12
12
|
mattr_accessor :capturable_client_id
|
13
13
|
mattr_accessor :capturable_client_secret
|
14
|
-
mattr_accessor :capturable_auto_create_account
|
15
|
-
@@capturable_auto_create_account = true
|
16
14
|
end
|
17
15
|
|
18
16
|
I18n.load_path.unshift File.join(File.dirname(__FILE__), *%w[devise_capturable locales en.yml])
|
data/spec/spec_helper.rb
CHANGED
data/spec/strategy_spec.rb
CHANGED
@@ -18,37 +18,38 @@ describe 'Devise::Capturable' do
|
|
18
18
|
@strategy.should_receive(:mapping).and_return(@mapping)
|
19
19
|
@strategy.should_receive(:params).at_least(1).and_return(PARAMS)
|
20
20
|
@user = User.new
|
21
|
-
@user.stub(:set_capturable_params)
|
22
21
|
Devise::Capturable::API.stub(:token).and_return(TOKEN)
|
23
22
|
Devise::Capturable::API.stub(:entity).and_return(ENTITY)
|
24
23
|
end
|
24
|
+
|
25
|
+
describe "for an existing user" do
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
it "should call #before_capturable_sign_in and authenticate" do
|
28
|
+
@user.stub(:save).and_return(true)
|
29
|
+
User.should_receive(:find_with_capturable_params).with(ENTITY["result"]).and_return(@user)
|
30
|
+
@user.should_receive(:before_capturable_sign_in).with(ENTITY["result"], PARAMS).and_return(true)
|
31
|
+
@strategy.should_receive(:"success!").with(@user).and_return(true)
|
32
|
+
lambda { @strategy.authenticate! }.should_not raise_error
|
33
|
+
end
|
34
|
+
|
33
35
|
end
|
34
36
|
|
35
|
-
describe '
|
37
|
+
describe 'for a new user' do
|
36
38
|
|
37
39
|
before(:each) do
|
38
40
|
User.should_receive(:find_with_capturable_params).and_return(nil)
|
41
|
+
User.should_receive(:new).and_return(@user)
|
39
42
|
end
|
40
43
|
|
41
|
-
it "should fail
|
42
|
-
|
44
|
+
it "should call #before_capturable_create and fail is unsuccessful" do
|
45
|
+
@user.should_receive(:"before_capturable_create").with(ENTITY["result"], PARAMS).and_return(false)
|
43
46
|
@strategy.should_receive(:"fail!").with(:capturable_invalid).and_return(true)
|
44
47
|
lambda { @strategy.authenticate! }.should_not raise_error
|
45
48
|
end
|
46
49
|
|
47
|
-
it "should
|
48
|
-
|
49
|
-
|
50
|
-
@user.should_receive(:"set_capturable_params").with(ENTITY["result"]).and_return(true)
|
51
|
-
@user.should_receive(:save).with({ :validate => false }).and_return(true)
|
50
|
+
it "should call #before_capturable_create and succeed if successful" do
|
51
|
+
@user.should_receive(:"before_capturable_create").with(ENTITY["result"], PARAMS).and_return(true)
|
52
|
+
@user.should_receive(:save).and_return(true)
|
52
53
|
@strategy.should_receive(:"success!").with(@user).and_return(true)
|
53
54
|
lambda { @strategy.authenticate! }.should_not raise_error
|
54
55
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_capturable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|