Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sample_app
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tô Ngọc Ánh
sample_app
Commits
5dd951e7
Commit
5dd951e7
authored
Jun 30, 2020
by
Tô Ngọc Ánh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make a basic User model (including secure passwords)
parent
9c782c29
Pipeline
#663
canceled with stages
in 0 seconds
Changes
7
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
71 additions
and
4 deletions
+71
-4
Gemfile
+1
-1
Gemfile.lock
+2
-0
app/models/user.rb
+4
-1
db/migrate/20200630040652_add_index_to_users_email.rb
+5
-0
db/migrate/20200630043304_add_password_digest_to_users.rb
+5
-0
db/schema.rb
+4
-1
spec/models/user_spec.rb
+50
-1
No files found.
Gemfile
View file @
5dd951e7
...
...
@@ -23,7 +23,7 @@ gem 'jbuilder', '~> 2.0'
gem
'
sdoc
'
,
'~> 0.4.0'
,
group: :doc
# Use ActiveModel has_secure_password
#
gem '
bcrypt
', '~> 3.1.7'
gem
'
bcrypt
'
,
'~> 3.1.7'
# Use Unicorn as the app server
# gem '
unicorn
'
...
...
Gemfile.lock
View file @
5dd951e7
...
...
@@ -36,6 +36,7 @@ GEM
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
arel (6.0.4)
bcrypt (3.1.13)
binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1)
bootstrap-sass (2.3.2.0)
...
...
@@ -196,6 +197,7 @@ PLATFORMS
ruby
DEPENDENCIES
bcrypt (~> 3.1.7)
bootstrap-sass (= 2.3.2.0)
byebug
capybara (= 2.1.0)
...
...
app/models/user.rb
View file @
5dd951e7
class
User
<
ActiveRecord
::
Base
validates
:name
,
presence:
true
,
length:
{
maximum:
50
}
VALID_EMAIL_REGEX
=
/[\w+\-.]+@[a-z\d*\-.]+\.[a-z]+/i
validates
:email
,
presence:
true
,
format:
{
with:
VALID_EMAIL_REGEX
}
validates
:email
,
presence:
true
,
format:
{
with:
VALID_EMAIL_REGEX
},
uniqueness:
{
case_sensitive:
false
}
validates
:password
,
length:
{
minimum:
6
}
before_save
{
self
.
email
=
email
.
downcase
}
has_secure_password
end
db/migrate/20200630040652_add_index_to_users_email.rb
0 → 100644
View file @
5dd951e7
class
AddIndexToUsersEmail
<
ActiveRecord
::
Migration
def
change
add_index
:users
,
:email
,
unique:
true
end
end
db/migrate/20200630043304_add_password_digest_to_users.rb
0 → 100644
View file @
5dd951e7
class
AddPasswordDigestToUsers
<
ActiveRecord
::
Migration
def
change
add_column
:users
,
:password_digest
,
:string
end
end
db/schema.rb
View file @
5dd951e7
...
...
@@ -11,13 +11,16 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
version:
202006
26094341
)
do
ActiveRecord
::
Schema
.
define
(
version:
202006
30043304
)
do
create_table
"users"
,
force: :cascade
do
|
t
|
t
.
string
"name"
t
.
string
"email"
t
.
datetime
"created_at"
,
null:
false
t
.
datetime
"updated_at"
,
null:
false
t
.
string
"password_digest"
end
add_index
"users"
,
[
"email"
],
name:
"index_users_on_email"
,
unique:
true
end
spec/models/user_spec.rb
View file @
5dd951e7
require
'spec_helper'
describe
User
do
before
{
@user
=
User
.
new
(
name:
"Example User"
,
email:
"user@example.com"
)
}
before
{
@user
=
User
.
new
(
name:
"Example User"
,
email:
"user@example.com"
,
password:
"foobar"
,
password_confirmation:
"foobar"
)
}
subject
{
@user
}
it
{
should
respond_to
(
:name
)
}
it
{
should
respond_to
(
:email
)
}
it
{
should
respond_to
(
:password_digest
)
}
it
{
should
respond_to
(
:password
)
}
it
{
should
respond_to
(
:password_confirmation
)
}
it
{
should
respond_to
(
:authenticate
)
}
it
{
should
be_valid
}
...
...
@@ -44,4 +49,48 @@ describe User do
end
end
end
describe
"when email address is already taken"
do
before
do
user_with_same_email
=
@user
.
dup
user_with_same_email
.
email
=
@user
.
email
.
upcase
user_with_same_email
.
save
end
it
{
should_not
be_valid
}
end
describe
"when password is not present"
do
before
do
@user
=
User
.
new
(
name:
"Example User"
,
email:
"user@example.com"
,
password:
" "
,
password_confirmation:
" "
)
end
it
{
should_not
be_valid
}
end
describe
"when password doesn't match confirmation"
do
before
{
@user
.
password_confirmation
=
"mismatch"
}
it
{
should_not
be_valid
}
end
describe
"return value of authenticate method"
do
before
{
@user
.
save
}
let
(
:found_user
)
{
User
.
find_by
(
email:
@user
.
email
)
}
describe
"with valid password"
do
it
{
should
eq
found_user
.
authenticate
(
@user
.
password
)
}
end
describe
"with invalid password"
do
let
(
:user_for_invalid_password
)
{
found_user
.
authenticate
(
"invalid"
)
}
it
{
should_not
eq
user_for_invalid_password
}
specify
{
expect
(
user_for_invalid_password
).
to
be_false
}
end
end
describe
"with a password that's too short"
do
before
{
@user
.
password
=
@user
.
password_confirmation
=
"a"
*
5
}
it
{
should
be_invalid
}
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment