sorcery 0.5.0 → 0.6.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 (98) hide show
  1. data/README.rdoc +9 -1
  2. data/VERSION +1 -1
  3. data/lib/sorcery/controller/adapters/sinatra.rb +35 -28
  4. data/lib/sorcery/controller/submodules/activity_logging.rb +11 -7
  5. data/lib/sorcery/controller/submodules/brute_force_protection.rb +8 -5
  6. data/lib/sorcery/controller/submodules/external.rb +11 -6
  7. data/lib/sorcery/controller/submodules/http_basic_auth.rb +12 -7
  8. data/lib/sorcery/controller/submodules/remember_me.rb +14 -5
  9. data/lib/sorcery/controller/submodules/session_timeout.rb +3 -1
  10. data/lib/sorcery/controller.rb +12 -9
  11. data/lib/sorcery/crypto_providers/aes256.rb +8 -5
  12. data/lib/sorcery/crypto_providers/bcrypt.rb +12 -6
  13. data/lib/sorcery/crypto_providers/sha256.rb +2 -1
  14. data/lib/sorcery/crypto_providers/sha512.rb +2 -1
  15. data/lib/sorcery/engine.rb +0 -7
  16. data/lib/sorcery/initializers/initializer.rb +127 -36
  17. data/lib/sorcery/model/adapters/active_record.rb +2 -2
  18. data/lib/sorcery/model/adapters/mongoid.rb +12 -7
  19. data/lib/sorcery/model/submodules/activity_logging.rb +7 -6
  20. data/lib/sorcery/model/submodules/brute_force_protection.rb +10 -6
  21. data/lib/sorcery/model/submodules/external.rb +4 -2
  22. data/lib/sorcery/model/submodules/remember_me.rb +4 -3
  23. data/lib/sorcery/model/submodules/reset_password.rb +21 -11
  24. data/lib/sorcery/model/submodules/user_activation.rb +23 -10
  25. data/lib/sorcery/model/temporary_token.rb +3 -2
  26. data/lib/sorcery/model.rb +60 -29
  27. data/lib/sorcery/test_helpers/internal/rails.rb +6 -1
  28. data/lib/sorcery/test_helpers/internal/sinatra.rb +3 -3
  29. data/lib/sorcery/test_helpers/internal/sinatra_modular.rb +74 -0
  30. data/lib/sorcery/test_helpers/internal.rb +2 -1
  31. data/lib/sorcery.rb +3 -5
  32. data/sorcery.gemspec +72 -2
  33. data/spec/Gemfile.lock +1 -4
  34. data/spec/rails3/Gemfile.lock +1 -4
  35. data/spec/rails3/spec/controller_oauth2_spec.rb +3 -24
  36. data/spec/rails3/spec/controller_oauth_spec.rb +3 -24
  37. data/spec/rails3/spec/controller_spec.rb +2 -2
  38. data/spec/rails3/spec/user_activation_spec.rb +2 -168
  39. data/spec/rails3/spec/user_activity_logging_spec.rb +2 -30
  40. data/spec/rails3/spec/user_brute_force_protection_spec.rb +2 -35
  41. data/spec/rails3/spec/user_oauth_spec.rb +2 -26
  42. data/spec/rails3/spec/user_remember_me_spec.rb +2 -45
  43. data/spec/rails3/spec/user_reset_password_spec.rb +3 -168
  44. data/spec/rails3/spec/user_spec.rb +3 -293
  45. data/spec/rails3_mongoid/Gemfile.lock +1 -4
  46. data/spec/rails3_mongoid/app/models/authentication.rb +3 -3
  47. data/spec/rails3_mongoid/spec/user_activation_spec.rb +2 -171
  48. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +2 -25
  49. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +2 -35
  50. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +2 -28
  51. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +2 -45
  52. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +2 -168
  53. data/spec/rails3_mongoid/spec/user_spec.rb +3 -295
  54. data/spec/shared_examples/controller_oauth2_shared_examples.rb +37 -0
  55. data/spec/shared_examples/controller_oauth_shared_examples.rb +37 -0
  56. data/spec/shared_examples/user_activation_shared_examples.rb +173 -0
  57. data/spec/shared_examples/user_activity_logging_shared_examples.rb +27 -0
  58. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +37 -0
  59. data/spec/shared_examples/user_oauth_shared_examples.rb +31 -0
  60. data/spec/shared_examples/user_remember_me_shared_examples.rb +47 -0
  61. data/spec/shared_examples/user_reset_password_shared_examples.rb +177 -0
  62. data/spec/shared_examples/user_shared_examples.rb +292 -0
  63. data/spec/sinatra/Gemfile +3 -0
  64. data/spec/sinatra/Gemfile.lock +17 -34
  65. data/spec/sinatra/Rakefile +1 -1
  66. data/spec/sinatra/filters.rb +20 -14
  67. data/spec/sinatra/modular.rb +157 -0
  68. data/spec/sinatra/spec/controller_oauth2_spec.rb +3 -24
  69. data/spec/sinatra/spec/controller_oauth_spec.rb +3 -24
  70. data/spec/sinatra/spec/controller_spec.rb +2 -2
  71. data/spec/sinatra_modular/Gemfile +15 -0
  72. data/spec/sinatra_modular/Gemfile.lock +117 -0
  73. data/spec/sinatra_modular/Rakefile +11 -0
  74. data/spec/sinatra_modular/authentication.rb +3 -0
  75. data/spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb +17 -0
  76. data/spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +17 -0
  77. data/spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +11 -0
  78. data/spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb +16 -0
  79. data/spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb +14 -0
  80. data/spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +15 -0
  81. data/spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +13 -0
  82. data/spec/sinatra_modular/filters.rb +27 -0
  83. data/spec/sinatra_modular/modular.rb +157 -0
  84. data/spec/sinatra_modular/myapp.rb +133 -0
  85. data/spec/sinatra_modular/sorcery_mailer.rb +25 -0
  86. data/spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb +85 -0
  87. data/spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb +70 -0
  88. data/spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb +53 -0
  89. data/spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb +99 -0
  90. data/spec/sinatra_modular/spec_modular/controller_oauth_spec.rb +100 -0
  91. data/spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb +64 -0
  92. data/spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb +57 -0
  93. data/spec/sinatra_modular/spec_modular/controller_spec.rb +116 -0
  94. data/spec/sinatra_modular/spec_modular/spec.opts +2 -0
  95. data/spec/sinatra_modular/spec_modular/spec_helper.rb +51 -0
  96. data/spec/sinatra_modular/user.rb +6 -0
  97. data/spec/sinatra_modular/views/test_login.erb +4 -0
  98. metadata +72 -2
data/lib/sorcery/model.rb CHANGED
@@ -3,7 +3,8 @@ module Sorcery
3
3
  # It should be included into the ORM base class.
4
4
  # In the case of Rails this is usually ActiveRecord (actually, in that case, the plugin does this automatically).
5
5
  #
6
- # When included it defines a single method: 'activate_sorcery!' which when called adds the other capabilities to the class.
6
+ # When included it defines a single method: 'activate_sorcery!' which when called adds the other capabilities
7
+ # to the class.
7
8
  # This method is also the place to configure the plugin in the Model layer.
8
9
  module Model
9
10
  def self.included(klass)
@@ -14,40 +15,58 @@ module Sorcery
14
15
  self.class_eval do
15
16
  extend ClassMethods # included here, before submodules, so they can be overriden by them.
16
17
  include InstanceMethods
17
-
18
- # set the user_class for the controller methods which call it
19
- ::Sorcery::Controller::Config.user_class = self
18
+ end
19
+
20
+ include_required_submodules!
21
+
22
+ # This runs the options block set in the initializer on the model class.
23
+ ::Sorcery::Controller::Config.user_config.tap{|blk| blk.call(@sorcery_config) if blk}
24
+
25
+ init_mongoid_support! if defined?(Mongoid) and self.ancestors.include?(Mongoid::Document)
26
+
27
+ init_orm_hooks!
28
+
29
+ @sorcery_config.after_config << :add_config_inheritance if @sorcery_config.subclasses_inherit_config
30
+ @sorcery_config.after_config.each { |c| send(c) }
31
+ end
32
+
33
+ protected
34
+
35
+ # includes required submodules into the model class,
36
+ # which usually is called User.
37
+ def include_required_submodules!
38
+ self.class_eval do
20
39
  @sorcery_config.submodules = ::Sorcery::Controller::Config.submodules
