omniauth-identity 3.0.4 → 3.0.9
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 +73 -0
- data/README.md +87 -13
- data/lib/omniauth-identity/version.rb +1 -1
- data/lib/omniauth/identity.rb +1 -1
- data/lib/omniauth/identity/model.rb +92 -29
- data/lib/omniauth/identity/models/active_record.rb +5 -2
- data/lib/omniauth/identity/models/couch_potato.rb +9 -1
- data/lib/omniauth/identity/models/mongoid.rb +3 -0
- data/lib/omniauth/identity/models/{no_brainer.rb → nobrainer.rb} +3 -1
- data/lib/omniauth/identity/models/sequel.rb +16 -5
- 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 +20 -10
- data/spec/omniauth/identity/models/sequel_spec.rb +31 -15
- data/spec/omniauth/strategies/identity_spec.rb +124 -5
- data/spec/spec_helper.rb +16 -5
- 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 +17 -65
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3eaf9c4edfdb4716551abeeb233e63716d4bbb6a2c90d921129d05e06434c3ed
|
4
|
+
data.tar.gz: ccb786b04aa010387b3d4d7ae369038a3760d52a1b9a7077e76e3051d364ca1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdbb4c0951fca595a37d1efc13491c6eaba328d77cae2184624260b9bb643c6483a0d167296a36ab168d0dd2afafbc8a3be9df1dfeb6ba9fc7cd83556c02b1c3
|
7
|
+
data.tar.gz: 9d8385b53f5e46ed414f59c6a9acbcb62734b94df6b86224e0fa401da349cd44c1af57ff54d0ec01c100d2ccd8e003ea1c062eb1a7d772b404d82c0c2eda579b
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,79 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
|
9
9
|
## [Unreleased]
|
10
10
|
|
11
|
+
## [3.0.9] - 2021-06-16
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- \[Sequel\] Fixes loading the Sequel adapter, issue reported as [#112](https://github.com/omniauth/omniauth-identity/issues/112)
|
16
|
+
|
17
|
+
### Added
|
18
|
+
|
19
|
+
- 📝 Document the Database adapters and drivers the gem currently works with
|
20
|
+
|
21
|
+
## [3.0.8] - 2021-03-24
|
22
|
+
|
23
|
+
### Fixed
|
24
|
+
|
25
|
+
- \[Model\] Fixes 2 issues raised in a comment on PR [#108](https://github.com/omniauth/omniauth-identity/pull/108#issuecomment-804456604)
|
26
|
+
- When `options[:on_validation]` is set `new`/`save`/`persisted?` logic is used.
|
27
|
+
- When `options[:on_validation]` is not set `create`/`persisted?` logic is used.
|
28
|
+
|
29
|
+
## [3.0.7] - 2021-03-23
|
30
|
+
|
31
|
+
### Fixed
|
32
|
+
|
33
|
+
- \[ActiveRecord\] Fixed [#110](https://github.com/omniauth/omniauth-identity/issues/110) which prevented `OmniAuth::Identity::Models::ActiveRecord`-based records from saving.
|
34
|
+
- \[CouchPotato\] Fixed `OmniAuth::Identity::Models::CouchPotato`'s `#save`.
|
35
|
+
- \[Sequel\] Fixed `OmniAuth::Identity::Models::Sequel`'s `#save`.
|
36
|
+
- \[Model\] Only define `::create`, `#save`, and `#persisted?` when not already defined.
|
37
|
+
- \[Model\] Restore original `info` functionality which set `name` based on `first_name`, `last_name`, or `nickname`
|
38
|
+
|
39
|
+
### Changed
|
40
|
+
|
41
|
+
- Upgraded to a newer `OmniAuth::Identity::SecurePassword` ripped from [Rails 6-1-stable](https://github.com/rails/rails/blob/6-1-stable/activemodel/lib/active_model/secure_password.rb)
|
42
|
+
- Aeons ago the original was ripped from Rails 3.1, and frozen in time.
|
43
|
+
While writing specs, it was discovered to be incompatible with this gem's Sequel adapter.
|
44
|
+
- Specs validate that the new version does work.
|
45
|
+
In any case, the ripped version is only used when the `has_secure_password` macro is not yet defined in the class.
|
46
|
+
|
47
|
+
### Added
|
48
|
+
|
49
|
+
- New specs to cover real use cases and implementations of each ORM model adapter that ships with the gem:
|
50
|
+
- ActiveRecord (Polyglot - Many Relational Databases)
|
51
|
+
- Sequel (Polyglot - Many Relational Databases)
|
52
|
+
- CouchPotato (CouchDB)
|
53
|
+
- Mongoid (MongoDB)
|
54
|
+
- NoBrainer (RethinkDB)
|
55
|
+
|
56
|
+
## [3.0.6] - 2021-03-20
|
57
|
+
|
58
|
+
### Fixed
|
59
|
+
|
60
|
+
- Fix breaking changes introduced by [#108](https://github.com/omniauth/omniauth-identity/pull/108) which prevented `:on_validation` from firing
|
61
|
+
|
62
|
+
### Added
|
63
|
+
|
64
|
+
- New (or finally documented) options:
|
65
|
+
- `:create_identity_link_text` defaults to `'Create an Identity'`
|
66
|
+
- `:registration_failure_message` defaults to `'One or more fields were invalid'`
|
67
|
+
- `:validation_failure_message` defaults to `'Validation failed'`
|
68
|
+
- `:title` defaults to `'Identity Verification'`
|
69
|
+
- `:registration_form_title` defaults to `'Register Identity'`
|
70
|
+
|
71
|
+
## [3.0.5] - 2021-03-19
|
72
|
+
|
73
|
+
### Fixed
|
74
|
+
|
75
|
+
- Fix breaking changes introduced by [#86's](https://github.com/omniauth/omniauth-identity/pull/86) introduction of `:on_validation`
|
76
|
+
|
77
|
+
### Added
|
78
|
+
|
79
|
+
- Define `#save`, `#persisted?` and `::create` on `Omniauth::Identity::Model`
|
80
|
+
- Add `@since` YARD tags to interface methods
|
81
|
+
- Refactor `Omniauth::Strategies::Identity.registration_phase` to support `Omniauth::Identity::Model`-inheriting classes that do not define `#save`.
|
82
|
+
- This support will be dropped in v4.0.
|
83
|
+
|
11
84
|
## [3.0.4] - 2021-02-14
|
12
85
|
|
13
86
|
### Added
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
[](https://rubygems.org/gems/omniauth-identity)
|
11
11
|
|
12
12
|
The OmniAuth Identity gem provides a way for applications to utilize a
|
13
|
-
traditional
|
13
|
+
traditional username/password based authentication system without the need
|
14
14
|
to give up the simple authentication flow provided by OmniAuth. Identity
|
15
15
|
is designed on purpose to be as featureless as possible: it provides the
|
16
16
|
basic construct for user management and then gets out of the way.
|
@@ -21,6 +21,15 @@ This gem is compatible with, as of Feb 2021, version 3:
|
|
21
21
|
|
22
22
|
* Latest released version of omniauth, v2.0.2
|
23
23
|
* Ruby 2.4, 2.5, 2.6, 2.7, 3.0, ruby-head
|
24
|
+
* At least 5 different database ORM adapters, which connect to 15 different database clients!
|
25
|
+
|
26
|
+
| Databases | Adapter Libraries |
|
27
|
+
|--------- | -------- |
|
28
|
+
| MySQL, PostgreSQL, SQLite3 | [ActiveRecord](https://guides.rubyonrails.org/active_record_basics.html) |
|
29
|
+
| CouchDB | [CouchPotato](https://github.com/langalex/couch_potato) |
|
30
|
+
| MongoDB | [Mongoid](https://github.com/mongodb/mongoid) |
|
31
|
+
| RethinkDB | [NoBrainer](http://nobrainer.io/) |
|
32
|
+
| ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3, and TinyTDS | [Sequel](http://sequel.jeremyevans.net) |
|
24
33
|
|
25
34
|
## Installation
|
26
35
|
|
@@ -93,8 +102,8 @@ Just include `OmniAuth::Identity::Models::Sequel` mixin, and specify
|
|
93
102
|
whatever else you will need.
|
94
103
|
|
95
104
|
```ruby
|
96
|
-
class SequelTestIdentity < Sequel::Model
|
97
|
-
include OmniAuth::Identity::Models::Sequel
|
105
|
+
class SequelTestIdentity < Sequel::Model(:identities)
|
106
|
+
include ::OmniAuth::Identity::Models::Sequel
|
98
107
|
auth_key :email
|
99
108
|
# whatever else you want!
|
100
109
|
end
|
@@ -108,8 +117,8 @@ fields that you will need.
|
|
108
117
|
|
109
118
|
```ruby
|
110
119
|
class Identity
|
111
|
-
include Mongoid::Document
|
112
|
-
include OmniAuth::Identity::Models::Mongoid
|
120
|
+
include ::Mongoid::Document
|
121
|
+
include ::OmniAuth::Identity::Models::Mongoid
|
113
122
|
|
114
123
|
field :email, type: String
|
115
124
|
field :name, type: String
|
@@ -124,8 +133,9 @@ fields that you will need.
|
|
124
133
|
|
125
134
|
```ruby
|
126
135
|
class Identity
|
127
|
-
|
128
|
-
include
|
136
|
+
# NOTE: CouchPotato::Persistence must be included before OmniAuth::Identity::Models::CouchPotatoModule
|
137
|
+
include ::CouchPotato::Persistence
|
138
|
+
include ::OmniAuth::Identity::Models::CouchPotatoModule
|
129
139
|
|
130
140
|
property :email
|
131
141
|
property :password_digest
|
@@ -147,8 +157,8 @@ fields that you will need.
|
|
147
157
|
|
148
158
|
```ruby
|
149
159
|
class Identity
|
150
|
-
include NoBrainer::Document
|
151
|
-
include OmniAuth::Identity::Models::NoBrainer
|
160
|
+
include ::NoBrainer::Document
|
161
|
+
include ::OmniAuth::Identity::Models::NoBrainer
|
152
162
|
|
153
163
|
auth_key :email
|
154
164
|
end
|
@@ -170,7 +180,7 @@ end
|
|
170
180
|
```
|
171
181
|
|
172
182
|
NOTE: In the above example, `MyCustomClass` must have a class method called `auth_key` that returns
|
173
|
-
|
183
|
+
the default (`email`) or custom `auth_key` to use.
|
174
184
|
|
175
185
|
## Customizing Registration Failure
|
176
186
|
|
@@ -245,12 +255,76 @@ Note: Be careful when customizing `locate_conditions`. The best way to modify t
|
|
245
255
|
to copy the default value, and then add to the hash. Removing the default condition will almost
|
246
256
|
always break things!
|
247
257
|
|
258
|
+
## Customizing Other Things
|
259
|
+
|
260
|
+
From the code - here are the options we have for you, a couple of which are documented above, and the rest are documented... in the specs we hope!?
|
261
|
+
```
|
262
|
+
option :fields, %i[name email]
|
263
|
+
|
264
|
+
# Primary Feature Switches:
|
265
|
+
option :enable_registration, true # See #other_phase and #request_phase
|
266
|
+
option :enable_login, true # See #other_phase
|
267
|
+
|
268
|
+
# Customization Options:
|
269
|
+
option :on_login, nil # See #request_phase
|
270
|
+
option :on_validation, nil # See #registration_phase
|
271
|
+
option :on_registration, nil # See #registration_phase
|
272
|
+
option :on_failed_registration, nil # See #registration_phase
|
273
|
+
option :locate_conditions, ->(req) { { model.auth_key => req['auth_key'] } }
|
274
|
+
```
|
275
|
+
|
276
|
+
Please contribute some documentation if you have the gumption! The maintainer's time is limited, and sometimes the authors of PRs with new options don't update the _this_ readme. 😭
|
277
|
+
|
278
|
+
## Contributing
|
279
|
+
|
280
|
+
1. Fork it
|
281
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
282
|
+
3. Commit your changes (`git commit -am ‘Added some feature’`)
|
283
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
284
|
+
5. Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.
|
285
|
+
- NOTE: In order to run *all* the tests you will need to have the following databases installed, configured, and running.
|
286
|
+
1. [RethinkDB](https://rethinkdb.com), an open source, real-time, web database, [installed](https://rethinkdb.com/docs/install/) and [running](https://rethinkdb.com/docs/start-a-server/), e.g.
|
287
|
+
```bash
|
288
|
+
brew install rethinkdb
|
289
|
+
rethinkdb
|
290
|
+
```
|
291
|
+
2. [MongoDB](https://docs.mongodb.com/manual/administration/install-community/)
|
292
|
+
```bash
|
293
|
+
brew tap mongodb/brew
|
294
|
+
brew install mongodb-community@4.4
|
295
|
+
mongod --config /usr/local/etc/mongod.conf
|
296
|
+
```
|
297
|
+
3. [CouchDB](https://couchdb.apache.org) (download the .app)
|
298
|
+
|
299
|
+
To run all tests on all databases:
|
300
|
+
```bash
|
301
|
+
bundle exec rake
|
302
|
+
```
|
303
|
+
To run a specific DB:
|
304
|
+
```bash
|
305
|
+
# CouchDB / CouchPotato
|
306
|
+
bundle exec rspec spec spec_orms --tag 'couchdb'
|
307
|
+
|
308
|
+
# ActiveRecord and Sequel, as they both use the in-memory SQLite driver.
|
309
|
+
bundle exec rspec spec spec_orms --tag 'sqlite3'
|
310
|
+
|
311
|
+
# NOTE - mongoid and nobrainer specs can't be isolated with "tag" because it still loads everything,
|
312
|
+
# and the two libraries are fundamentally incompatible.
|
313
|
+
|
314
|
+
# MongoDB / Mongoid
|
315
|
+
bundle exec rspec spec_orms/mongoid_spec.rb
|
316
|
+
|
317
|
+
# RethinkDB / NoBrainer
|
318
|
+
bundle exec rspec spec_orms/nobrainer_spec.rb
|
319
|
+
```
|
320
|
+
6. Create new Pull Request
|
321
|
+
|
248
322
|
## License
|
249
323
|
|
250
324
|
MIT License. See LICENSE for details.
|
251
325
|
|
252
326
|
## Copyright
|
253
327
|
|
254
|
-
Copyright (c) 2021 OmniAuth-Identity Maintainers
|
255
|
-
Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
|
256
|
-
Copyright (c) 2010-2015 Michael Bleigh, and Intridea, Inc.
|
328
|
+
* Copyright (c) 2021 OmniAuth-Identity Maintainers
|
329
|
+
* Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
|
330
|
+
* Copyright (c) 2010-2015 Michael Bleigh, and Intridea, Inc.
|
data/lib/omniauth/identity.rb
CHANGED
@@ -14,7 +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/
|
17
|
+
autoload :NoBrainer, 'omniauth/identity/models/nobrainer'
|
18
18
|
autoload :Sequel, 'omniauth/identity/models/sequel'
|
19
19
|
end
|
20
20
|
end
|
@@ -4,24 +4,34 @@ module OmniAuth
|
|
4
4
|
module Identity
|
5
5
|
# This module provides an includable interface for implementing the
|
6
6
|
# necessary API for OmniAuth Identity to properly locate identities
|
7
|
-
# and provide all necessary information.
|
8
|
-
#
|
9
|
-
#
|
7
|
+
# and provide all necessary information.
|
8
|
+
#
|
9
|
+
# All methods marked as abstract must be implemented in the
|
10
|
+
# including class for things to work properly.
|
11
|
+
#
|
12
|
+
### Singleton API
|
13
|
+
#
|
14
|
+
# * locate(key)
|
15
|
+
# * create(*args) - Deprecated in v3.0.5; Will be removed in v4.0
|
16
|
+
#
|
17
|
+
### Instance API
|
18
|
+
#
|
19
|
+
# * save
|
20
|
+
# * persisted?
|
21
|
+
# * authenticate(password)
|
22
|
+
#
|
10
23
|
module Model
|
24
|
+
SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone].freeze
|
25
|
+
|
11
26
|
def self.included(base)
|
12
27
|
base.extend ClassMethods
|
28
|
+
base.extend ClassCreateApi unless base.respond_to?(:create)
|
29
|
+
im = base.instance_methods
|
30
|
+
base.include InstanceSaveApi unless im.include?(:save)
|
31
|
+
base.include InstancePersistedApi unless im.include?(:persisted?)
|
13
32
|
end
|
14
33
|
|
15
34
|
module ClassMethods
|
16
|
-
# Locate an identity given its unique login key.
|
17
|
-
#
|
18
|
-
# @abstract
|
19
|
-
# @param [String] key The unique login key.
|
20
|
-
# @return [Model] An instance of the identity model class.
|
21
|
-
def locate(key)
|
22
|
-
raise NotImplementedError
|
23
|
-
end
|
24
|
-
|
25
35
|
# Authenticate a user with the given key and password.
|
26
36
|
#
|
27
37
|
# @param [String] key The unique login key provided for a given identity.
|
@@ -43,6 +53,56 @@ module OmniAuth
|
|
43
53
|
|
44
54
|
@auth_key || 'email'
|
45
55
|
end
|
56
|
+
|
57
|
+
# Locate an identity given its unique login key.
|
58
|
+
#
|
59
|
+
# @abstract
|
60
|
+
# @param [String] key The unique login key.
|
61
|
+
# @return [Model] An instance of the identity model class.
|
62
|
+
def locate(_key)
|
63
|
+
raise NotImplementedError
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
module ClassCreateApi
|
68
|
+
# Persists a new Identity object to the ORM.
|
69
|
+
# Only included if the class doesn't define create, as a reminder to define create.
|
70
|
+
# Override as needed per ORM.
|
71
|
+
#
|
72
|
+
# @deprecated v4.0 will begin using {#new} with {#save} instead.
|
73
|
+
# @abstract
|
74
|
+
# @param [Hash] args Attributes of the new instance.
|
75
|
+
# @return [Model] An instance of the identity model class.
|
76
|
+
# @since 3.0.5
|
77
|
+
def create(*_args)
|
78
|
+
raise NotImplementedError
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
module InstanceSaveApi
|
83
|
+
# Persists a new Identity object to the ORM.
|
84
|
+
# Default raises an error. Override as needed per ORM.
|
85
|
+
# This base version's arguments are modeled after ActiveModel
|
86
|
+
# since it is a pattern many ORMs follow
|
87
|
+
#
|
88
|
+
# @abstract
|
89
|
+
# @return [Model] An instance of the identity model class.
|
90
|
+
# @since 3.0.5
|
91
|
+
def save(**_options, &_block)
|
92
|
+
raise NotImplementedError
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
module InstancePersistedApi
|
97
|
+
# Checks if the Identity object is persisted in the ORM.
|
98
|
+
# Default raises an error. Override as needed per ORM.
|
99
|
+
#
|
100
|
+
# @abstract
|
101
|
+
# @return [true or false] true if object exists, false if not.
|
102
|
+
# @since 3.0.5
|
103
|
+
def persisted?
|
104
|
+
raise NotImplementedError
|
105
|
+
end
|
46
106
|
end
|
47
107
|
|
48
108
|
# Returns self if the provided password is correct, false
|
@@ -51,26 +111,10 @@ module OmniAuth
|
|
51
111
|
# @abstract
|
52
112
|
# @param [String] password The password to check.
|
53
113
|
# @return [self or false] Self if authenticated, false if not.
|
54
|
-
def authenticate(
|
114
|
+
def authenticate(_password)
|
55
115
|
raise NotImplementedError
|
56
116
|
end
|
57
117
|
|
58
|
-
SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone].freeze
|
59
|
-
# A hash of as much of the standard OmniAuth schema as is stored
|
60
|
-
# in this particular model. By default, this will call instance
|
61
|
-
# methods for each of the attributes it needs in turn, ignoring
|
62
|
-
# any for which `#respond_to?` is `false`.
|
63
|
-
#
|
64
|
-
# If `first_name`, `nickname`, and/or `last_name` is provided but
|
65
|
-
# `name` is not, it will be automatically calculated.
|
66
|
-
#
|
67
|
-
# @return [Hash] A string-keyed hash of user information.
|
68
|
-
def info
|
69
|
-
SCHEMA_ATTRIBUTES.each_with_object({}) do |attribute, hash|
|
70
|
-
hash[attribute] = send(attribute) if respond_to?(attribute)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
118
|
# An identifying string that must be globally unique to the
|
75
119
|
# application. Defaults to stringifying the `id` method.
|
76
120
|
#
|
@@ -113,6 +157,25 @@ module OmniAuth
|
|
113
157
|
raise NotImplementedError
|
114
158
|
end
|
115
159
|
end
|
160
|
+
|
161
|
+
# A hash of as much of the standard OmniAuth schema as is stored
|
162
|
+
# in this particular model. By default, this will call instance
|
163
|
+
# methods for each of the attributes it needs in turn, ignoring
|
164
|
+
# any for which `#respond_to?` is `false`.
|
165
|
+
#
|
166
|
+
# If `first_name`, `nickname`, and/or `last_name` is provided but
|
167
|
+
# `name` is not, it will be automatically calculated.
|
168
|
+
#
|
169
|
+
# @return [Hash] A string-keyed hash of user information.
|
170
|
+
def info
|
171
|
+
info = {}
|
172
|
+
SCHEMA_ATTRIBUTES.each_with_object(info) do |attribute, hash|
|
173
|
+
hash[attribute] = send(attribute) if respond_to?(attribute)
|
174
|
+
end
|
175
|
+
info['name'] ||= [info['first_name'], info['last_name']].join(' ').strip if info['first_name'] || info['last_name']
|
176
|
+
info['name'] ||= info['nickname']
|
177
|
+
info
|
178
|
+
end
|
116
179
|
end
|
117
180
|
end
|
118
181
|
end
|
@@ -5,9 +5,12 @@ require 'active_record'
|
|
5
5
|
module OmniAuth
|
6
6
|
module Identity
|
7
7
|
module Models
|
8
|
+
# ActiveRecord is an ORM for MySQL, PostgreSQL, and SQLite3:
|
9
|
+
# https://guides.rubyonrails.org/active_record_basics.html
|
10
|
+
# NOTE: ActiveRecord is based on ActiveModel.
|
8
11
|
class ActiveRecord < ::ActiveRecord::Base
|
9
|
-
include OmniAuth::Identity::Model
|
10
|
-
include OmniAuth::Identity::SecurePassword
|
12
|
+
include ::OmniAuth::Identity::Model
|
13
|
+
include ::OmniAuth::Identity::SecurePassword
|
11
14
|
|
12
15
|
self.abstract_class = true
|
13
16
|
has_secure_password
|
@@ -5,7 +5,11 @@ require 'couch_potato'
|
|
5
5
|
module OmniAuth
|
6
6
|
module Identity
|
7
7
|
module Models
|
8
|
-
#
|
8
|
+
# CouchPotato is an ORM adapter for CouchDB:
|
9
|
+
# https://github.com/langalex/couch_potato
|
10
|
+
# NOTE: CouchPotato is based on ActiveModel.
|
11
|
+
# NOTE: CouchPotato::Persistence must be included before OmniAuth::Identity::Models::CouchPotatoModule
|
12
|
+
# NOTE: Includes "Module" in the name for invalid legacy reasons. Rename only with a major version bump.
|
9
13
|
module CouchPotatoModule
|
10
14
|
def self.included(base)
|
11
15
|
base.class_eval do
|
@@ -22,6 +26,10 @@ module OmniAuth
|
|
22
26
|
def self.locate(search_hash)
|
23
27
|
where(search_hash).first
|
24
28
|
end
|
29
|
+
|
30
|
+
def save
|
31
|
+
CouchPotato.database.save(self)
|
32
|
+
end
|
25
33
|
end
|
26
34
|
end
|
27
35
|
end
|