challah 1.1.1 → 1.2.0.rc

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -1
  3. data/README.md +3 -3
  4. data/app/models/authorization.rb +2 -2
  5. data/app/models/user.rb +2 -2
  6. data/lib/challah.rb +60 -53
  7. data/lib/challah/active_record_extensions.rb +23 -0
  8. data/lib/challah/{authorization.rb → concerns/authorizeable.rb} +14 -19
  9. data/lib/challah/concerns/user/attributeable.rb +73 -0
  10. data/lib/challah/{user/authentication.rb → concerns/user/authenticateable.rb} +2 -2
  11. data/lib/challah/concerns/user/authorizable.rb +32 -0
  12. data/lib/challah/concerns/user/findable.rb +45 -0
  13. data/lib/challah/{user/password.rb → concerns/user/passwordable.rb} +2 -2
  14. data/lib/challah/{user/providers.rb → concerns/user/provideable.rb} +46 -6
  15. data/lib/challah/concerns/user/validateable.rb +21 -0
  16. data/lib/challah/concerns/userable.rb +20 -0
  17. data/lib/challah/engine.rb +1 -2
  18. data/lib/challah/test.rb +52 -32
  19. data/lib/challah/version.rb +1 -1
  20. metadata +14 -76
  21. data/lib/challah/user.rb +0 -128
  22. data/lib/challah/user/attributes.rb +0 -28
  23. data/lib/challah/user/finders.rb +0 -31
  24. data/lib/challah/user/reflector.rb +0 -15
  25. data/test/controllers/controller_test.rb +0 -34
  26. data/test/controllers/restrictions_controller_test.rb +0 -95
  27. data/test/controllers/sessions_controller_test.rb +0 -42
  28. data/test/dummy/README.rdoc +0 -28
  29. data/test/dummy/Rakefile +0 -6
  30. data/test/dummy/app/assets/javascripts/application.js +0 -13
  31. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  32. data/test/dummy/app/controllers/application_controller.rb +0 -5
  33. data/test/dummy/app/controllers/restrictions_controller.rb +0 -25
  34. data/test/dummy/app/helpers/application_helper.rb +0 -2
  35. data/test/dummy/app/models/user.rb +0 -15
  36. data/test/dummy/app/models/widget.rb +0 -3
  37. data/test/dummy/app/views/bakery/templates/layouts/sample.erb +0 -1
  38. data/test/dummy/app/views/bakery/templates/partials/sample.html.haml +0 -1
  39. data/test/dummy/app/views/bakery/templates/themes/sample.haml +0 -1
  40. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  41. data/test/dummy/config.ru +0 -4
  42. data/test/dummy/config/application.rb +0 -24
  43. data/test/dummy/config/boot.rb +0 -5
  44. data/test/dummy/config/database.yml +0 -30
  45. data/test/dummy/config/environment.rb +0 -5
  46. data/test/dummy/config/environments/development.rb +0 -29
  47. data/test/dummy/config/environments/production.rb +0 -80
  48. data/test/dummy/config/environments/test.rb +0 -36
  49. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  50. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  51. data/test/dummy/config/initializers/i18n.rb +0 -1
  52. data/test/dummy/config/initializers/inflections.rb +0 -16
  53. data/test/dummy/config/initializers/mime_types.rb +0 -5
  54. data/test/dummy/config/initializers/secret_token.rb +0 -12
  55. data/test/dummy/config/initializers/session_store.rb +0 -3
  56. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  57. data/test/dummy/config/locales/en.yml +0 -23
  58. data/test/dummy/config/routes.rb +0 -5
  59. data/test/dummy/db/migrate/20140114212939_create_widgets.rb +0 -32
  60. data/test/dummy/db/migrate/20140307205735_create_users.challah_engine.rb +0 -34
  61. data/test/dummy/db/migrate/20140307205736_create_authorizations.challah_engine.rb +0 -21
  62. data/test/dummy/db/schema.rb +0 -81
  63. data/test/dummy/db/test.sqlite3 +0 -0
  64. data/test/dummy/log/test.log +0 -11547
  65. data/test/dummy/public/404.html +0 -58
  66. data/test/dummy/public/422.html +0 -58
  67. data/test/dummy/public/500.html +0 -57
  68. data/test/dummy/public/favicon.ico +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  73. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  74. data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  75. data/test/factories.rb +0 -8
  76. data/test/models/authorization_test.rb +0 -20
  77. data/test/models/user_test.rb +0 -345
  78. data/test/services/audit_test.rb +0 -107
  79. data/test/services/cookie_store_test.rb +0 -97
  80. data/test/services/encrypter_test.rb +0 -73
  81. data/test/services/plugins_test.rb +0 -65
  82. data/test/services/random_test.rb +0 -22
  83. data/test/services/routes_test.rb +0 -11
  84. data/test/services/session_test.rb +0 -197
  85. data/test/services/signup_test.rb +0 -122
  86. data/test/services/simple_cookie_store_test.rb +0 -122
  87. data/test/support/stubs.rb +0 -88
  88. data/test/test_helper.rb +0 -47