21
40
  @sorcery_config.submodules.each do |mod|
22
41
  begin
23
42
  include Submodules.const_get(mod.to_s.split("_").map {|p| p.capitalize}.join(""))
24
43
  rescue NameError
25
- # don't stop on a missing submodule. Needed because some submodules are only defined in the controller side.
44
+ # don't stop on a missing submodule. Needed because some submodules are only defined
45
+ # in the controller side.
26
46
  end
27
47
  end
28
48
  end
29
-
30
- # This runs the options block set in the initializer on the model class.
31
- ::Sorcery::Controller::Config.user_config.tap{|blk| blk.call(@sorcery_config) if blk}
32
-
49
+ end
50
+
51
+ # defines mongoid fields on the model class,
52
+ # using 1.8.x hash syntax to perserve compatibility.
53
+ def init_mongoid_support!
33
54
  self.class_eval do
34
- field sorcery_config.username_attribute_name, type: String
35
- field sorcery_config.password_attribute_name, type: String
36
- field sorcery_config.email_attribute_name, type: String unless sorcery_config.username_attribute_name == sorcery_config.email_attribute_name
37
- field sorcery_config.crypted_password_attribute_name, type: String
38
- field sorcery_config.salt_attribute_name, type: String
39
- end if defined?(Mongoid) and self.ancestors.include?(Mongoid::Document)
40
-
41
- # add virtual password accessor and ORM callbacks
55
+ field sorcery_config.username_attribute_name, :type => String
56
+ field sorcery_config.email_attribute_name, :type => String unless sorcery_config.username_attribute_name == sorcery_config.email_attribute_name
57
+ field sorcery_config.crypted_password_attribute_name, :type => String
58
+ field sorcery_config.salt_attribute_name, :type => String
59
+ end
60
+ end
61
+
62
+ # add virtual password accessor and ORM callbacks.
63
+ def init_orm_hooks!
42
64
  self.class_eval do
43
65
  attr_accessor @sorcery_config.password_attribute_name
44
66
  attr_protected @sorcery_config.crypted_password_attribute_name, @sorcery_config.salt_attribute_name
45
67
  before_save :encrypt_password, :if => Proc.new { |record| record.send(sorcery_config.password_attribute_name).present? }
46
68
  after_save :clear_virtual_password, :if => Proc.new { |record| record.send(sorcery_config.password_attribute_name).present? }
47
69
  end
48
-
49
- @sorcery_config.after_config << :add_config_inheritance if @sorcery_config.subclasses_inherit_config
50
- @sorcery_config.after_config.each { |c| send(c) }
51
70
  end
52
71
  end
53
72
  end
@@ -122,7 +141,7 @@ module Sorcery
122
141
  # encrypts password with salt and saves it.
123
142
  def encrypt_password
124
143
  config = sorcery_config
125
- new_salt = self.send(:"#{config.salt_attribute_name}=", generate_random_token) if !config.salt_attribute_name.nil?
144
+ self.send(:"#{config.salt_attribute_name}=", new_salt = generate_random_token) if !config.salt_attribute_name.nil?
126
145
  self.send(:"#{config.crypted_password_attribute_name}=", self.class.encrypt(self.send(config.password_attribute_name),new_salt))
127
146
  end
128
147
 
@@ -148,26 +167,38 @@ module Sorcery
148
167
  end
149
168
 
150
169
  # Each class which calls 'activate_sorcery!' receives an instance of this class.
151
- # Every submodule which gets loaded may add accessors to this class so that all options will be configured from a single place.
170
+ # Every submodule which gets loaded may add accessors to this class so that all
171
+ # options will be configured from a single place.
152
172
  class Config
153
173
 
154
- attr_accessor :username_attribute_name, # change default username attribute, for example, to use :email as the login.
155
- :password_attribute_name, # change *virtual* password attribute, the one which is used until an encrypted one is generated.
174
+ attr_accessor :username_attribute_name, # change default username attribute, for example, to use :email
175
+ # as the login.
176
+
177
+ :password_attribute_name, # change *virtual* password attribute, the one which is used
178
+ # until an encrypted one is generated.
179
+
156
180
  :email_attribute_name, # change default email attribute.
