sorcery 0.8.5 → 0.9.0
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/.gitignore +3 -1
- data/.travis.yml +122 -5
- data/CHANGELOG.md +37 -1
- data/Gemfile +10 -18
- data/README.md +159 -88
- data/gemfiles/active_record-rails40.gemfile +7 -0
- data/gemfiles/active_record-rails41.gemfile +7 -0
- data/gemfiles/mongo_mapper-rails40.gemfile +9 -0
- data/gemfiles/mongo_mapper-rails41.gemfile +9 -0
- data/gemfiles/mongoid-rails40.gemfile +9 -0
- data/gemfiles/mongoid-rails41.gemfile +9 -0
- data/gemfiles/mongoid3-rails32.gemfile +9 -0
- data/lib/generators/sorcery/USAGE +1 -1
- data/lib/generators/sorcery/install_generator.rb +19 -5
- data/lib/generators/sorcery/templates/initializer.rb +34 -9
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -1
- data/lib/generators/sorcery/templates/migration/core.rb +2 -2
- data/lib/generators/sorcery/templates/migration/external.rb +3 -1
- data/lib/sorcery/adapters/active_record_adapter.rb +120 -0
- data/lib/sorcery/adapters/base_adapter.rb +30 -0
- data/lib/sorcery/adapters/data_mapper_adapter.rb +176 -0
- data/lib/sorcery/adapters/mongo_mapper_adapter.rb +110 -0
- data/lib/sorcery/adapters/mongoid_adapter.rb +97 -0
- data/lib/sorcery/controller/config.rb +65 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +16 -21
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +6 -6
- data/lib/sorcery/controller/submodules/external.rb +35 -40
- data/lib/sorcery/controller/submodules/remember_me.rb +4 -4
- data/lib/sorcery/controller/submodules/session_timeout.rb +10 -6
- data/lib/sorcery/controller.rb +10 -74
- data/lib/sorcery/model/config.rb +96 -0
- data/lib/sorcery/model/submodules/activity_logging.rb +30 -13
- data/lib/sorcery/model/submodules/brute_force_protection.rb +21 -21
- data/lib/sorcery/model/submodules/external.rb +53 -9
- data/lib/sorcery/model/submodules/remember_me.rb +15 -19
- data/lib/sorcery/model/submodules/reset_password.rb +33 -34
- data/lib/sorcery/model/submodules/user_activation.rb +36 -47
- data/lib/sorcery/model/temporary_token.rb +4 -4
- data/lib/sorcery/model.rb +73 -173
- data/lib/sorcery/protocols/oauth.rb +42 -0
- data/lib/sorcery/protocols/oauth2.rb +47 -0
- data/lib/sorcery/providers/base.rb +38 -0
- data/lib/sorcery/providers/facebook.rb +63 -0
- data/lib/sorcery/providers/github.rb +51 -0
- data/lib/sorcery/providers/google.rb +51 -0
- data/lib/sorcery/providers/heroku.rb +57 -0
- data/lib/sorcery/providers/jira.rb +77 -0
- data/lib/sorcery/providers/linkedin.rb +66 -0
- data/lib/sorcery/providers/liveid.rb +53 -0
- data/lib/sorcery/providers/salesforce.rb +50 -0
- data/lib/sorcery/providers/twitter.rb +59 -0
- data/lib/sorcery/providers/vk.rb +63 -0
- data/lib/sorcery/providers/xing.rb +64 -0
- data/lib/sorcery/test_helpers/internal/rails.rb +14 -3
- data/lib/sorcery/test_helpers/internal.rb +7 -3
- data/lib/sorcery/test_helpers/rails/controller.rb +21 -0
- data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
- data/lib/sorcery/version.rb +3 -0
- data/lib/sorcery.rb +82 -58
- data/sorcery.gemspec +19 -19
- data/spec/active_record/user_activation_spec.rb +1 -1
- data/spec/active_record/user_activity_logging_spec.rb +10 -1
- data/spec/active_record/user_brute_force_protection_spec.rb +1 -1
- data/spec/active_record/user_oauth_spec.rb +1 -1
- data/spec/active_record/user_remember_me_spec.rb +1 -1
- data/spec/active_record/user_reset_password_spec.rb +1 -1
- data/spec/active_record/user_spec.rb +7 -8
- data/spec/controllers/controller_activity_logging_spec.rb +124 -0
- data/spec/controllers/controller_brute_force_protection_spec.rb +43 -0
- data/spec/controllers/controller_http_basic_auth_spec.rb +68 -0
- data/spec/controllers/controller_oauth2_spec.rb +414 -0
- data/spec/controllers/controller_oauth_spec.rb +240 -0
- data/spec/controllers/controller_remember_me_spec.rb +117 -0
- data/spec/controllers/controller_session_timeout_spec.rb +80 -0
- data/spec/controllers/controller_spec.rb +218 -0
- data/spec/data_mapper/user_activation_spec.rb +10 -0
- data/spec/data_mapper/user_activity_logging_spec.rb +14 -0
- data/spec/data_mapper/user_brute_force_protection_spec.rb +9 -0
- data/spec/data_mapper/user_oauth_spec.rb +9 -0
- data/spec/data_mapper/user_remember_me_spec.rb +8 -0
- data/spec/data_mapper/user_reset_password_spec.rb +8 -0
- data/spec/data_mapper/user_spec.rb +27 -0
- data/spec/mongo_mapper/user_activation_spec.rb +1 -2
- data/spec/mongo_mapper/user_activity_logging_spec.rb +1 -1
- data/spec/mongo_mapper/user_brute_force_protection_spec.rb +1 -1
- data/spec/mongo_mapper/user_oauth_spec.rb +1 -1
- data/spec/mongo_mapper/user_remember_me_spec.rb +1 -1
- data/spec/mongo_mapper/user_reset_password_spec.rb +1 -1
- data/spec/mongo_mapper/user_spec.rb +7 -8
- data/spec/mongoid/user_activation_spec.rb +1 -2
- data/spec/mongoid/user_activity_logging_spec.rb +1 -2
- data/spec/mongoid/user_brute_force_protection_spec.rb +1 -2
- data/spec/mongoid/user_oauth_spec.rb +1 -2
- data/spec/mongoid/user_remember_me_spec.rb +1 -2
- data/spec/mongoid/user_reset_password_spec.rb +1 -2
- data/spec/mongoid/user_spec.rb +21 -9
- data/spec/orm/active_record.rb +14 -0
- data/spec/orm/data_mapper.rb +48 -0
- data/spec/orm/mongo_mapper.rb +1 -1
- data/spec/orm/mongoid.rb +5 -0
- data/spec/rails_app/app/controllers/sorcery_controller.rb +125 -59
- data/spec/rails_app/app/data_mapper/authentication.rb +8 -0
- data/spec/rails_app/app/data_mapper/user.rb +7 -0
- data/spec/rails_app/app/mongo_mapper/user.rb +2 -0
- data/spec/rails_app/config/routes.rb +27 -13
- data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +2 -2
- data/spec/shared_examples/user_activation_shared_examples.rb +108 -91
- data/spec/shared_examples/user_activity_logging_shared_examples.rb +83 -15
- data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +140 -21
- data/spec/shared_examples/user_oauth_shared_examples.rb +21 -16
- data/spec/shared_examples/user_remember_me_shared_examples.rb +36 -24
- data/spec/shared_examples/user_reset_password_shared_examples.rb +138 -117
- data/spec/shared_examples/user_shared_examples.rb +297 -150
- data/spec/sorcery_crypto_providers_spec.rb +28 -28
- data/spec/spec_helper.rb +12 -18
- metadata +99 -165
- data/Gemfile.rails4 +0 -24
- data/VERSION +0 -1
- data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -46
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -50
- data/lib/sorcery/controller/submodules/external/providers/base.rb +0 -21
- data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -99
- data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -93
- data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -92
- data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -103
- data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -93
- data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -94
- data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -101
- data/lib/sorcery/controller/submodules/external/providers/xing.rb +0 -98
- data/lib/sorcery/model/adapters/active_record.rb +0 -49
- data/lib/sorcery/model/adapters/mongo_mapper.rb +0 -56
- data/lib/sorcery/model/adapters/mongoid.rb +0 -88
- data/lib/sorcery/test_helpers/rails.rb +0 -16
- data/lib/sorcery/test_helpers.rb +0 -5
- data/spec/active_record/controller_activity_logging_spec.rb +0 -140
- data/spec/active_record/controller_brute_force_protection_spec.rb +0 -136
- data/spec/active_record/controller_http_basic_auth_spec.rb +0 -59
- data/spec/active_record/controller_oauth2_spec.rb +0 -417
- data/spec/active_record/controller_oauth_spec.rb +0 -212
- data/spec/active_record/controller_remember_me_spec.rb +0 -96
- data/spec/active_record/controller_session_timeout_spec.rb +0 -55
- data/spec/active_record/controller_spec.rb +0 -182
- data/spec/active_record/integration_spec.rb +0 -23
- data/spec/mongo_mapper/controller_spec.rb +0 -175
- data/spec/mongoid/controller_activity_logging_spec.rb +0 -111
- data/spec/mongoid/controller_spec.rb +0 -186
- data/spec/rails_app/public/404.html +0 -26
- data/spec/rails_app/public/422.html +0 -26
- data/spec/rails_app/public/500.html +0 -26
- data/spec/rails_app/public/favicon.ico +0 -0
- data/spec/rails_app/public/images/rails.png +0 -0
- data/spec/rails_app/public/javascripts/application.js +0 -2
- data/spec/rails_app/public/javascripts/controls.js +0 -965
- data/spec/rails_app/public/javascripts/dragdrop.js +0 -974
- data/spec/rails_app/public/javascripts/effects.js +0 -1123
- data/spec/rails_app/public/javascripts/prototype.js +0 -6001
- data/spec/rails_app/public/javascripts/rails.js +0 -175
- data/spec/rails_app/public/robots.txt +0 -5
- data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
- data/spec/shared_examples/controller_oauth2_shared_examples.rb +0 -56
- data/spec/shared_examples/controller_oauth_shared_examples.rb +0 -69
- /data/lib/sorcery/{controller/submodules/external/protocols → protocols}/certs/ca-bundle.crt +0 -0
|
@@ -9,20 +9,20 @@ describe "Crypto Providers wrappers" do
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it "encrypt works via wrapper like normal lib" do
|
|
12
|
-
Sorcery::CryptoProviders::MD5.encrypt
|
|
12
|
+
expect(Sorcery::CryptoProviders::MD5.encrypt 'Noam Ben-Ari').to eq Digest::MD5.hexdigest('Noam Ben-Ari')
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
it "works with multiple stretches" do
|
|
16
16
|
Sorcery::CryptoProviders::MD5.stretches = 3
|
|
17
|
-
Sorcery::CryptoProviders::MD5.encrypt
|
|
17
|
+
expect(Sorcery::CryptoProviders::MD5.encrypt 'Noam Ben-Ari').to eq Digest::MD5.hexdigest(Digest::MD5.hexdigest(Digest::MD5.hexdigest('Noam Ben-Ari')))
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
it "matches? returns true when matches" do
|
|
21
|
-
Sorcery::CryptoProviders::MD5.matches?
|
|
21
|
+
expect(Sorcery::CryptoProviders::MD5.matches? Digest::MD5.hexdigest('Noam Ben-Ari'), 'Noam Ben-Ari').to be true
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
it "matches? returns false when no match" do
|
|
25
|
-
Sorcery::CryptoProviders::MD5.matches?
|
|
25
|
+
expect(Sorcery::CryptoProviders::MD5.matches? Digest::MD5.hexdigest('Noam Ben-Ari'), 'Some Dude').to be false
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
end
|
|
@@ -39,25 +39,25 @@ describe "Crypto Providers wrappers" do
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
it "encrypt works via wrapper like normal lib" do
|
|
42
|
-
Sorcery::CryptoProviders::SHA1.encrypt
|
|
42
|
+
expect(Sorcery::CryptoProviders::SHA1.encrypt 'Noam Ben-Ari').to eq @digest
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it "works with multiple stretches" do
|
|
46
46
|
Sorcery::CryptoProviders::SHA1.stretches = 3
|
|
47
|
-
Sorcery::CryptoProviders::SHA1.encrypt
|
|
47
|
+
expect(Sorcery::CryptoProviders::SHA1.encrypt 'Noam Ben-Ari').to eq Digest::SHA1.hexdigest(Digest::SHA1.hexdigest(Digest::SHA1.hexdigest('Noam Ben-Ari')))
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
it "matches? returns true when matches" do
|
|
51
|
-
Sorcery::CryptoProviders::SHA1.matches?
|
|
51
|
+
expect(Sorcery::CryptoProviders::SHA1.matches? @digest, 'Noam Ben-Ari').to be true
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
it "matches? returns false when no match" do
|
|
55
|
-
Sorcery::CryptoProviders::SHA1.matches?
|
|
55
|
+
expect(Sorcery::CryptoProviders::SHA1.matches? @digest, 'Some Dude').to be false
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it "matches password encrypted using salt and join token from upstream" do
|
|
59
59
|
Sorcery::CryptoProviders::SHA1.join_token = "test"
|
|
60
|
-
Sorcery::CryptoProviders::SHA1.encrypt
|
|
60
|
+
expect(Sorcery::CryptoProviders::SHA1.encrypt ['password', 'gq18WBnJYNh2arkC1kgH']).to eq '894b5bf1643b8d0e1b2eaddb22426be7036dab70'
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
@@ -73,20 +73,20 @@ describe "Crypto Providers wrappers" do
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
it "encrypt works via wrapper like normal lib" do
|
|
76
|
-
Sorcery::CryptoProviders::SHA256.encrypt
|
|
76
|
+
expect(Sorcery::CryptoProviders::SHA256.encrypt 'Noam Ben-Ari').to eq @digest
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
it "works with multiple stretches" do
|
|
80
80
|
Sorcery::CryptoProviders::SHA256.stretches = 3
|
|
81
|
-
Sorcery::CryptoProviders::SHA256.encrypt
|
|
81
|
+
expect(Sorcery::CryptoProviders::SHA256.encrypt 'Noam Ben-Ari').to eq Digest::SHA256.hexdigest(Digest::SHA256.hexdigest(Digest::SHA256.hexdigest('Noam Ben-Ari')))
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
it "matches? returns true when matches" do
|
|
85
|
-
Sorcery::CryptoProviders::SHA256.matches?
|
|
85
|
+
expect(Sorcery::CryptoProviders::SHA256.matches? @digest, 'Noam Ben-Ari').to be true
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
it "matches? returns false when no match" do
|
|
89
|
-
Sorcery::CryptoProviders::SHA256.matches?
|
|
89
|
+
expect(Sorcery::CryptoProviders::SHA256.matches? @digest, 'Some Dude').to be false
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
end
|
|
@@ -103,20 +103,20 @@ describe "Crypto Providers wrappers" do
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
it "encrypt works via wrapper like normal lib" do
|
|
106
|
-
Sorcery::CryptoProviders::SHA512.encrypt
|
|
106
|
+
expect(Sorcery::CryptoProviders::SHA512.encrypt 'Noam Ben-Ari').to eq @digest
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
it "works with multiple stretches" do
|
|
110
110
|
Sorcery::CryptoProviders::SHA512.stretches = 3
|
|
111
|
-
Sorcery::CryptoProviders::SHA512.encrypt
|
|
111
|
+
expect(Sorcery::CryptoProviders::SHA512.encrypt 'Noam Ben-Ari').to eq Digest::SHA512.hexdigest(Digest::SHA512.hexdigest(Digest::SHA512.hexdigest('Noam Ben-Ari')))
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
it "matches? returns true when matches" do
|
|
115
|
-
Sorcery::CryptoProviders::SHA512.matches?
|
|
115
|
+
expect(Sorcery::CryptoProviders::SHA512.matches? @digest, 'Noam Ben-Ari').to be true
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it "matches? returns false when no match" do
|
|
119
|
-
Sorcery::CryptoProviders::SHA512.matches?
|
|
119
|
+
expect(Sorcery::CryptoProviders::SHA512.matches? @digest, 'Some Dude').to be false
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
end
|
|
@@ -134,22 +134,22 @@ describe "Crypto Providers wrappers" do
|
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
it "encrypt works via wrapper like normal lib" do
|
|
137
|
-
Sorcery::CryptoProviders::AES256.encrypt
|
|
137
|
+
expect(Sorcery::CryptoProviders::AES256.encrypt 'Noam Ben-Ari').to eq @digest
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
it "matches? returns true when matches" do
|
|
141
|
-
Sorcery::CryptoProviders::AES256.matches?
|
|
141
|
+
expect(Sorcery::CryptoProviders::AES256.matches? @digest, 'Noam Ben-Ari').to be true
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
it "matches? returns false when no match" do
|
|
145
|
-
Sorcery::CryptoProviders::AES256.matches?
|
|
145
|
+
expect(Sorcery::CryptoProviders::AES256.matches? @digest, 'Some Dude').to be false
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
it "can be decrypted" do
|
|
149
149
|
aes = OpenSSL::Cipher::Cipher.new("AES-256-ECB")
|
|
150
150
|
aes.decrypt
|
|
151
151
|
aes.key = @key
|
|
152
|
-
(aes.update(@digest.unpack("m").first) + aes.final).
|
|
152
|
+
expect(aes.update(@digest.unpack("m").first) + aes.final).to eq "Noam Ben-Ari"
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
end
|
|
@@ -165,32 +165,32 @@ describe "Crypto Providers wrappers" do
|
|
|
165
165
|
Sorcery::CryptoProviders::BCrypt.reset!
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
-
it "
|
|
169
|
-
BCrypt::Password.new
|
|
168
|
+
it "is comparable with original secret" do
|
|
169
|
+
expect(BCrypt::Password.new Sorcery::CryptoProviders::BCrypt.encrypt('Noam Ben-Ari')).to eq 'Noam Ben-Ari'
|
|
170
170
|
end
|
|
171
171
|
|
|
172
172
|
it "works with multiple costs" do
|
|
173
173
|
Sorcery::CryptoProviders::BCrypt.cost = 3
|
|
174
|
-
BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt
|
|
174
|
+
expect(BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt 'Noam Ben-Ari')).to eq 'Noam Ben-Ari'
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
it "matches? returns true when matches" do
|
|
178
|
-
Sorcery::CryptoProviders::BCrypt.matches?
|
|
178
|
+
expect(Sorcery::CryptoProviders::BCrypt.matches? @digest, 'Noam Ben-Ari').to be true
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
it "matches? returns false when no match" do
|
|
182
|
-
Sorcery::CryptoProviders::BCrypt.matches?
|
|
182
|
+
expect(Sorcery::CryptoProviders::BCrypt.matches? @digest, 'Some Dude').to be false
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
it "respond_to?(:stretches) returns true" do
|
|
186
|
-
Sorcery::CryptoProviders::BCrypt.respond_to?
|
|
186
|
+
expect(Sorcery::CryptoProviders::BCrypt.respond_to? :stretches).to be true
|
|
187
187
|
end
|
|
188
188
|
|
|
189
189
|
it "sets cost when stretches is set" do
|
|
190
190
|
Sorcery::CryptoProviders::BCrypt.stretches = 4
|
|
191
191
|
|
|
192
192
|
# stubbed in Sorcery::TestHelpers::Internal
|
|
193
|
-
Sorcery::CryptoProviders::BCrypt.cost.
|
|
193
|
+
expect(Sorcery::CryptoProviders::BCrypt.cost).to eq 1
|
|
194
194
|
end
|
|
195
195
|
|
|
196
196
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -15,36 +15,30 @@ require 'rails/all'
|
|
|
15
15
|
require 'rspec/rails'
|
|
16
16
|
require 'timecop'
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
def setup_orm; end
|
|
19
|
+
def teardown_orm; end
|
|
19
20
|
|
|
20
21
|
require "orm/#{SORCERY_ORM}"
|
|
21
22
|
|
|
23
|
+
require "rails_app/config/environment"
|
|
24
|
+
|
|
22
25
|
class TestMailer < ActionMailer::Base;end
|
|
23
26
|
|
|
24
27
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
25
28
|
|
|
26
29
|
RSpec.configure do |config|
|
|
27
|
-
config.include RSpec::Rails::ControllerExampleGroup, :
|
|
28
|
-
|
|
30
|
+
config.include RSpec::Rails::ControllerExampleGroup, :file_path => /controller(.)*_spec.rb$/
|
|
31
|
+
config.filter_run_excluding :active_record => SORCERY_ORM.to_sym != :active_record
|
|
32
|
+
config.filter_run_excluding :mongo_mapper => SORCERY_ORM.to_sym != :mongo_mapper
|
|
33
|
+
config.filter_run_excluding :data_mapper => SORCERY_ORM.to_sym != :data_mapper
|
|
34
|
+
config.filter_run_excluding :mongoid => SORCERY_ORM.to_sym != :mongoid
|
|
29
35
|
config.mock_with :rspec
|
|
30
36
|
|
|
31
37
|
config.use_transactional_fixtures = true
|
|
32
38
|
|
|
33
|
-
config.before(:suite)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
if defined?(Mongoid)
|
|
39
|
-
Mongoid.purge!
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
config.after(:suite) do
|
|
44
|
-
if SORCERY_ORM.to_sym == :active_record
|
|
45
|
-
ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/core")
|
|
46
|
-
end
|
|
47
|
-
end
|
|
39
|
+
config.before(:suite) { setup_orm }
|
|
40
|
+
config.after(:suite) { teardown_orm }
|
|
41
|
+
config.before(:each) { ActionMailer::Base.deliveries.clear }
|
|
48
42
|
|
|
49
43
|
config.include ::Sorcery::TestHelpers::Internal
|
|
50
44
|
config.include ::Sorcery::TestHelpers::Internal::Rails
|