@@ -0,0 +1,21 @@
1
+ module Challah
2
+ module UserValidateable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ email_validation_hash = {
7
+ presence: true,
8
+ uniqueness: true
9
+ }
10
+
11
+ email_validator_key = Challah.options[:email_validator].to_s.underscore
12
+ email_validation_hash[email_validator_key] = true
13
+
14
+ validates :email, email_validation_hash
15
+ validates :first_name, presence: true
16
+ validates :last_name, presence: true
17
+
18
+ validates_with Challah.options[:password_validator], force: false
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module Challah
2
+ module Userable
3
+ extend ActiveSupport::Concern
4
+
5
+ include UserAttributeable
6
+ include UserAuthenticateable
7
+ include UserAuthorizable
8
+ include UserFindable
9
+ include UserPasswordable
10
+ include UserProvideable
11
+
12
+ unless Challah.options[:skip_user_validations]
13
+ include UserValidateable
14
+ end
15
+
16
+ included do
17
+ Challah.include_user_plugins!
18
+ end
19
+ end
20
+ end
@@ -45,8 +45,7 @@ module Challah
45
45
  if defined?(ActiveRecord)
46
46
  Challah.options[:logger] = ActiveRecord::Base.logger
47
47
 
48
- ActiveRecord::Base.send(:extend, Challah::User)
49
- ActiveRecord::Base.send(:extend, Challah::Authorization)
48
+ ActiveRecord::Base.send(:include, Challah::ActiveRecordExtensions)
50
49
  ActiveRecord::Base.send(:include, Challah::Audit)
51
50
 
52
51
  # Load any ActiveRecord/Challah plugins
data/lib/challah/test.rb CHANGED
@@ -1,45 +1,65 @@
1
- # Used to persist session data in test mode instead of using cookies. Stores the session
2
- # data lazily in a global var, accessible across the testing environment.
3
- class TestSessionStore
4
- def initialize(session = nil)
5
- @session = session
6
- end
1
+ module Challah
2
+ # Used to persist session data in test mode instead of using cookies. Stores the session
3
+ # data lazily in a global var, accessible across the testing environment.
4
+ class TestSessionStore
5
+ def initialize(session = nil)
6
+ @session = session
7
+ end
7
8
 
8
- def destroy
9
- $challah_test_session = nil
10
- end
9
+ def destroy
10
+ $challah_test_session = nil
11
+ end
12
+
13
+ def read
14
+ if $challah_test_session
15
+ return $challah_test_session.to_s.split(":")
16
+ end
11
17
 
12
- def read
13
- if $challah_test_session
14
- return $challah_test_session.to_s.split(':')
18
+ nil
15
19
  end
16
20
 
17
- nil
21
+ def save(token, user_id)
22
+ $challah_test_session = "#{ token }:#{ user_id }"
23
+ true
24
+ end
18
25
  end
19
26
 
20
- def save(token, user_id)
21
- $challah_test_session = "#{token}:#{user_id}"
22
- true
27
+ module Testing
28
+
29
+ # Sign the given user instance in
30
+ def signin_as(user)
31
+ Session.create!(user, nil, nil, user.class)
32
+ end
33
+ alias_method :login_as, :signin_as
34
+
35
+ # Sign the given user instance out
36
+ def signout
37
+ Session.destroy
38
+ end
39
+ alias_method :logout, :signout
40
+
23
41
  end