157
181
  :crypted_password_attribute_name, # change default crypted_password attribute.
158
182
  :salt_join_token, # what pattern to use to join the password with the salt
159
183
  :salt_attribute_name, # change default salt attribute.
160
184
  :stretches, # how many times to apply encryption to the password.
161
- :encryption_key, # encryption key used to encrypt reversible encryptions such as AES256.
162
- :subclasses_inherit_config, # make this configuration inheritable for subclasses. Useful for ActiveRecord's STI.
185
+ :encryption_key, # encryption key used to encrypt reversible encryptions such as
186
+ # AES256.
187
+
188
+ :subclasses_inherit_config, # make this configuration inheritable for subclasses. Useful for
189
+ # ActiveRecord's STI.
163
190
 
164
191
  :submodules, # configured in config/application.rb
165
- :before_authenticate, # an array of method names to call before authentication completes. used internally.
166
- :after_config # an array of method names to call after configuration by user. used internally.
192
+ :before_authenticate, # an array of method names to call before authentication
193
+ # completes. used internally.
194
+
195
+ :after_config # an array of method names to call after configuration by user.
196
+ # used internally.
167
197
 
168
198
  attr_reader :encryption_provider, # change default encryption_provider.
169
199
  :custom_encryption_provider, # use an external encryption class.
170
- :encryption_algorithm # encryption algorithm name. See 'encryption_algorithm=' below for available options.
200
+ :encryption_algorithm # encryption algorithm name. See 'encryption_algorithm=' below
201
+ # for available options.
171
202
 
172
203
  def initialize
