omniauth-identity 3.0.3 → 3.0.8
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 +69 -0
- data/README.md +94 -12
- data/lib/omniauth-identity/version.rb +1 -1
- data/lib/omniauth/identity.rb +2 -1
- data/lib/omniauth/identity/model.rb +92 -29
- data/lib/omniauth/identity/models/active_record.rb +2 -2
- data/lib/omniauth/identity/models/couch_potato.rb +6 -0
- data/lib/omniauth/identity/models/mongoid.rb +1 -0
- data/lib/omniauth/identity/models/{no_brainer.rb → nobrainer.rb} +1 -0
- data/lib/omniauth/identity/models/sequel.rb +48 -0
- data/lib/omniauth/identity/secure_password.rb +98 -37
- data/lib/omniauth/strategies/identity.rb +47 -23
- data/spec/omniauth/identity/model_spec.rb +19 -99
- data/spec/omniauth/identity/models/active_record_spec.rb +19 -10
- data/spec/omniauth/identity/models/sequel_spec.rb +38 -0
- data/spec/omniauth/strategies/identity_spec.rb +123 -5
- data/spec/spec_helper.rb +16 -4
- data/spec/support/shared_contexts/instance_with_instance_methods.rb +89 -0
- data/spec/support/shared_contexts/model_with_class_methods.rb +29 -0
- data/spec/support/shared_contexts/persistable_model.rb +24 -0
- metadata +29 -54
- data/spec/omniauth/identity/models/couch_potato_spec.rb +0 -21
- data/spec/omniauth/identity/models/mongoid_spec.rb +0 -28
- data/spec/omniauth/identity/models/no_brainer_spec.rb +0 -17
@@ -1,6 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'sqlite3'
|
4
|
+
require 'active_record'
|
5
|
+
require 'anonymous_active_record'
|
6
|
+
|
7
|
+
class TestIdentity < OmniAuth::Identity::Models::ActiveRecord; end
|
8
|
+
|
9
|
+
RSpec.describe(OmniAuth::Identity::Models::ActiveRecord, sqlite3: true) do
|
4
10
|
describe 'model', type: :model do
|
5
11
|
subject(:model_klass) do
|
6
12
|
AnonymousActiveRecord.generate(
|
@@ -14,17 +20,20 @@ RSpec.describe(OmniAuth::Identity::Models::ActiveRecord, db: true) do
|
|
14
20
|
end
|
15
21
|
end
|
16
22
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
include_context 'persistable model'
|
24
|
+
|
25
|
+
describe '::table_name' do
|
26
|
+
it 'does not use STI rules for its table name' do
|
27
|
+
expect(TestIdentity.table_name).to eq('test_identities')
|
28
|
+
end
|
21
29
|
end
|
22
|
-
end
|
23
30
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
31
|
+
describe '::locate' do
|
32
|
+
it 'delegates locate to the where query method' do
|
33
|
+
allow(model_klass).to receive(:where).with('email' => 'open faced', 'category' => 'sandwiches',
|
34
|
+
'provider' => 'identity').and_return(['wakka'])
|
35
|
+
expect(model_klass.locate('email' => 'open faced', 'category' => 'sandwiches')).to eq('wakka')
|
36
|
+
end
|
28
37
|
end
|
29
38
|
end
|
30
39
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sqlite3'
|
4
|
+
require 'sequel'
|
5
|
+
|
6
|
+
DB = Sequel.sqlite
|
7
|
+
|
8
|
+
RSpec.describe(OmniAuth::Identity::Models::Sequel, sqlite3: true) do
|
9
|
+
before(:all) do
|
10
|
+
# Connect to an in-memory sqlite3 database.
|
11
|
+
DB.create_table :sequel_test_identities do
|
12
|
+
primary_key :id
|
13
|
+
String :email, null: false
|
14
|
+
String :password_digest, null: false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
before do
|
19
|
+
sequel_test_identity = Class.new(Sequel::Model(:sequel_test_identities)) do
|
20
|
+
include ::OmniAuth::Identity::Models::Sequel
|
21
|
+
end
|
22
|
+
stub_const('SequelTestIdentity', sequel_test_identity)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'model', type: :model do
|
26
|
+
subject(:model_klass) { SequelTestIdentity }
|
27
|
+
|
28
|
+
include_context 'persistable model'
|
29
|
+
|
30
|
+
describe '::locate' do
|
31
|
+
it 'delegates to the where query method' do
|
32
|
+
allow(model_klass).to receive(:where).with('email' => 'open faced',
|
33
|
+
'category' => 'sandwiches').and_return(['wakka'])
|
34
|
+
expect(model_klass.locate('email' => 'open faced', 'category' => 'sandwiches')).to eq('wakka')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,10 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'sqlite3'
|
4
|
+
require 'active_record'
|
5
|
+
require 'anonymous_active_record'
|
6
|
+
|
7
|
+
RSpec.describe OmniAuth::Strategies::Identity, sqlite3: true do
|
4
8
|
attr_accessor :app
|
5
9
|
|
6
|
-
let(:
|
7
|
-
let(:
|
10
|
+
let(:env_hash) { last_response.headers['env'] }
|
11
|
+
let(:auth_hash) { env_hash['omniauth.auth'] }
|
12
|
+
let(:identity_hash) { env_hash['omniauth.identity'] }
|
8
13
|
let(:identity_options) { {} }
|
9
14
|
let(:anon_ar) do
|
10
15
|
AnonymousActiveRecord.generate(
|
@@ -193,7 +198,7 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
193
198
|
end
|
194
199
|
end
|
195
200
|
|
196
|
-
context 'with
|
201
|
+
context 'with good identity' do
|
197
202
|
let(:properties) do
|
198
203
|
{
|
199
204
|
name: 'Awesome Dude',
|
@@ -209,9 +214,66 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
209
214
|
expect(auth_hash['uid']).to match(/\d+/)
|
210
215
|
expect(auth_hash['provider']).to eq('identity')
|
211
216
|
end
|
217
|
+
|
218
|
+
context 'with on_validation proc' do
|
219
|
+
let(:identity_options) do
|
220
|
+
{ model: anon_ar, on_validation: on_validation_proc }
|
221
|
+
end
|
222
|
+
let(:on_validation_proc) do
|
223
|
+
lambda { |_env|
|
224
|
+
false
|
225
|
+
}
|
226
|
+
end
|
227
|
+
|
228
|
+
context 'when validation fails' do
|
229
|
+
it 'does not set the env hash' do
|
230
|
+
post '/auth/identity/register', properties
|
231
|
+
expect(env_hash).to eq(nil)
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'renders registration form' do
|
235
|
+
post '/auth/identity/register', properties
|
236
|
+
expect(last_response.body).to be_include(described_class.default_options[:registration_form_title])
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'displays validation failure message' do
|
240
|
+
post '/auth/identity/register', properties
|
241
|
+
expect(last_response.body).to be_include(described_class.default_options[:validation_failure_message])
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
context 'when validation succeeds' do
|
246
|
+
let(:on_validation_proc) do
|
247
|
+
lambda { |_env|
|
248
|
+
true
|
249
|
+
}
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'sets the auth hash' do
|
253
|
+
post '/auth/identity/register', properties
|
254
|
+
expect(auth_hash['uid']).to match(/\d+/)
|
255
|
+
expect(auth_hash['provider']).to eq('identity')
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'does not render registration form' do
|
259
|
+
post '/auth/identity/register', properties
|
260
|
+
expect(last_response.body).not_to be_include(described_class.default_options[:registration_form_title])
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'does not display validation failure message' do
|
264
|
+
post '/auth/identity/register', properties
|
265
|
+
expect(last_response.body).not_to be_include(described_class.default_options[:validation_failure_message])
|
266
|
+
end
|
267
|
+
|
268
|
+
it 'does not display registration failure message' do
|
269
|
+
post '/auth/identity/register', properties
|
270
|
+
expect(last_response.body).not_to be_include(described_class.default_options[:registration_failure_message])
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
212
274
|
end
|
213
275
|
|
214
|
-
context 'with
|
276
|
+
context 'with bad identity' do
|
215
277
|
let(:properties) do
|
216
278
|
{
|
217
279
|
name: 'Awesome Dude',
|
@@ -249,6 +311,62 @@ RSpec.describe OmniAuth::Strategies::Identity do
|
|
249
311
|
expect(last_response.body).not_to be_include('One or more fields were invalid')
|
250
312
|
end
|
251
313
|
end
|
314
|
+
|
315
|
+
context 'with on_validation proc' do
|
316
|
+
let(:identity_options) do
|
317
|
+
{ model: anon_ar, on_validation: on_validation_proc }
|
318
|
+
end
|
319
|
+
let(:on_validation_proc) do
|
320
|
+
lambda { |_env|
|
321
|
+
false
|
322
|
+
}
|
323
|
+
end
|
324
|
+
|
325
|
+
context 'when validation fails' do
|
326
|
+
it 'does not set the env hash' do
|
327
|
+
post '/auth/identity/register', properties
|
328
|
+
expect(env_hash).to eq(nil)
|
329
|
+
end
|
330
|
+
|
331
|
+
it 'renders registration form' do
|
332
|
+
post '/auth/identity/register', properties
|
333
|
+
expect(last_response.body).to be_include(described_class.default_options[:registration_form_title])
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'displays validation failure message' do
|
337
|
+
post '/auth/identity/register', properties
|
338
|
+
expect(last_response.body).to be_include(described_class.default_options[:validation_failure_message])
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
context 'when validation succeeds' do
|
343
|
+
let(:on_validation_proc) do
|
344
|
+
lambda { |_env|
|
345
|
+
true
|
346
|
+
}
|
347
|
+
end
|
348
|
+
|
349
|
+
it 'does not set the env hash' do
|
350
|
+
post '/auth/identity/register', properties
|
351
|
+
expect(env_hash).to eq(nil)
|
352
|
+
end
|
353
|
+
|
354
|
+
it 'renders registration form' do
|
355
|
+
post '/auth/identity/register', properties
|
356
|
+
expect(last_response.body).to be_include(described_class.default_options[:registration_form_title])
|
357
|
+
end
|
358
|
+
|
359
|
+
it 'does not display validation failure message' do
|
360
|
+
post '/auth/identity/register', properties
|
361
|
+
expect(last_response.body).not_to be_include(described_class.default_options[:validation_failure_message])
|
362
|
+
end
|
363
|
+
|
364
|
+
it 'display registration failure message' do
|
365
|
+
post '/auth/identity/register', properties
|
366
|
+
expect(last_response.body).to be_include(described_class.default_options[:registration_failure_message])
|
367
|
+
end
|
368
|
+
end
|
369
|
+
end
|
252
370
|
end
|
253
371
|
end
|
254
372
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,20 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# NOTE: mongoid and no_brainer can't be loaded at the same time.
|
4
|
+
# If you try it, one or both of them will not work.
|
5
|
+
# This is why the ORM specs are split into a separate directory and run in separate threads.
|
6
|
+
|
7
|
+
ENV['RUBY_ENV'] = 'test' # Used by NoBrainer
|
8
|
+
ENV['MONGOID_ENV'] = 'test' # Used by Mongoid
|
9
|
+
|
3
10
|
ruby_version = Gem::Version.new(RUBY_VERSION)
|
4
11
|
require 'simplecov' if ruby_version >= Gem::Version.new('2.7') && RUBY_ENGINE == 'ruby'
|
5
12
|
|
6
13
|
require 'rack/test'
|
7
|
-
require '
|
8
|
-
require 'sqlite3'
|
9
|
-
require 'anonymous_active_record'
|
14
|
+
require 'rspec/block_is_expected'
|
10
15
|
require 'byebug' if RUBY_ENGINE == 'ruby'
|
11
16
|
|
12
17
|
# This gem
|
13
18
|
require 'omniauth/identity'
|
14
19
|
|
20
|
+
spec_root_matcher = %r{#{__dir__}/(.+)\.rb\Z}
|
21
|
+
Dir.glob(Pathname.new(__dir__).join('support/**/', '*.rb')).each { |f| require f.match(spec_root_matcher)[1] }
|
22
|
+
|
23
|
+
DEFAULT_PASSWORD = 'hang-a-left-at-the-diner'
|
24
|
+
DEFAULT_EMAIL = 'mojo@example.com'
|
25
|
+
|
15
26
|
RSpec.configure do |config|
|
16
27
|
config.include Rack::Test::Methods
|
17
|
-
|
28
|
+
|
29
|
+
# config.include ::Mongoid::Matchers, db: :mongodb
|
18
30
|
|
19
31
|
# Enable flags like --only-failures and --next-failure
|
20
32
|
config.example_status_persistence_file_path = '.rspec_status'
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples 'instance with instance methods' do
|
4
|
+
describe '#initialize' do
|
5
|
+
it 'does not raise an error' do
|
6
|
+
block_is_expected.not_to raise_error
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#uid' do
|
11
|
+
it 'defaults to #id' do
|
12
|
+
allow(instance).to receive(:respond_to?).with(:id).and_return(true)
|
13
|
+
allow(instance).to receive(:id).and_return 'wakka-do'
|
14
|
+
expect(instance.uid).to eq('wakka-do')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'stringifies it' do
|
18
|
+
allow(instance).to receive(:id).and_return 123
|
19
|
+
expect(instance.uid).to eq('123')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'raises NotImplementedError if #id is not defined' do
|
23
|
+
allow(instance).to receive(:respond_to?).with(:id).and_return(false)
|
24
|
+
expect { instance.uid }.to raise_error(NotImplementedError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#auth_key' do
|
29
|
+
it 'defaults to #email' do
|
30
|
+
allow(instance).to receive(:respond_to?).with(:email).and_return(true)
|
31
|
+
allow(instance).to receive(:email).and_return('bob@bob.com')
|
32
|
+
expect(instance.auth_key).to eq('bob@bob.com')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'uses the class .auth_key' do
|
36
|
+
instance.class.auth_key 'login'
|
37
|
+
allow(instance).to receive(:login).and_return 'bob'
|
38
|
+
expect(instance.auth_key).to eq('bob')
|
39
|
+
instance.class.auth_key nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#auth_key=' do
|
44
|
+
it 'defaults to setting email' do
|
45
|
+
allow(instance).to receive(:respond_to?).with(:email=).and_return(true)
|
46
|
+
expect(instance).to receive(:email=).with 'abc'
|
47
|
+
|
48
|
+
instance.auth_key = 'abc'
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'uses a custom .auth_key if one is provided' do
|
52
|
+
instance.class.auth_key 'login'
|
53
|
+
allow(instance).to receive(:respond_to?).with(:login=).and_return(true)
|
54
|
+
expect(instance).to receive(:login=).with('abc')
|
55
|
+
|
56
|
+
instance.auth_key = 'abc'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#info' do
|
61
|
+
it 'includes all attributes as they have been set' do
|
62
|
+
allow(instance).to receive(:name).and_return('Bob Bobson')
|
63
|
+
allow(instance).to receive(:nickname).and_return('bob')
|
64
|
+
|
65
|
+
expect(instance.info).to include({
|
66
|
+
'name' => 'Bob Bobson',
|
67
|
+
'nickname' => 'bob'
|
68
|
+
})
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'uses firstname and lastname, over nickname, to set missing name' do
|
72
|
+
allow(instance).to receive(:first_name).and_return('shoeless')
|
73
|
+
allow(instance).to receive(:last_name).and_return('joe')
|
74
|
+
allow(instance).to receive(:nickname).and_return('george')
|
75
|
+
instance.info['name'] == 'shoeless joe'
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'uses nickname to set missing name when first and last are not set' do
|
79
|
+
allow(instance).to receive(:nickname).and_return('bob')
|
80
|
+
instance.info['name'] == 'bob'
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'does not overwrite a provided name' do
|
84
|
+
allow(instance).to receive(:name).and_return('Awesome Dude')
|
85
|
+
allow(instance).to receive(:first_name).and_return('Frank')
|
86
|
+
expect(instance.info['name']).to eq('Awesome Dude')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples 'model with class methods' do
|
4
|
+
describe 'class definition' do
|
5
|
+
it 'does not raise an error' do
|
6
|
+
block_is_expected.not_to raise_error
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '::authenticate' do
|
11
|
+
it 'calls locate and then authenticate' do
|
12
|
+
mocked_instance = double('ExampleModel', authenticate: 'abbadoo')
|
13
|
+
allow(model_klass).to receive(:locate).with('email' => 'example').and_return(mocked_instance)
|
14
|
+
expect(model_klass.authenticate({ 'email' => 'example' }, 'pass')).to eq('abbadoo')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'calls locate with additional scopes when provided' do
|
18
|
+
mocked_instance = double('ExampleModel', authenticate: 'abbadoo')
|
19
|
+
allow(model_klass).to receive(:locate).with('email' => 'example',
|
20
|
+
'user_type' => 'admin').and_return(mocked_instance)
|
21
|
+
expect(model_klass.authenticate({ 'email' => 'example', 'user_type' => 'admin' }, 'pass')).to eq('abbadoo')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'recovers gracefully if locate is nil' do
|
25
|
+
allow(model_klass).to receive(:locate).and_return(nil)
|
26
|
+
expect(model_klass.authenticate('blah', 'foo')).to be false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_context 'persistable model' do
|
4
|
+
include_context 'model with class methods'
|
5
|
+
|
6
|
+
describe 'instance methods' do
|
7
|
+
subject(:instance) { model_klass.new }
|
8
|
+
|
9
|
+
include_context 'instance with instance methods'
|
10
|
+
|
11
|
+
describe '#save' do
|
12
|
+
subject(:save) do
|
13
|
+
instance.email = DEFAULT_EMAIL
|
14
|
+
instance.password = DEFAULT_PASSWORD
|
15
|
+
instance.password_confirmation = DEFAULT_PASSWORD
|
16
|
+
instance.save
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'does not raise an error' do
|
20
|
+
save
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
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.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Boling
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-
|
13
|
+
date: 2021-03-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bcrypt
|
@@ -41,89 +41,61 @@ dependencies:
|
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 1.0.7
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 1.0.7
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: mongoid
|
44
|
+
name: rack-test
|
59
45
|
requirement: !ruby/object:Gem::Requirement
|
60
46
|
requirements:
|
61
47
|
- - "~>"
|
62
48
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
49
|
+
version: '1'
|
64
50
|
type: :development
|
65
51
|
prerelease: false
|
66
52
|
version_requirements: !ruby/object:Gem::Requirement
|
67
53
|
requirements:
|
68
54
|
- - "~>"
|
69
55
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
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'
|
56
|
+
version: '1'
|
85
57
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
58
|
+
name: rake
|
87
59
|
requirement: !ruby/object:Gem::Requirement
|
88
60
|
requirements:
|
89
61
|
- - "~>"
|
90
62
|
- !ruby/object:Gem::Version
|
91
|
-
version: '
|
63
|
+
version: '13'
|
92
64
|
type: :development
|
93
65
|
prerelease: false
|
94
66
|
version_requirements: !ruby/object:Gem::Requirement
|
95
67
|
requirements:
|
96
68
|
- - "~>"
|
97
69
|
- !ruby/object:Gem::Version
|
98
|
-
version: '
|
70
|
+
version: '13'
|
99
71
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
72
|
+
name: rspec
|
101
73
|
requirement: !ruby/object:Gem::Requirement
|
102
74
|
requirements:
|
103
75
|
- - "~>"
|
104
76
|
- !ruby/object:Gem::Version
|
105
|
-
version: '
|
77
|
+
version: '3'
|
106
78
|
type: :development
|
107
79
|
prerelease: false
|
108
80
|
version_requirements: !ruby/object:Gem::Requirement
|
109
81
|
requirements:
|
110
82
|
- - "~>"
|
111
83
|
- !ruby/object:Gem::Version
|
112
|
-
version: '
|
84
|
+
version: '3'
|
113
85
|
- !ruby/object:Gem::Dependency
|
114
|
-
name: rspec
|
86
|
+
name: rspec-block_is_expected
|
115
87
|
requirement: !ruby/object:Gem::Requirement
|
116
88
|
requirements:
|
117
89
|
- - "~>"
|
118
90
|
- !ruby/object:Gem::Version
|
119
|
-
version: '
|
91
|
+
version: '1.0'
|
120
92
|
type: :development
|
121
93
|
prerelease: false
|
122
94
|
version_requirements: !ruby/object:Gem::Requirement
|
123
95
|
requirements:
|
124
96
|
- - "~>"
|
125
97
|
- !ruby/object:Gem::Version
|
126
|
-
version: '
|
98
|
+
version: '1.0'
|
127
99
|
- !ruby/object:Gem::Dependency
|
128
100
|
name: sqlite3
|
129
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,7 +110,7 @@ dependencies:
|
|
138
110
|
- - "~>"
|
139
111
|
- !ruby/object:Gem::Version
|
140
112
|
version: '1.4'
|
141
|
-
description:
|
113
|
+
description: Traditional username/password based authentication system for OmniAuth
|
142
114
|
email:
|
143
115
|
executables: []
|
144
116
|
extensions: []
|
@@ -155,17 +127,19 @@ files:
|
|
155
127
|
- lib/omniauth/identity/models/active_record.rb
|
156
128
|
- lib/omniauth/identity/models/couch_potato.rb
|
157
129
|
- lib/omniauth/identity/models/mongoid.rb
|
158
|
-
- lib/omniauth/identity/models/
|
130
|
+
- lib/omniauth/identity/models/nobrainer.rb
|
131
|
+
- lib/omniauth/identity/models/sequel.rb
|
159
132
|
- lib/omniauth/identity/secure_password.rb
|
160
133
|
- lib/omniauth/strategies/identity.rb
|
161
134
|
- spec/omniauth/identity/model_spec.rb
|
162
135
|
- spec/omniauth/identity/models/active_record_spec.rb
|
163
|
-
- spec/omniauth/identity/models/
|
164
|
-
- spec/omniauth/identity/models/mongoid_spec.rb
|
165
|
-
- spec/omniauth/identity/models/no_brainer_spec.rb
|
136
|
+
- spec/omniauth/identity/models/sequel_spec.rb
|
166
137
|
- spec/omniauth/identity/secure_password_spec.rb
|
167
138
|
- spec/omniauth/strategies/identity_spec.rb
|
168
139
|
- spec/spec_helper.rb
|
140
|
+
- spec/support/shared_contexts/instance_with_instance_methods.rb
|
141
|
+
- spec/support/shared_contexts/model_with_class_methods.rb
|
142
|
+
- spec/support/shared_contexts/persistable_model.rb
|
169
143
|
homepage: http://github.com/omniauth/omniauth-identity
|
170
144
|
licenses:
|
171
145
|
- MIT
|
@@ -186,16 +160,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
160
|
- !ruby/object:Gem::Version
|
187
161
|
version: 1.3.6
|
188
162
|
requirements: []
|
189
|
-
rubygems_version: 3.2.
|
163
|
+
rubygems_version: 3.2.9
|
190
164
|
signing_key:
|
191
165
|
specification_version: 4
|
192
|
-
summary:
|
166
|
+
summary: Traditional username/password based authentication system for OmniAuth
|
193
167
|
test_files:
|
194
|
-
- spec/
|
168
|
+
- spec/spec_helper.rb
|
169
|
+
- spec/support/shared_contexts/persistable_model.rb
|
170
|
+
- spec/support/shared_contexts/model_with_class_methods.rb
|
171
|
+
- spec/support/shared_contexts/instance_with_instance_methods.rb
|
195
172
|
- spec/omniauth/identity/models/active_record_spec.rb
|
196
|
-
- spec/omniauth/identity/models/
|
197
|
-
- spec/omniauth/identity/models/mongoid_spec.rb
|
198
|
-
- spec/omniauth/identity/models/no_brainer_spec.rb
|
173
|
+
- spec/omniauth/identity/models/sequel_spec.rb
|
199
174
|
- spec/omniauth/identity/secure_password_spec.rb
|
175
|
+
- spec/omniauth/identity/model_spec.rb
|
200
176
|
- spec/omniauth/strategies/identity_spec.rb
|
201
|
-
- spec/spec_helper.rb
|