omniauth-identity 3.0.2 → 3.0.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 +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +28 -35
- data/lib/omniauth-identity/version.rb +1 -1
- data/lib/omniauth/identity.rb +1 -0
- data/lib/omniauth/identity/model.rb +1 -1
- data/lib/omniauth/identity/models/no_brainer.rb +30 -0
- data/lib/omniauth/strategies/identity.rb +63 -29
- data/spec/omniauth/identity/models/active_record_spec.rb +1 -1
- data/spec/omniauth/identity/models/couch_potato_spec.rb +8 -6
- data/spec/omniauth/identity/models/mongoid_spec.rb +9 -7
- data/spec/omniauth/identity/models/no_brainer_spec.rb +17 -0
- data/spec/omniauth/strategies/identity_spec.rb +8 -11
- metadata +18 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 629d1327cd3aa697de7139825ca429e8829886526da60aa233937643a56caf54
|
4
|
+
data.tar.gz: f8fa65f35a26646fcec82b86208da5a511e7639be3388997ede74e0b8df98ca8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35d08b45518df49d12131b94fdd26110448161809153f782f709369f85488a30dda1bc2fc38121e19beda06c048bf1c8db5b2f901540ab10133bd52925cfe941
|
7
|
+
data.tar.gz: dc462e3a8e3733565d2d660bcf6495460e77376469f2cab70d140bff22a07c5f63b0fb3b09b94774956f1c9f47f67f2cbffdcf797e653cc112f31460a26b004a
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
|
9
9
|
## [Unreleased]
|
10
10
|
|
11
|
+
## [3.0.3] - 2021-02-14
|
12
|
+
|
13
|
+
### Added
|
14
|
+
|
15
|
+
- Add option `:on_validation`, which can be used to add a Captcha
|
16
|
+
- See [example here](https://github.com/omniauth/omniauth-identity/pull/86#issue-63225122)
|
17
|
+
- Add support for nobrainer, an ORM for RethinkDB
|
18
|
+
- Validation error message on invalid registration form submission
|
19
|
+
|
20
|
+
### Removed
|
21
|
+
|
22
|
+
- ruby-head build... simply too slow
|
23
|
+
|
11
24
|
## [3.0.2] - 2021-02-14
|
12
25
|
|
13
26
|
### Fixed
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# OmniAuth Identity
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/omniauth-identity)
|
4
|
+
[](https://depfu.com/github/omniauth/omniauth-identity?project_id=22381)
|
3
5
|
[](https://actions-badge.atrox.dev/omniauth/omniauth-identity/goto)
|
4
6
|
[](https://codeclimate.com/github/omniauth/omniauth-identity/maintainability)
|
5
7
|
[](https://codeclimate.com/github/omniauth/omniauth-identity/test_coverage)
|
@@ -17,7 +19,7 @@ basic construct for user management and then gets out of the way.
|
|
17
19
|
|
18
20
|
This gem is compatible with, as of Feb 2021, version 3:
|
19
21
|
|
20
|
-
* Latest released version of omniauth, v2.0.2
|
22
|
+
* Latest released version of omniauth, v2.0.2
|
21
23
|
* Ruby 2.4, 2.5, 2.6, 2.7, 3.0, ruby-head
|
22
24
|
|
23
25
|
## Installation
|
@@ -56,6 +58,13 @@ with `:model` argument above) that will be able to persist the information
|
|
56
58
|
provided by the user. Luckily for you, there are pre-built models for popular
|
57
59
|
ORMs that make this dead simple.
|
58
60
|
|
61
|
+
Once you've got an `Identity` persistence model and the strategy up and
|
62
|
+
running, you can point users to `/auth/identity` and it will request
|
63
|
+
that they log in or give them the opportunity to sign up for an account.
|
64
|
+
Once they have authenticated with their identity, OmniAuth will call
|
65
|
+
through to `/auth/identity/callback` with the same kinds of information
|
66
|
+
it would had the user authenticated through an external provider.
|
67
|
+
|
59
68
|
**Note:** OmniAuth Identity is different from many other user authentication
|
60
69
|
systems in that it is *not* built to store authentication information in your primary
|
61
70
|
`User` model. Instead, the `Identity` model should be **associated** with your
|
@@ -92,33 +101,6 @@ class Identity
|
|
92
101
|
end
|
93
102
|
```
|
94
103
|
|
95
|
-
### MongoMapper
|
96
|
-
|
97
|
-
Unfortunately MongoMapper is **not supported** in `omniauth-identity` from >= v2.0 as a result of it
|
98
|
-
not being maintained for several years.
|
99
|
-
|
100
|
-
It wasn't possible to include Mongoid *and* MongoMapper due to incompatible gem version
|
101
|
-
requirements. Therefore precedence was given to Mongoid as it is significantly more
|
102
|
-
popular and actively maintained.
|
103
|
-
|
104
|
-
### DataMapper
|
105
|
-
|
106
|
-
Include the `OmniAuth::Identity::Models::DataMapper` mixin and specify
|
107
|
-
fields that you will need.
|
108
|
-
|
109
|
-
```ruby
|
110
|
-
class Identity
|
111
|
-
include DataMapper::Resource
|
112
|
-
include OmniAuth::Identity::Models::DataMapper
|
113
|
-
|
114
|
-
property :id, Serial
|
115
|
-
property :email, String
|
116
|
-
property :password_digest, Text
|
117
|
-
|
118
|
-
attr_accessor :password_confirmation
|
119
|
-
end
|
120
|
-
```
|
121
|
-
|
122
104
|
### CouchPotato
|
123
105
|
|
124
106
|
Include the `OmniAuth::Identity::Models::CouchPotatoModule` mixin and specify fields that you will need.
|
@@ -139,13 +121,24 @@ class Identity
|
|
139
121
|
end
|
140
122
|
```
|
141
123
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
124
|
+
### NoBrainer
|
125
|
+
|
126
|
+
[NoBrainer](http://nobrainer.io/) is an ORM for [RethinkDB](https://rethinkdb.com/).
|
127
|
+
|
128
|
+
Include the `OmniAuth::Identity::Models::NoBrainer` mixin and specify fields that you will need.
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
class Identity
|
132
|
+
include NoBrainer::Document
|
133
|
+
include OmniAuth::Identity::Models::NoBrainer
|
134
|
+
|
135
|
+
auth_key :email
|
136
|
+
end
|
137
|
+
```
|
138
|
+
|
139
|
+
### Ruby Object Mapper
|
140
|
+
|
141
|
+
Would love to add a mixin for the [Ruby Object Mapper (ROM)](https://rom-rb.org/) if anyone wants to work on it!
|
149
142
|
|
150
143
|
## Custom Auth Model
|
151
144
|
|
data/lib/omniauth/identity.rb
CHANGED
@@ -14,6 +14,7 @@ module OmniAuth
|
|
14
14
|
autoload :ActiveRecord, 'omniauth/identity/models/active_record'
|
15
15
|
autoload :Mongoid, 'omniauth/identity/models/mongoid'
|
16
16
|
autoload :CouchPotatoModule, 'omniauth/identity/models/couch_potato'
|
17
|
+
autoload :NoBrainer, 'omniauth/identity/models/no_brainer'
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
@@ -39,7 +39,7 @@ module OmniAuth
|
|
39
39
|
# @return [String] The method name.
|
40
40
|
def auth_key(method = false)
|
41
41
|
@auth_key = method.to_s unless method == false
|
42
|
-
@auth_key = nil if @auth_key == ''
|
42
|
+
@auth_key = nil if !defined?(@auth_key) || @auth_key == ''
|
43
43
|
|
44
44
|
@auth_key || 'email'
|
45
45
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'nobrainer'
|
4
|
+
|
5
|
+
module OmniAuth
|
6
|
+
module Identity
|
7
|
+
module Models
|
8
|
+
# http://nobrainer.io/ an ORM for RethinkDB
|
9
|
+
module NoBrainer
|
10
|
+
def self.included(base)
|
11
|
+
base.class_eval do
|
12
|
+
include ::OmniAuth::Identity::Model
|
13
|
+
include ::OmniAuth::Identity::SecurePassword
|
14
|
+
|
15
|
+
has_secure_password
|
16
|
+
|
17
|
+
def self.auth_key=(key)
|
18
|
+
super
|
19
|
+
validates_uniqueness_of key, case_sensitive: false
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.locate(search_hash)
|
23
|
+
where(search_hash).first
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -9,27 +9,23 @@ module OmniAuth
|
|
9
9
|
include OmniAuth::Strategy
|
10
10
|
|
11
11
|
option :fields, %i[name email]
|
12
|
-
|
13
|
-
|
14
|
-
option :
|
15
|
-
option :
|
16
|
-
|
12
|
+
|
13
|
+
# Primary Feature Switches:
|
14
|
+
option :enable_registration, true # See #other_phase and #request_phase
|
15
|
+
option :enable_login, true # See #other_phase
|
16
|
+
|
17
|
+
# Customization Options:
|
18
|
+
option :on_login, nil # See #request_phase
|
19
|
+
option :on_validation, nil # See #registration_phase
|
20
|
+
option :on_registration, nil # See #registration_phase
|
21
|
+
option :on_failed_registration, nil # See #registration_phase
|
17
22
|
option :locate_conditions, ->(req) { { model.auth_key => req['auth_key'] } }
|
18
23
|
|
19
24
|
def request_phase
|
20
25
|
if options[:on_login]
|
21
26
|
options[:on_login].call(env)
|
22
27
|
else
|
23
|
-
|
24
|
-
title: (options[:title] || 'Identity Verification'),
|
25
|
-
url: callback_path
|
26
|
-
) do |f|
|
27
|
-
f.text_field 'Login', 'auth_key'
|
28
|
-
f.password_field 'Password', 'password'
|
29
|
-
if options[:enable_registration]
|
30
|
-
f.html "<p align='center'><a href='#{registration_path}'>Create an Identity</a></p>"
|
31
|
-
end
|
32
|
-
end.to_response
|
28
|
+
build_omniauth_login_form.to_response
|
33
29
|
end
|
34
30
|
end
|
35
31
|
|
@@ -60,17 +56,11 @@ module OmniAuth
|
|
60
56
|
end
|
61
57
|
end
|
62
58
|
|
63
|
-
def registration_form
|
59
|
+
def registration_form(validation_message = nil)
|
64
60
|
if options[:on_registration]
|
65
61
|
options[:on_registration].call(env)
|
66
62
|
else
|
67
|
-
|
68
|
-
options[:fields].each do |field|
|
69
|
-
f.text_field field.to_s.capitalize, field.to_s
|
70
|
-
end
|
71
|
-
f.password_field 'Password', 'password'
|
72
|
-
f.password_field 'Confirm Password', 'password_confirmation'
|
73
|
-
end.to_response
|
63
|
+
build_omniauth_registration_form(validation_message).to_response
|
74
64
|
end
|
75
65
|
end
|
76
66
|
|
@@ -81,15 +71,23 @@ module OmniAuth
|
|
81
71
|
if model.respond_to?(:column_names) && model.column_names.include?('provider')
|
82
72
|
attributes.reverse_merge!(provider: 'identity')
|
83
73
|
end
|
84
|
-
@identity = model.
|
85
|
-
|
74
|
+
@identity = model.new(attributes)
|
75
|
+
|
76
|
+
# on_validation may run a Captcha or other validation mechanism
|
77
|
+
# Must return true when validation passes, false otherwise
|
78
|
+
if options[:on_validation] && !options[:on_validation].call(env: env)
|
79
|
+
if options[:on_failed_registration]
|
80
|
+
env['omniauth.identity'] = @identity
|
81
|
+
options[:on_failed_registration].call(env)
|
82
|
+
else
|
83
|
+
validation_message = 'Validation failed'
|
84
|
+
registration_form(validation_message)
|
85
|
+
end
|
86
|
+
elsif @identity.save && @identity.persisted?
|
86
87
|
env['PATH_INFO'] = callback_path
|
87
88
|
callback_phase
|
88
|
-
elsif options[:on_failed_registration]
|
89
|
-
env['omniauth.identity'] = @identity
|
90
|
-
options[:on_failed_registration].call(env)
|
91
89
|
else
|
92
|
-
|
90
|
+
show_custom_options_or_default
|
93
91
|
end
|
94
92
|
end
|
95
93
|
|
@@ -117,6 +115,42 @@ module OmniAuth
|
|
117
115
|
def model
|
118
116
|
options[:model] || ::Identity
|
119
117
|
end
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
def build_omniauth_login_form
|
122
|
+
OmniAuth::Form.build(
|
123
|
+
title: (options[:title] || 'Identity Verification'),
|
124
|
+
url: callback_path
|
125
|
+
) do |f|
|
126
|
+
f.text_field 'Login', 'auth_key'
|
127
|
+
f.password_field 'Password', 'password'
|
128
|
+
if options[:enable_registration]
|
129
|
+
f.html "<p align='center'><a href='#{registration_path}'>Create an Identity</a></p>"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def build_omniauth_registration_form(validation_message)
|
135
|
+
OmniAuth::Form.build(title: 'Register Identity') do |f|
|
136
|
+
f.html "<p style='color:red'>#{validation_message}</p>" if validation_message
|
137
|
+
options[:fields].each do |field|
|
138
|
+
f.text_field field.to_s.capitalize, field.to_s
|
139
|
+
end
|
140
|
+
f.password_field 'Password', 'password'
|
141
|
+
f.password_field 'Confirm Password', 'password_confirmation'
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def show_custom_options_or_default
|
146
|
+
if options[:on_failed_registration]
|
147
|
+
env['omniauth.identity'] = @identity
|
148
|
+
options[:on_failed_registration].call(env)
|
149
|
+
else
|
150
|
+
validation_message = 'One or more fields were invalid'
|
151
|
+
registration_form(validation_message)
|
152
|
+
end
|
153
|
+
end
|
120
154
|
end
|
121
155
|
end
|
122
156
|
end
|
@@ -5,7 +5,7 @@ RSpec.describe(OmniAuth::Identity::Models::ActiveRecord, db: true) do
|
|
5
5
|
subject(:model_klass) do
|
6
6
|
AnonymousActiveRecord.generate(
|
7
7
|
parent_klass: 'OmniAuth::Identity::Models::ActiveRecord',
|
8
|
-
columns: %w[
|
8
|
+
columns: OmniAuth::Identity::Model::SCHEMA_ATTRIBUTES | %w[provider password_digest],
|
9
9
|
connection_params: { adapter: 'sqlite3', encoding: 'utf8', database: ':memory:' }
|
10
10
|
) do
|
11
11
|
def flower
|
@@ -1,12 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
class CouchPotatoTestIdentity
|
5
|
-
include CouchPotato::Persistence
|
6
|
-
include OmniAuth::Identity::Models::CouchPotatoModule
|
7
|
-
auth_key :ham_sandwich
|
8
|
-
end
|
3
|
+
require 'couch_potato'
|
9
4
|
|
5
|
+
class CouchPotatoTestIdentity
|
6
|
+
include CouchPotato::Persistence
|
7
|
+
include OmniAuth::Identity::Models::CouchPotatoModule
|
8
|
+
auth_key :ham_sandwich
|
9
|
+
end
|
10
|
+
|
11
|
+
RSpec.describe(OmniAuth::Identity::Models::CouchPotatoModule, db: true) do
|
10
12
|
describe 'model', type: :model do
|
11
13
|
subject { CouchPotatoTestIdentity }
|
12
14
|
|
@@ -1,13 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
class MongoidTestIdentity
|
5
|
-
include Mongoid::Document
|
6
|
-
include OmniAuth::Identity::Models::Mongoid
|
7
|
-
auth_key :ham_sandwich
|
8
|
-
store_in database: 'db1', collection: 'mongoid_test_identities', client: 'secondary'
|
9
|
-
end
|
3
|
+
require 'mongoid'
|
10
4
|
|
5
|
+
class MongoidTestIdentity
|
6
|
+
include Mongoid::Document
|
7
|
+
include OmniAuth::Identity::Models::Mongoid
|
8
|
+
auth_key :ham_sandwich
|
9
|
+
store_in database: 'db1', collection: 'mongoid_test_identities', client: 'secondary'
|
10
|
+
end
|
11
|
+
|
12
|
+
RSpec.describe(OmniAuth::Identity::Models::Mongoid, db: true) do
|
11
13
|
describe 'model', type: :model do
|
12
14
|
subject { MongoidTestIdentity }
|
13
15
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'nobrainer'
|
4
|
+
|
5
|
+
class NobrainerTestIdentity
|
6
|
+
include NoBrainer::Document
|
7
|
+
include OmniAuth::Identity::Models::NoBrainer
|
8
|
+
auth_key :ham_sandwich
|
9
|
+
end
|
10
|
+
|
11
|
+
RSpec.describe(OmniAuth::Identity::Models::NoBrainer, db: true) do
|
12
|
+
it 'delegates locate to the where query method' do
|
13
|
+
allow(NobrainerTestIdentity).to receive(:where).with('ham_sandwich' => 'open faced',
|
14
|
+
'category' => 'sandwiches').and_return(['wakka'])
|
15
|
+
expect(NobrainerTestIdentity.locate('ham_sandwich' => 'open faced', 'category' => 'sandwiches')).to eq('wakka')
|
16
|
+
end
|
17
|
+
end
|
@@ -8,7 +8,8 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
8
8
|
let(:identity_options) { {} }
|
9
9
|
let(:anon_ar) do
|
10
10
|
AnonymousActiveRecord.generate(
|
11
|
-
|
11
|
+
parent_klass: 'OmniAuth::Identity::Models::ActiveRecord',
|
12
|
+
columns: OmniAuth::Identity::Model::SCHEMA_ATTRIBUTES | %w[provider password_digest],
|
12
13
|
connection_params: { adapter: 'sqlite3', encoding: 'utf8', database: ':memory:' }
|
13
14
|
) do
|
14
15
|
def balloon
|
@@ -203,16 +204,10 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
203
204
|
}
|
204
205
|
end
|
205
206
|
|
206
|
-
before do
|
207
|
-
allow(anon_ar).to receive('auth_key').and_return('email')
|
208
|
-
m = double(uid: 'abc', name: 'Awesome Dude', email: 'awesome@example.com',
|
209
|
-
info: { name: 'DUUUUDE!' }, persisted?: true)
|
210
|
-
expect(anon_ar).to receive(:create).with(properties).and_return(m)
|
211
|
-
end
|
212
|
-
|
213
207
|
it 'sets the auth hash' do
|
214
208
|
post '/auth/identity/register', properties
|
215
|
-
expect(auth_hash['uid']).to
|
209
|
+
expect(auth_hash['uid']).to match(/\d+/)
|
210
|
+
expect(auth_hash['provider']).to eq('identity')
|
216
211
|
end
|
217
212
|
end
|
218
213
|
|
@@ -226,16 +221,17 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
226
221
|
provider: 'identity'
|
227
222
|
}
|
228
223
|
end
|
229
|
-
let(:invalid_identity) { double(persisted?: false) }
|
224
|
+
let(:invalid_identity) { double(persisted?: false, save: false) }
|
230
225
|
|
231
226
|
before do
|
232
|
-
expect(anon_ar).to receive(:
|
227
|
+
expect(anon_ar).to receive(:new).with(properties).and_return(invalid_identity)
|
233
228
|
end
|
234
229
|
|
235
230
|
context 'default' do
|
236
231
|
it 'shows registration form' do
|
237
232
|
post '/auth/identity/register', properties
|
238
233
|
expect(last_response.body).to be_include('Register Identity')
|
234
|
+
expect(last_response.body).to be_include('One or more fields were invalid')
|
239
235
|
end
|
240
236
|
end
|
241
237
|
|
@@ -250,6 +246,7 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
250
246
|
post '/auth/identity/register', properties
|
251
247
|
expect(identity_hash).to eq(invalid_identity)
|
252
248
|
expect(last_response.body).to be_include("FAIL'DOH!")
|
249
|
+
expect(last_response.body).not_to be_include('One or more fields were invalid')
|
253
250
|
end
|
254
251
|
end
|
255
252
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-identity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Boling
|
@@ -68,6 +68,20 @@ dependencies:
|
|
68
68
|
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '7'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: nobrainer
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
71
85
|
- !ruby/object:Gem::Dependency
|
72
86
|
name: rack-test
|
73
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,12 +155,14 @@ files:
|
|
141
155
|
- lib/omniauth/identity/models/active_record.rb
|
142
156
|
- lib/omniauth/identity/models/couch_potato.rb
|
143
157
|
- lib/omniauth/identity/models/mongoid.rb
|
158
|
+
- lib/omniauth/identity/models/no_brainer.rb
|
144
159
|
- lib/omniauth/identity/secure_password.rb
|
145
160
|
- lib/omniauth/strategies/identity.rb
|
146
161
|
- spec/omniauth/identity/model_spec.rb
|
147
162
|
- spec/omniauth/identity/models/active_record_spec.rb
|
148
163
|
- spec/omniauth/identity/models/couch_potato_spec.rb
|
149
164
|
- spec/omniauth/identity/models/mongoid_spec.rb
|
165
|
+
- spec/omniauth/identity/models/no_brainer_spec.rb
|
150
166
|
- spec/omniauth/identity/secure_password_spec.rb
|
151
167
|
- spec/omniauth/strategies/identity_spec.rb
|
152
168
|
- spec/spec_helper.rb
|
@@ -179,6 +195,7 @@ test_files:
|
|
179
195
|
- spec/omniauth/identity/models/active_record_spec.rb
|
180
196
|
- spec/omniauth/identity/models/couch_potato_spec.rb
|
181
197
|
- spec/omniauth/identity/models/mongoid_spec.rb
|
198
|
+
- spec/omniauth/identity/models/no_brainer_spec.rb
|
182
199
|
- spec/omniauth/identity/secure_password_spec.rb
|
183
200
|
- spec/omniauth/strategies/identity_spec.rb
|
184
201
|
- spec/spec_helper.rb
|