173
204
  @defaults = {
@@ -4,7 +4,11 @@ module Sorcery
4
4
  module Rails
5
5
  include ::Sorcery::TestHelpers::Rails
6
6
 
7
- SUBMODUELS_AUTO_ADDED_CONTROLLER_FILTERS = [:register_last_activity_time_to_db, :deny_banned_user, :validate_session]
7
+ SUBMODUELS_AUTO_ADDED_CONTROLLER_FILTERS = [
8
+ :register_last_activity_time_to_db,
9
+ :deny_banned_user,
10
+ :validate_session
11
+ ]
8
12
 
9
13
  def sorcery_reload!(submodules = [], options = {})
10
14
  reload_user_class
@@ -22,6 +26,7 @@ module Sorcery
22
26
  ::Sorcery::Controller::Config.submodules = submodules
23
27
  ::Sorcery::Controller::Config.user_class = nil
24
28
  ActionController::Base.send(:include,::Sorcery::Controller)
29
+ ::Sorcery::Controller::Config.user_class = "User"
25
30
 
26
31
  ::Sorcery::Controller::Config.user_config do |user|
27
32
  options.each do |property,value|
@@ -43,15 +43,15 @@ module Sorcery
43
43
 
44
44
  # clear all filters
45
45
  ::Sinatra::Application.instance_variable_set(:@filters, {:before => [], :after => []})
46
- ::Sinatra::Application.class_eval do
47
- load File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec', 'sinatra', 'filters.rb')
48
- end
46
+ load File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec', 'sinatra', 'filters.rb')
47
+ ::Sinatra::Application.send(:include, ::Filters)
49
48
 
50
49
  # configure
51
50
  ::Sorcery::Controller::Config.submodules = submodules
52
51
  ::Sorcery::Controller::Config.user_class = nil
53
52
  ::Sinatra::Application.send(:include, Sorcery::Controller::Adapters::Sinatra)
54
53
  ::Sinatra::Application.send(:include, Sorcery::Controller)
54
+ ::Sorcery::Controller::Config.user_class = "User"
55
55
 
56
56
  ::Sorcery::Controller::Config.user_config do |user|
57
57
  options.each do |property, value|
@@ -0,0 +1,74 @@
1
+ module Sorcery
2
+ module TestHelpers
3
+ module Internal
4
+ module SinatraModular
5
+ include ::Sorcery::TestHelpers::Sinatra::CookieSessionMethods
6
+ include ::Sorcery::TestHelpers::Sinatra::InstanceMethods
7
+
8
+ class ::Modular
9
+ class << self
10
+ attr_accessor :sorcery_vars
11
+ end
12
+ @sorcery_vars = {}
13
+
14
+ # NOTE: see before and after test filters in filters.rb
15
+
16
+ def save_instance_vars
17
+ instance_variables.each do |var|
18
+ self.class.sorcery_vars[:"#{var.to_s.delete("@")}"] = instance_variable_get(var)
19
+ end
20
+ end
21
+ end
22
+
23
+ ::RSpec::Matchers.define :redirect_to do |expected|
24
+ match do |actual|
25
+ actual.status == 302 && actual.location == expected
26
+ end
27
+ end
28
+
29
+ def clear_user_without_logout
30
+ get_sinatra_app(subject).instance_variable_set(:@current_user, nil)
31
+ end
32
+
33
+ def assigns
34
+ ::Modular.sorcery_vars
35
+ end
36
+
37
+ def sorcery_reload!(submodules = [], options = {})
38
+ reload_user_class
39
+
40
+ # return to no-module configuration
41
+ ::Sorcery::Controller::Config.init!
42
+ ::Sorcery::Controller::Config.reset!
43
+
44
+ # clear all filters
45
+ ::Sinatra::Base.instance_variable_set(:@filters, {:before => [], :after => []})
46
+ require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec', 'sinatra', 'filters')
47
+ ::Sinatra::Base.send(:include, ::Filters)
48
+
49
+ # configure
50
+ ::Sorcery::Controller::Config.submodules = submodules
51
+ ::Sorcery::Controller::Config.user_class = nil
52
+ ::Sinatra::Base.send(:include, Sorcery::Controller::Adapters::Sinatra)
53
+ ::Sinatra::Base.send(:include, Sorcery::Controller)
54
+ ::Sorcery::Controller::Config.user_class = "User"
55
+
56
+ ::Sorcery::Controller::Config.user_config do |user|
57
+ options.each do |property, value|
58
+ user.send(:"#{property}=", value)
59
+ end
60
+ end
61
+ User.authenticates_with_sorcery!
62
+ end
63
+
64
+ def sorcery_controller_property_set(property, value)
65
+ ::Sorcery::Controller::Config.send(:"#{property}=", value)
66
+ end
67
+
68
+ def sorcery_controller_external_property_set(provider, property, value)
69
+ ::Sorcery::Controller::Config.send(provider).send(:"#{property}=", value)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -15,7 +15,8 @@ module Sorcery
15
15
  end
16
16
 
17
17
  # a patch to fix a bug in testing that happens when you 'destroy' a session twice.
18
- # After the first destroy, the session is an ordinary hash, and then when destroy is called again there's an exception.
18
+ # After the first destroy, the session is an ordinary hash, and then when destroy
19
+ # is called again there's an exception.
19
20
  class ::Hash
20
21
  def destroy
21
22
  clear
data/lib/sorcery.rb CHANGED
@@ -56,28 +56,26 @@ module Sorcery
56
56
  module Internal
57
57
  autoload :Rails, 'sorcery/test_helpers/internal/rails'
58
58
  autoload :Sinatra, 'sorcery/test_helpers/internal/sinatra'
59
+ autoload :SinatraModular, 'sorcery/test_helpers/internal/sinatra_modular'
59
60
  end
60
61
 
61
62
  end
62
63
 
63
64
  if defined?(ActiveRecord)
64
65
  ActiveRecord::Base.send(:include, Sorcery::Model)
65
- ActiveRecord::Base.send(:include, ::Sorcery::Model::Adapters::ActiveRecord)
66
+ ActiveRecord::Base.send(:include, Sorcery::Model::Adapters::ActiveRecord)
66
67
  end
67
68
 
68
69
  if defined?(Mongoid)
69
70
  Mongoid::Document.module_eval do
70
71
  included do
71
72
  attr_reader :new_record
72
- include Sorcery::Model::Adapters::Mongoid
73
73
  include Sorcery::Model
74
+ include Sorcery::Model::Adapters::Mongoid
74
75
  end
75
76
  end
76
77
  end
77
78
 
78
79
  require 'sorcery/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
79
80
  require 'sorcery/sinatra' if defined?(Sinatra)
80
-
81
-
82
-
83
81
  end
data/sorcery.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sorcery}
8
- s.version = "0.5.0"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Noam Ben Ari"]
12
- s.date = %q{2011-05-10}
12
+ s.date = %q{2011-07-30}
13
13
  s.description = %q{Provides common authentication needs such as signing in/out, activating by email and resetting password.}