24
42
  end
25
43
 
26
- Challah.options[:storage_class] = TestSessionStore
27
-
28
44
  class ActiveSupport::TestCase
29
- # Sign the given user instance in
30
- def signin_as(user)
31
- Challah::Session.create!(user, nil, nil, user.class)
32
- end
33
- alias_method :login_as, :signin_as
45
+ include Challah::Testing
46
+ setup :signout
47
+ end
34
48
 
35
- # Sign the given user instance out
36
- def signout
37
- Challah::Session.destroy
38
- end
39
- alias_method :logout, :signout
49
+ if defined?(RSpec)
50
+ RSpec.configure do |config|
51
+
52
+ config.before(:all) do
53
+ # make sure challah is using test session in test mode
54
+ Challah.options[:storage_class] = Challah::TestSessionStore
55
+ end
56
+
57
+ config.before(:each) do
58
+ # Reset any challah user sessions for each test.
59
+ $challah_test_session = nil
60
+ end
61
+
62
+ config.include Challah::Testing, type: :controller
40
63
 
41
- setup do
42
- # Reset any challah user sessions for each test.
43
- $challah_test_session = nil
44
64
  end
45
- end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module Challah
2
- VERSION = "1.1.1" unless defined?(::Challah::VERSION)
2
+ VERSION = "1.2.0.rc" unless defined?(::Challah::VERSION)
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: challah
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0.rc
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Tornow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-07 00:00:00.000000000 Z
11
+ date: 2014-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -81,75 +81,20 @@ files:
81
81
  - config/locales/en.yml
82
82
  - db/migrate/20120127150433_create_users.rb
83
83
  - db/migrate/20121116210759_create_authorizations.rb
84
- - test/controllers/controller_test.rb
85
- - test/controllers/restrictions_controller_test.rb
86
- - test/controllers/sessions_controller_test.rb
87
- - test/dummy/app/assets/javascripts/application.js
88
- - test/dummy/app/assets/stylesheets/application.css
89
- - test/dummy/app/controllers/application_controller.rb
90
- - test/dummy/app/controllers/restrictions_controller.rb
91
- - test/dummy/app/helpers/application_helper.rb
92
- - test/dummy/app/models/user.rb
93
- - test/dummy/app/models/widget.rb
94
- - test/dummy/app/views/bakery/templates/layouts/sample.erb
95
- - test/dummy/app/views/bakery/templates/partials/sample.html.haml
96
- - test/dummy/app/views/bakery/templates/themes/sample.haml
97
- - test/dummy/app/views/layouts/application.html.erb
98
- - test/dummy/config/application.rb
99
- - test/dummy/config/boot.rb
100
- - test/dummy/config/database.yml
101
- - test/dummy/config/environment.rb
102
- - test/dummy/config/environments/development.rb
103
- - test/dummy/config/environments/production.rb
104
- - test/dummy/config/environments/test.rb
105
- - test/dummy/config/initializers/backtrace_silencers.rb
106
- - test/dummy/config/initializers/filter_parameter_logging.rb
107
- - test/dummy/config/initializers/i18n.rb
108
- - test/dummy/config/initializers/inflections.rb
109
- - test/dummy/config/initializers/mime_types.rb
110
- - test/dummy/config/initializers/secret_token.rb
111
- - test/dummy/config/initializers/session_store.rb
112
- - test/dummy/config/initializers/wrap_parameters.rb
113
- - test/dummy/config/locales/en.yml
114
- - test/dummy/config/routes.rb
115
- - test/dummy/config.ru
116
- - test/dummy/db/migrate/20140114212939_create_widgets.rb
117
- - test/dummy/db/migrate/20140307205735_create_users.challah_engine.rb
118
- - test/dummy/db/migrate/20140307205736_create_authorizations.challah_engine.rb
119
- - test/dummy/db/schema.rb
120
- - test/dummy/db/test.sqlite3
121
- - test/dummy/log/test.log
122
- - test/dummy/public/404.html
123
- - test/dummy/public/422.html
124
- - test/dummy/public/500.html
125
- - test/dummy/public/favicon.ico
126
- - test/dummy/Rakefile
127
- - test/dummy/README.rdoc
128
- - test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705
129
- - test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af
130
- - test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953
131
- - test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994
132
- - test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6
133
- - test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655
134
- - test/factories.rb
135
- - test/models/authorization_test.rb
136
- - test/models/user_test.rb
137
- - test/services/audit_test.rb
138
- - test/services/cookie_store_test.rb
139
- - test/services/encrypter_test.rb
140
- - test/services/plugins_test.rb
141
- - test/services/random_test.rb
142
- - test/services/routes_test.rb
143
- - test/services/session_test.rb
144
- - test/services/signup_test.rb
145
- - test/services/simple_cookie_store_test.rb
146
- - test/support/stubs.rb
147
- - test/test_helper.rb
84
+ - lib/challah/active_record_extensions.rb
148
85
  - lib/challah/audit.rb
