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.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.travis.yml +122 -5
  4. data/CHANGELOG.md +37 -1
  5. data/Gemfile +10 -18
  6. data/README.md +159 -88
  7. data/gemfiles/active_record-rails40.gemfile +7 -0
  8. data/gemfiles/active_record-rails41.gemfile +7 -0
  9. data/gemfiles/mongo_mapper-rails40.gemfile +9 -0
  10. data/gemfiles/mongo_mapper-rails41.gemfile +9 -0
  11. data/gemfiles/mongoid-rails40.gemfile +9 -0
  12. data/gemfiles/mongoid-rails41.gemfile +9 -0
  13. data/gemfiles/mongoid3-rails32.gemfile +9 -0
  14. data/lib/generators/sorcery/USAGE +1 -1
  15. data/lib/generators/sorcery/install_generator.rb +19 -5
  16. data/lib/generators/sorcery/templates/initializer.rb +34 -9
  17. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -1
  18. data/lib/generators/sorcery/templates/migration/core.rb +2 -2
  19. data/lib/generators/sorcery/templates/migration/external.rb +3 -1
  20. data/lib/sorcery/adapters/active_record_adapter.rb +120 -0
  21. data/lib/sorcery/adapters/base_adapter.rb +30 -0
  22. data/lib/sorcery/adapters/data_mapper_adapter.rb +176 -0
  23. data/lib/sorcery/adapters/mongo_mapper_adapter.rb +110 -0
  24. data/lib/sorcery/adapters/mongoid_adapter.rb +97 -0
  25. data/lib/sorcery/controller/config.rb +65 -0
  26. data/lib/sorcery/controller/submodules/activity_logging.rb +16 -21
  27. data/lib/sorcery/controller/submodules/brute_force_protection.rb +6 -6
  28. data/lib/sorcery/controller/submodules/external.rb +35 -40
  29. data/lib/sorcery/controller/submodules/remember_me.rb +4 -4
  30. data/lib/sorcery/controller/submodules/session_timeout.rb +10 -6
  31. data/lib/sorcery/controller.rb +10 -74
  32. data/lib/sorcery/model/config.rb +96 -0
  33. data/lib/sorcery/model/submodules/activity_logging.rb +30 -13
  34. data/lib/sorcery/model/submodules/brute_force_protection.rb +21 -21
  35. data/lib/sorcery/model/submodules/external.rb +53 -9
  36. data/lib/sorcery/model/submodules/remember_me.rb +15 -19
  37. data/lib/sorcery/model/submodules/reset_password.rb +33 -34
  38. data/lib/sorcery/model/submodules/user_activation.rb +36 -47
  39. data/lib/sorcery/model/temporary_token.rb +4 -4
  40. data/lib/sorcery/model.rb +73 -173
  41. data/lib/sorcery/protocols/oauth.rb +42 -0
  42. data/lib/sorcery/protocols/oauth2.rb +47 -0
  43. data/lib/sorcery/providers/base.rb +38 -0
  44. data/lib/sorcery/providers/facebook.rb +63 -0
  45. data/lib/sorcery/providers/github.rb +51 -0
  46. data/lib/sorcery/providers/google.rb +51 -0
  47. data/lib/sorcery/providers/heroku.rb +57 -0
  48. data/lib/sorcery/providers/jira.rb +77 -0
  49. data/lib/sorcery/providers/linkedin.rb +66 -0
  50. data/lib/sorcery/providers/liveid.rb +53 -0
  51. data/lib/sorcery/providers/salesforce.rb +50 -0
  52. data/lib/sorcery/providers/twitter.rb +59 -0
  53. data/lib/sorcery/providers/vk.rb +63 -0
  54. data/lib/sorcery/providers/xing.rb +64 -0
  55. data/lib/sorcery/test_helpers/internal/rails.rb +14 -3
  56. data/lib/sorcery/test_helpers/internal.rb +7 -3
  57. data/lib/sorcery/test_helpers/rails/controller.rb +21 -0
  58. data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
  59. data/lib/sorcery/version.rb +3 -0
  60. data/lib/sorcery.rb +82 -58
  61. data/sorcery.gemspec +19 -19
  62. data/spec/active_record/user_activation_spec.rb +1 -1
  63. data/spec/active_record/user_activity_logging_spec.rb +10 -1
  64. data/spec/active_record/user_brute_force_protection_spec.rb +1 -1
  65. data/spec/active_record/user_oauth_spec.rb +1 -1
  66. data/spec/active_record/user_remember_me_spec.rb +1 -1
  67. data/spec/active_record/user_reset_password_spec.rb +1 -1
  68. data/spec/active_record/user_spec.rb +7 -8
  69. data/spec/controllers/controller_activity_logging_spec.rb +124 -0
  70. data/spec/controllers/controller_brute_force_protection_spec.rb +43 -0
  71. data/spec/controllers/controller_http_basic_auth_spec.rb +68 -0
  72. data/spec/controllers/controller_oauth2_spec.rb +414 -0
  73. data/spec/controllers/controller_oauth_spec.rb +240 -0
  74. data/spec/controllers/controller_remember_me_spec.rb +117 -0
  75. data/spec/controllers/controller_session_timeout_spec.rb +80 -0
  76. data/spec/controllers/controller_spec.rb +218 -0
  77. data/spec/data_mapper/user_activation_spec.rb +10 -0
  78. data/spec/data_mapper/user_activity_logging_spec.rb +14 -0
  79. data/spec/data_mapper/user_brute_force_protection_spec.rb +9 -0
  80. data/spec/data_mapper/user_oauth_spec.rb +9 -0
  81. data/spec/data_mapper/user_remember_me_spec.rb +8 -0
  82. data/spec/data_mapper/user_reset_password_spec.rb +8 -0
  83. data/spec/data_mapper/user_spec.rb +27 -0
  84. data/spec/mongo_mapper/user_activation_spec.rb +1 -2
  85. data/spec/mongo_mapper/user_activity_logging_spec.rb +1 -1
  86. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +1 -1
  87. data/spec/mongo_mapper/user_oauth_spec.rb +1 -1
  88. data/spec/mongo_mapper/user_remember_me_spec.rb +1 -1
  89. data/spec/mongo_mapper/user_reset_password_spec.rb +1 -1
  90. data/spec/mongo_mapper/user_spec.rb +7 -8
  91. data/spec/mongoid/user_activation_spec.rb +1 -2
  92. data/spec/mongoid/user_activity_logging_spec.rb +1 -2
  93. data/spec/mongoid/user_brute_force_protection_spec.rb +1 -2
  94. data/spec/mongoid/user_oauth_spec.rb +1 -2
  95. data/spec/mongoid/user_remember_me_spec.rb +1 -2
  96. data/spec/mongoid/user_reset_password_spec.rb +1 -2
  97. data/spec/mongoid/user_spec.rb +21 -9
  98. data/spec/orm/active_record.rb +14 -0
  99. data/spec/orm/data_mapper.rb +48 -0
  100. data/spec/orm/mongo_mapper.rb +1 -1
  101. data/spec/orm/mongoid.rb +5 -0
  102. data/spec/rails_app/app/controllers/sorcery_controller.rb +125 -59
  103. data/spec/rails_app/app/data_mapper/authentication.rb +8 -0
  104. data/spec/rails_app/app/data_mapper/user.rb +7 -0
  105. data/spec/rails_app/app/mongo_mapper/user.rb +2 -0
  106. data/spec/rails_app/config/routes.rb +27 -13
  107. data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +2 -2
  108. data/spec/shared_examples/user_activation_shared_examples.rb +108 -91
  109. data/spec/shared_examples/user_activity_logging_shared_examples.rb +83 -15
  110. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +140 -21
  111. data/spec/shared_examples/user_oauth_shared_examples.rb +21 -16
  112. data/spec/shared_examples/user_remember_me_shared_examples.rb +36 -24
  113. data/spec/shared_examples/user_reset_password_shared_examples.rb +138 -117
  114. data/spec/shared_examples/user_shared_examples.rb +297 -150
  115. data/spec/sorcery_crypto_providers_spec.rb +28 -28
  116. data/spec/spec_helper.rb +12 -18
  117. metadata +99 -165
  118. data/Gemfile.rails4 +0 -24
  119. data/VERSION +0 -1
  120. data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -46
  121. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -50
  122. data/lib/sorcery/controller/submodules/external/providers/base.rb +0 -21
  123. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -99
  124. data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -93
  125. data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -92
  126. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -103
  127. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -93
  128. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -94
  129. data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -101
  130. data/lib/sorcery/controller/submodules/external/providers/xing.rb +0 -98
  131. data/lib/sorcery/model/adapters/active_record.rb +0 -49
  132. data/lib/sorcery/model/adapters/mongo_mapper.rb +0 -56
  133. data/lib/sorcery/model/adapters/mongoid.rb +0 -88
  134. data/lib/sorcery/test_helpers/rails.rb +0 -16
  135. data/lib/sorcery/test_helpers.rb +0 -5
  136. data/spec/active_record/controller_activity_logging_spec.rb +0 -140
  137. data/spec/active_record/controller_brute_force_protection_spec.rb +0 -136
  138. data/spec/active_record/controller_http_basic_auth_spec.rb +0 -59
  139. data/spec/active_record/controller_oauth2_spec.rb +0 -417
  140. data/spec/active_record/controller_oauth_spec.rb +0 -212
  141. data/spec/active_record/controller_remember_me_spec.rb +0 -96
  142. data/spec/active_record/controller_session_timeout_spec.rb +0 -55
  143. data/spec/active_record/controller_spec.rb +0 -182
  144. data/spec/active_record/integration_spec.rb +0 -23
  145. data/spec/mongo_mapper/controller_spec.rb +0 -175
  146. data/spec/mongoid/controller_activity_logging_spec.rb +0 -111
  147. data/spec/mongoid/controller_spec.rb +0 -186
  148. data/spec/rails_app/public/404.html +0 -26
  149. data/spec/rails_app/public/422.html +0 -26
  150. data/spec/rails_app/public/500.html +0 -26
  151. data/spec/rails_app/public/favicon.ico +0 -0
  152. data/spec/rails_app/public/images/rails.png +0 -0
  153. data/spec/rails_app/public/javascripts/application.js +0 -2
  154. data/spec/rails_app/public/javascripts/controls.js +0 -965
  155. data/spec/rails_app/public/javascripts/dragdrop.js +0 -974
  156. data/spec/rails_app/public/javascripts/effects.js +0 -1123
  157. data/spec/rails_app/public/javascripts/prototype.js +0 -6001
  158. data/spec/rails_app/public/javascripts/rails.js +0 -175
  159. data/spec/rails_app/public/robots.txt +0 -5
  160. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  161. data/spec/shared_examples/controller_oauth2_shared_examples.rb +0 -56
  162. data/spec/shared_examples/controller_oauth_shared_examples.rb +0 -69
  163. /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('Noam Ben-Ari').should == Digest::MD5.hexdigest('Noam Ben-Ari')
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('Noam Ben-Ari').should == Digest::MD5.hexdigest(Digest::MD5.hexdigest(Digest::MD5.hexdigest('Noam Ben-Ari')))
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?(Digest::MD5.hexdigest('Noam Ben-Ari'), 'Noam Ben-Ari').should be_true
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?(Digest::MD5.hexdigest('Noam Ben-Ari'), 'Some Dude').should be_false
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('Noam Ben-Ari').should == @digest
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('Noam Ben-Ari').should == Digest::SHA1.hexdigest(Digest::SHA1.hexdigest(Digest::SHA1.hexdigest('Noam Ben-Ari')))
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?(@digest, 'Noam Ben-Ari').should be_true
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?(@digest, 'Some Dude').should be_false
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(['password', 'gq18WBnJYNh2arkC1kgH']).should == '894b5bf1643b8d0e1b2eaddb22426be7036dab70'
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('Noam Ben-Ari').should == @digest
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('Noam Ben-Ari').should == Digest::SHA256.hexdigest(Digest::SHA256.hexdigest(Digest::SHA256.hexdigest('Noam Ben-Ari')))
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?(@digest, 'Noam Ben-Ari').should be_true
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?(@digest, 'Some Dude').should be_false
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('Noam Ben-Ari').should == @digest
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('Noam Ben-Ari').should == Digest::SHA512.hexdigest(Digest::SHA512.hexdigest(Digest::SHA512.hexdigest('Noam Ben-Ari')))
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?(@digest, 'Noam Ben-Ari').should be_true
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?(@digest, 'Some Dude').should be_false
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('Noam Ben-Ari').should == @digest
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?(@digest, 'Noam Ben-Ari').should be_true
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?(@digest, 'Some Dude').should be_false
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).should == "Noam Ben-Ari"
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 "should be comparable with original secret" do
169
- BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt('Noam Ben-Ari')).should == 'Noam Ben-Ari'
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('Noam Ben-Ari')).should == 'Noam Ben-Ari'
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?(@digest, 'Noam Ben-Ari').should be_true
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?(@digest, 'Some Dude').should be_false
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?(:stretches).should be_true
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.should == 1
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
- require "rails_app/config/environment"
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, :example_group => { :file_path => /controller(.)*_spec.rb$/ }
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) do
34
- if SORCERY_ORM.to_sym == :active_record
35
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/core")
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