14
14
  s.email = %q{nbenari@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -71,6 +71,7 @@ Gem::Specification.new do |s|
71
71
  "lib/sorcery/test_helpers/internal.rb",
72
72
  "lib/sorcery/test_helpers/internal/rails.rb",
73
73
  "lib/sorcery/test_helpers/internal/sinatra.rb",
74
+ "lib/sorcery/test_helpers/internal/sinatra_modular.rb",
74
75
  "lib/sorcery/test_helpers/rails.rb",
75
76
  "lib/sorcery/test_helpers/sinatra.rb",
76
77
  "sorcery.gemspec",
@@ -217,6 +218,15 @@ Gem::Specification.new do |s|
217
218
  "spec/rails3_mongoid/spec/user_reset_password_spec.rb",
218
219
  "spec/rails3_mongoid/spec/user_spec.rb",
219
220
  "spec/rails3_mongoid/vendor/plugins/.gitkeep",
221
+ "spec/shared_examples/controller_oauth2_shared_examples.rb",
222
+ "spec/shared_examples/controller_oauth_shared_examples.rb",
223
+ "spec/shared_examples/user_activation_shared_examples.rb",
224
+ "spec/shared_examples/user_activity_logging_shared_examples.rb",
225
+ "spec/shared_examples/user_brute_force_protection_shared_examples.rb",
226
+ "spec/shared_examples/user_oauth_shared_examples.rb",
227
+ "spec/shared_examples/user_remember_me_shared_examples.rb",
228
+ "spec/shared_examples/user_reset_password_shared_examples.rb",
229
+ "spec/shared_examples/user_shared_examples.rb",
220
230
  "spec/sinatra/Gemfile",
221
231
  "spec/sinatra/Gemfile.lock",
222
232
  "spec/sinatra/Rakefile",
@@ -229,6 +239,7 @@ Gem::Specification.new do |s|
229
239
  "spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb",
230
240
  "spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb",
231
241
  "spec/sinatra/filters.rb",
242
+ "spec/sinatra/modular.rb",
232
243
  "spec/sinatra/myapp.rb",
233
244
  "spec/sinatra/sorcery_mailer.rb",
234
245
  "spec/sinatra/spec/controller_activity_logging_spec.rb",
@@ -243,6 +254,33 @@ Gem::Specification.new do |s|
243
254
  "spec/sinatra/spec/spec_helper.rb",
244
255
  "spec/sinatra/user.rb",
245
256
  "spec/sinatra/views/test_login.erb",
257
+ "spec/sinatra_modular/Gemfile",
258
+ "spec/sinatra_modular/Gemfile.lock",
259
+ "spec/sinatra_modular/Rakefile",
260
+ "spec/sinatra_modular/authentication.rb",
261
+ "spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb",
262
+ "spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb",
263
+ "spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb",
264
+ "spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb",
265
+ "spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb",
266
+ "spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb",
267
+ "spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb",
268
+ "spec/sinatra_modular/filters.rb",
269
+ "spec/sinatra_modular/modular.rb",
270
+ "spec/sinatra_modular/myapp.rb",
271
+ "spec/sinatra_modular/sorcery_mailer.rb",
272
+ "spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb",
273
+ "spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb",
274
+ "spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb",
275
+ "spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb",
276
+ "spec/sinatra_modular/spec_modular/controller_oauth_spec.rb",
277
+ "spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb",
278
+ "spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb",
279
+ "spec/sinatra_modular/spec_modular/controller_spec.rb",
280
+ "spec/sinatra_modular/spec_modular/spec.opts",
281
+ "spec/sinatra_modular/spec_modular/spec_helper.rb",
282
+ "spec/sinatra_modular/user.rb",
283
+ "spec/sinatra_modular/views/test_login.erb",
246
284
  "spec/sorcery_crypto_providers_spec.rb",
247
285
  "spec/spec.opts",
248
286
  "spec/spec_helper.rb"
@@ -326,6 +364,15 @@ Gem::Specification.new do |s|
326
364
  "spec/rails3_mongoid/spec/user_remember_me_spec.rb",
327
365
  "spec/rails3_mongoid/spec/user_reset_password_spec.rb",
328
366
  "spec/rails3_mongoid/spec/user_spec.rb",
367
+ "spec/shared_examples/controller_oauth2_shared_examples.rb",
368
+ "spec/shared_examples/controller_oauth_shared_examples.rb",
369
+ "spec/shared_examples/user_activation_shared_examples.rb",
370
+ "spec/shared_examples/user_activity_logging_shared_examples.rb",
371
+ "spec/shared_examples/user_brute_force_protection_shared_examples.rb",
372
+ "spec/shared_examples/user_oauth_shared_examples.rb",
373
+ "spec/shared_examples/user_remember_me_shared_examples.rb",
374
+ "spec/shared_examples/user_reset_password_shared_examples.rb",
375
+ "spec/shared_examples/user_shared_examples.rb",
329
376
  "spec/sinatra/authentication.rb",
330
377
  "spec/sinatra/db/migrate/activation/20101224223622_add_activation_to_users.rb",
331
378
  "spec/sinatra/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb",
@@ -335,6 +382,7 @@ Gem::Specification.new do |s|
335
382
  "spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb",
336
383
  "spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb",
337
384
  "spec/sinatra/filters.rb",
385
+ "spec/sinatra/modular.rb",
338
386
  "spec/sinatra/myapp.rb",
339
387
  "spec/sinatra/sorcery_mailer.rb",
340
388
  "spec/sinatra/spec/controller_activity_logging_spec.rb",
@@ -347,6 +395,28 @@ Gem::Specification.new do |s|
347
395
  "spec/sinatra/spec/controller_spec.rb",
348
396
  "spec/sinatra/spec/spec_helper.rb",
349
397
  "spec/sinatra/user.rb",
398
+ "spec/sinatra_modular/authentication.rb",
399
+ "spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb",
400
+ "spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb",
401
+ "spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb",
402
+ "spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb",
403
+ "spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb",
404
+ "spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb",
405
+ "spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb",
406
+ "spec/sinatra_modular/filters.rb",
407
+ "spec/sinatra_modular/modular.rb",
408
+ "spec/sinatra_modular/myapp.rb",
409
+ "spec/sinatra_modular/sorcery_mailer.rb",
410
+ "spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb",
411
+ "spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb",
412
+ "spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb",
413
+ "spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb",
414
+ "spec/sinatra_modular/spec_modular/controller_oauth_spec.rb",
415
+ "spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb",
416
+ "spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb",
417
+ "spec/sinatra_modular/spec_modular/controller_spec.rb",
418
+ "spec/sinatra_modular/spec_modular/spec_helper.rb",
419
+ "spec/sinatra_modular/user.rb",
350
420
  "spec/sorcery_crypto_providers_spec.rb",
351
421
  "spec/spec_helper.rb"
352
422
  ]