149
86
  - lib/challah/authenticators/api_key.rb
150
87
  - lib/challah/authenticators/password.rb
151
88
  - lib/challah/authenticators.rb
152
- - lib/challah/authorization.rb
89
+ - lib/challah/concerns/authorizeable.rb
90
+ - lib/challah/concerns/user/attributeable.rb
91
+ - lib/challah/concerns/user/authenticateable.rb
92
+ - lib/challah/concerns/user/authorizable.rb
93
+ - lib/challah/concerns/user/findable.rb
94
+ - lib/challah/concerns/user/passwordable.rb
95
+ - lib/challah/concerns/user/provideable.rb
96
+ - lib/challah/concerns/user/validateable.rb
97
+ - lib/challah/concerns/userable.rb
153
98
  - lib/challah/controller.rb
154
99
  - lib/challah/cookie_store.rb
155
100
  - lib/challah/encrypter.rb
@@ -166,13 +111,6 @@ files:
166
111
  - lib/challah/techniques/password_technique.rb
167
112
  - lib/challah/techniques.rb
168
113
  - lib/challah/test.rb
169
- - lib/challah/user/attributes.rb
170
- - lib/challah/user/authentication.rb
171
- - lib/challah/user/finders.rb
172
- - lib/challah/user/password.rb
173
- - lib/challah/user/providers.rb
174
- - lib/challah/user/reflector.rb
175
- - lib/challah/user.rb
176
114
  - lib/challah/validators/email_validator.rb
177
115
  - lib/challah/validators/password_validator.rb
178
116
  - lib/challah/version.rb
@@ -197,9 +135,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
135
  version: 1.9.2
198
136
  required_rubygems_version: !ruby/object:Gem::Requirement
199
137
  requirements:
200
- - - '>='
138
+ - - '>'
201
139
  - !ruby/object:Gem::Version
202
- version: '0'
140
+ version: 1.3.1
203
141
  requirements: []
204
142
  rubyforge_project:
205
143
  rubygems_version: 2.0.3
