sinatra-security 0.1.2 → 0.1.3
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.
- data/VERSION +1 -1
- data/lib/sinatra/security/login_field.rb +16 -0
- data/lib/sinatra/security/user.rb +3 -2
- data/lib/sinatra/security/validations.rb +12 -1
- data/lib/sinatra/security.rb +2 -1
- data/sinatra-security.gemspec +2 -1
- data/test/helper.rb +26 -22
- data/test/test_sinatra_security_helpers.rb +2 -0
- data/test/test_validations.rb +57 -3
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Sinatra
|
2
|
+
module Security
|
3
|
+
module LoginField
|
4
|
+
def self.attr_name(attr_name = nil)
|
5
|
+
@attr_name = attr_name if attr_name
|
6
|
+
@attr_name
|
7
|
+
end
|
8
|
+
attr_name(:email)
|
9
|
+
|
10
|
+
def self.included(user)
|
11
|
+
user.attribute LoginField.attr_name
|
12
|
+
user.index LoginField.attr_name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -2,11 +2,12 @@ module Sinatra
|
|
2
2
|
module Security
|
3
3
|
module User
|
4
4
|
def self.included(user)
|
5
|
-
user.send :include,
|
5
|
+
user.send :include, LoginField
|
6
6
|
user.send :include, Password
|
7
|
+
user.send :include, Validations
|
7
8
|
|
8
9
|
user.extend Identification
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
12
|
-
end
|
13
|
+
end
|
@@ -2,7 +2,18 @@ module Sinatra
|
|
2
2
|
module Security
|
3
3
|
module Validations
|
4
4
|
EMAIL_FORMAT = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
|
5
|
-
|
5
|
+
|
6
|
+
def validate
|
7
|
+
# TODO : email requirement should only be done if
|
8
|
+
# LoginField.attr_name == :email maybe
|
9
|
+
# then just let users expilicity declare there own
|
10
|
+
# validation rules
|
11
|
+
assert_login_using_email :email
|
12
|
+
assert_password :password
|
13
|
+
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
6
17
|
protected
|
7
18
|
def assert_login_using_email(att, error = [att, :not_email])
|
8
19
|
if assert_present att
|
data/lib/sinatra/security.rb
CHANGED
@@ -13,6 +13,7 @@ module Sinatra
|
|
13
13
|
autoload :Validations, 'sinatra/security/validations'
|
14
14
|
autoload :Password, 'sinatra/security/password'
|
15
15
|
autoload :Identification, 'sinatra/security/identification'
|
16
|
+
autoload :LoginField, 'sinatra/security/login_field'
|
16
17
|
|
17
18
|
def self.registered(app)
|
18
19
|
app.helpers Helpers
|
@@ -29,4 +30,4 @@ module Sinatra
|
|
29
30
|
end
|
30
31
|
|
31
32
|
register Security
|
32
|
-
end
|
33
|
+
end
|
data/sinatra-security.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sinatra-security}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Cyril David"]
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/sinatra/security.rb",
|
30
30
|
"lib/sinatra/security/helpers.rb",
|
31
31
|
"lib/sinatra/security/identification.rb",
|
32
|
+
"lib/sinatra/security/login_field.rb",
|
32
33
|
"lib/sinatra/security/password.rb",
|
33
34
|
"lib/sinatra/security/user.rb",
|
34
35
|
"lib/sinatra/security/validations.rb",
|
data/test/helper.rb
CHANGED
@@ -23,32 +23,36 @@ class Test::Unit::TestCase
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Test Fixtures appear here
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
module TestFixtures
|
27
|
+
class User
|
28
|
+
attr :id
|
29
|
+
attr_accessor :email, :password, :password_confirmation
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
def errors
|
35
|
-
@errors ||= []
|
36
|
-
end
|
31
|
+
def initialize(id = nil)
|
32
|
+
@id = id
|
33
|
+
end
|
37
34
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
def errors
|
36
|
+
@errors ||= []
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate
|
40
|
+
# placed here so included validate method has a super to call
|
41
|
+
end
|
42
|
+
protected
|
43
|
+
def assert(value, error)
|
44
|
+
value or errors.push(error) && false
|
45
|
+
end
|
42
46
|
|
43
|
-
|
44
|
-
|
45
|
-
|
47
|
+
def assert_present(att, error = [att, :not_present])
|
48
|
+
assert(!send(att).to_s.empty?, error)
|
49
|
+
end
|
46
50
|
|
47
|
-
|
48
|
-
|
49
|
-
|
51
|
+
def assert_format(att, format, error = [att, :format])
|
52
|
+
if assert_present(att, error)
|
53
|
+
assert(send(att).to_s.match(format), error)
|
54
|
+
end
|
50
55
|
end
|
51
|
-
end
|
52
56
|
|
57
|
+
end
|
53
58
|
end
|
54
|
-
|
data/test/test_validations.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "helper"
|
2
2
|
|
3
|
-
class UserWithEmailValidation < User
|
3
|
+
class UserWithEmailValidation < TestFixtures::User
|
4
4
|
include Sinatra::Security::Validations
|
5
5
|
|
6
6
|
def initialize
|
@@ -19,9 +19,8 @@ class UserWithEmailValidation < User
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
class UserWithPasswordValidation < User
|
22
|
+
class UserWithPasswordValidation < TestFixtures::User
|
23
23
|
include Sinatra::Security::Validations
|
24
|
-
attr_accessor :password_confirmation
|
25
24
|
|
26
25
|
def initialize
|
27
26
|
super
|
@@ -38,6 +37,14 @@ class UserWithPasswordValidation < User
|
|
38
37
|
end
|
39
38
|
end
|
40
39
|
|
40
|
+
class UserDefaultValidation < TestFixtures::User
|
41
|
+
include Sinatra::Security::Validations
|
42
|
+
|
43
|
+
def errors
|
44
|
+
@errors ||= []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
41
48
|
class TestValidations < Test::Unit::TestCase
|
42
49
|
context "without an email" do
|
43
50
|
should "require the email to be present" do
|
@@ -156,4 +163,51 @@ class TestValidations < Test::Unit::TestCase
|
|
156
163
|
end
|
157
164
|
end
|
158
165
|
end
|
166
|
+
|
167
|
+
context "the default validations" do
|
168
|
+
setup do
|
169
|
+
@user = UserDefaultValidation.new
|
170
|
+
@user.stubs(:new?).returns(true)
|
171
|
+
end
|
172
|
+
|
173
|
+
should "assert presence of email" do
|
174
|
+
@user.validate
|
175
|
+
|
176
|
+
assert @user.errors.include?([:email, :not_present])
|
177
|
+
end
|
178
|
+
|
179
|
+
should "assert the email is an email" do
|
180
|
+
@user.email = '_foobar_'
|
181
|
+
@user.validate
|
182
|
+
|
183
|
+
assert @user.errors.include?([:email, :not_email])
|
184
|
+
end
|
185
|
+
|
186
|
+
should "assert the email is unique" do
|
187
|
+
@user.email = 'foo@bar.com'
|
188
|
+
@user.expects(:assert_unique).with(:email).returns(false)
|
189
|
+
@user.validate
|
190
|
+
end
|
191
|
+
|
192
|
+
should "assert the password is there" do
|
193
|
+
@user.password = ''
|
194
|
+
@user.validate
|
195
|
+
assert @user.errors.include?([:password, :not_present])
|
196
|
+
end
|
197
|
+
|
198
|
+
should "assert the password is confirmed" do
|
199
|
+
@user.password = 'aoeu'
|
200
|
+
@user.validate
|
201
|
+
assert @user.errors.include?([:password, :not_confirmed])
|
202
|
+
end
|
203
|
+
|
204
|
+
context "when the user is existing" do
|
205
|
+
should "not require a password" do
|
206
|
+
@user.stubs(:new?).returns(false)
|
207
|
+
@user.validate
|
208
|
+
|
209
|
+
assert ! @user.errors.include?([:password, :not_presen])
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
159
213
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Cyril David
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- lib/sinatra/security.rb
|
41
41
|
- lib/sinatra/security/helpers.rb
|
42
42
|
- lib/sinatra/security/identification.rb
|
43
|
+
- lib/sinatra/security/login_field.rb
|
43
44
|
- lib/sinatra/security/password.rb
|
44
45
|
- lib/sinatra/security/user.rb
|
45
46
|
- lib/sinatra/security/validations.rb
|