data/spec/Gemfile.lock CHANGED
@@ -1,14 +1,12 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- sorcery (0.5.0)
4
+ sorcery (0.5.30)
5
5
  bcrypt-ruby (~> 2.1.4)
6
- json (>= 1.5.1)
7
6
  oauth (>= 0.4.4)
8
7
  oauth (>= 0.4.4)
9
8
  oauth2 (>= 0.1.1)
10
9
  oauth2 (>= 0.1.1)
11
- rails (>= 3.0.0)
12
10
 
13
11
  GEM
14
12
  remote: http://rubygems.org/
@@ -54,7 +52,6 @@ GEM
54
52
  multipart-post (~> 1.1.0)
55
53
  rack (< 2, >= 1.1.0)
56
54
  i18n (0.5.0)
57
- json (1.5.1)
58
55
  linecache19 (0.5.11)
59
56
  ruby_core_source (>= 0.1.4)
60
57
  mail (2.2.13)
@@ -2,14 +2,12 @@ PATH
2
2
  remote: ../../../
3
3
  specs:
4
4
  oauth (0.4.4)
5
- sorcery (0.5.0)
5
+ sorcery (0.5.30)
6
6
  bcrypt-ruby (~> 2.1.4)
7
- json (>= 1.5.1)
8
7
  oauth (>= 0.4.4)