data/lib/challah/user.rb DELETED
@@ -1,128 +0,0 @@
1
- require 'challah/user/attributes'
2
- require 'challah/user/authentication'
3
- require 'challah/user/finders'
4
- require 'challah/user/password'
5
- require 'challah/user/providers'
6
- require 'challah/user/reflector'
7
-
8
- module Challah
9
- module User
10
- def challah_user
11
- unless included_modules.include?(InstanceMethods)
12
- include Attributes
13
- include Authentication
14
- include InstanceMethods
15
- include Providers
16
- include Password
17
- extend Finders
18
- extend Reflector
19
- end
20
-
21
- email_validation_hash = {
22
- presence: true,
23
- uniqueness: true
24
- }
25
-
26
- email_validator_key = Challah.options[:email_validator].to_s.underscore
27
- email_validation_hash[email_validator_key] = true
28
-
29
- class_eval do
30
- # Attributes
31
- ################################################################
32
-
33
- attr_reader :password, :password_confirmation, :password_updated
34
-
35
- # Validation
36
- ################################################################
37
-
38
- unless Challah.options[:skip_user_validations]
39
- validates :email, email_validation_hash
40
- validates :first_name, presence: true
41
- validates :last_name, presence: true
42
-
43
- validates_with Challah.options[:password_validator], force: false
44
- end
45
-
46
- # Scoped Finders
47
- ################################################################
48
-
49
- scope :active, -> { where(active: true) }
50
- scope :inactive, -> { where(active: false) }
51
-
52
- # Callbacks
53
- ################################################################
54
-
55
- before_save :check_tokens
56
- after_save :save_updated_providers
57
- after_save :clear_cache
58
- before_destroy :clear_authorizations
59
- end
60
-
61
- Challah.include_user_plugins!
62
- end
63
-
64
- # Instance methods to be included once challah_user is set up.
65
- module InstanceMethods
66
- def method_missing(method, *args)
67
- method_name = method.to_s
68
-
69
- if method_name =~ /^([a-z]*)_provider\?$/
70
- return provider?($1)
71
- elsif method_name =~ /^([a-z]*)_provider$/
72
- return provider($1)
73
- end
74
-
75
- super
76
- end
77
-
78
- protected
79
- # If password or username was changed, update the authorization record
80
- def save_updated_providers
81
- # Save password provider
82
- if @password_updated or @username_updated
83
- Challah.providers[:password].save(self)
84
- @password_updated = false
85
- @username_updated = false
86
- @password = nil
87
- end
88
-
89
- # Save any other providers
90
- Challah.custom_providers.each do |name, klass|
91
- custom_provider_attributes = provider_attributes[name]
92
-
93
- if custom_provider_attributes.respond_to?(:fetch)
94
- if klass.valid?(self)
95
- klass.save(self)
96
- end
97
- end
98
- end
99
- end
100
-
101
- # Before a record is saved, make sure all tokens are set properly
102
- def check_tokens
103
- if self.persistence_token.to_s.blank?
104
- self.persistence_token = Random.token(125)
105
- end
106
-
107
- if self.api_key.to_s.blank?
108
- self.api_key = Random.token(50)
109
- end
110
-
111
- # Store a hashed email if the column exists
112
- if respond_to?("email_hash=")
113
- if email_changed?
114
- self.email_hash = Encrypter.md5(email.to_s.downcase.strip)
115
- end
116
- end
117
- end
118
-
119
- def clear_authorizations
120
- authorizations.destroy_all
121
- end
122
-
123
- def clear_cache
124
- @providers = nil
125
- end
126
- end
127
- end
128
- end
@@ -1,28 +0,0 @@
1
- module Challah::User
2
-
3
- module Attributes
4
- # Returns true if this user is active, and should be able to log in. If
5
- # the active column is false, the user will not be able to authenticate
6
- def active?
7
- !!self.active
8
- end
9
-
10
- # First name and last name together
11
- def name
12
- "#{first_name} #{last_name}".strip
13
- end
14
-
15
- # shortened name, just includes the first name and last initial
16
- def small_name
17
- "#{first_name.to_s.titleize} #{last_name.to_s.first.upcase}."
18
- end
19
-
20
- # Is this user valid and ready for a user session?
21
- #
22
- # Override this method if you need to check for a particular configuration on each page request.
23
- def valid_session?
24
- self.active?
25
- end
26
- end
27
-
28
- end
@@ -1,31 +0,0 @@
1
- module Challah::User
2
-
3
- module Finders
4
- # Find a user instance by username first, or email address if needed.
5
- # If no user is found matching, return nil
6
- def find_for_session(username_or_email)
7
- return nil if username_or_email.to_s.blank?
8
-
9
- result = nil
10
-
11
- if username_or_email.to_s.include?('@')
12
- result = where(email: username_or_email).first
13
- end
14
-
15
- if !result
16
- uid = username_or_email.to_s.downcase.strip
17
-
18
- authorization = self.authorization_model
19
- authorization = authorization.where(provider: :password, uid: uid)
20
- authorization = authorization.first
21
-
22
- if authorization
23
- result = authorization.user
24
- end
25
- end
26
-
27
- result
28
- end
29
- end
30
-
31
- end