9
8
  oauth (>= 0.4.4)
10
9
  oauth2 (>= 0.1.1)
11
10
  oauth2 (>= 0.1.1)
12
- rails (>= 3.0.0)
13
11
 
14
12
  GEM
15
13
  remote: http://rubygems.org/
@@ -55,7 +53,6 @@ GEM
55
53
  multipart-post (~> 1.1.0)
56
54
  rack (< 2, >= 1.1.0)
57
55
  i18n (0.5.0)
58
- json (1.5.1)
59
56
  linecache19 (0.5.11)
60
57
  ruby_core_source (>= 0.1.4)
61
58
  mail (2.2.13)
@@ -1,4 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/controller_oauth2_shared_examples')
2
3
 
3
4
  def stub_all_oauth2_requests!
4
5
  @client = OAuth2::Client.new("key","secret", :site => "http://myapi.com")
@@ -58,30 +59,8 @@ describe ApplicationController do
58
59
  end
59
60
  end
60
61
 
61
- describe ApplicationController, "'create_from'" do
62
- before(:each) do
63
- stub_all_oauth2_requests!
64
- User.delete_all
65
- Authentication.delete_all
66
- end
67
-
68
- it "should create a new user" do
69
- sorcery_model_property_set(:authentications_class, Authentication)
70
- sorcery_controller_external_property_set(:facebook, :user_info_mapping, {:username => "name"})
71
- lambda do
72
- get :test_create_from_provider, :provider => "facebook"
73
- end.should change(User, :count).by(1)
74
- User.first.username.should == "Noam Ben Ari"
75
- end
76
-
77
- it "should support nested attributes" do
78
- sorcery_model_property_set(:authentications_class, Authentication)
79
- sorcery_controller_external_property_set(:facebook, :user_info_mapping, {:username => "hometown/name"})
80
- lambda do
81
- get :test_create_from_provider, :provider => "facebook"
82
- end.should change(User, :count).by(1)
83
- User.first.username.should == "Haifa, Israel"
84
- end
62
+ describe ApplicationController do
63
+ it_behaves_like "oauth2_controller"
85
64
  end
86
65
 
87
66
  describe ApplicationController, "OAuth with User Activation features" do
@@ -1,4 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../../shared_examples/controller_oauth_shared_examples')
2
3
  require 'ostruct'
3
4
 
4
5
  def stub_all_oauth_requests!
@@ -64,30 +65,8 @@ describe ApplicationController do
64
65
  end
65
66
  end
66
67
 
67
- describe ApplicationController, "using 'create_from'" do
68
- before(:each) do
69
- stub_all_oauth_requests!
70
- User.delete_all
71
- Authentication.delete_all
72
- end
73
-
74
- it "should create a new user" do
75
- sorcery_model_property_set(:authentications_class, Authentication)
76
- sorcery_controller_external_property_set(:twitter, :user_info_mapping, {:username => "screen_name"})
77
- lambda do
78
- get :test_create_from_provider, :provider => "twitter"
79
- end.should change(User, :count).by(1)
80
- User.first.username.should == "nbenari"
81
- end
82
-
83
- it "should support nested attributes" do
84
- sorcery_model_property_set(:authentications_class, Authentication)
85
- sorcery_controller_external_property_set(:twitter, :user_info_mapping, {:username => "status/text"})
86
- lambda do
87
- get :test_create_from_provider, :provider => "twitter"
88
- end.should change(User, :count).by(1)
89
- User.first.username.should == "coming soon to sorcery gem: twitter and facebook authentication support."
90
- end
68
+ describe ApplicationController do
69
+ it_behaves_like "oauth_controller"
91
70
  end
92
71
 
93
72
  describe ApplicationController, "using OAuth with User Activation features" do
@@ -14,8 +14,8 @@ describe ApplicationController do
14
14
  end
15
15
 
16
16
  it "should enable configuration option 'user_class'" do
17
- sorcery_controller_property_set(:user_class, TestUser)
18
- Sorcery::Controller::Config.user_class.should equal(TestUser)
17
+ sorcery_controller_property_set(:user_class, "TestUser")
18
+ Sorcery::Controller::Config.user_class.should == "TestUser"
19
19
  end
20
20
 
21
21
  it "should enable configuration option 'not_authenticated_action'" do