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
Tan Phat Nguyen
sample_app
Commits
e1383332
Commit
e1383332
authored
Nov 07, 2014
by
Tan Phat Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modify coding convention
parent
974672c5
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
177 additions
and
173 deletions
+177
-173
.gitignore
+1
-0
app/controllers/application_controller.rb
+2
-1
app/controllers/microposts_controller.rb
+5
-4
app/controllers/sessions_controller.rb
+1
-0
app/controllers/static_pages_controller.rb
+5
-2
app/controllers/users_controller.rb
+17
-19
app/helpers/sessions_helper.rb
+16
-16
app/models/micropost.rb
+5
-3
app/models/user.rb
+29
-34
app/views/layouts/_header.html.erb
+26
-26
app/views/users/_fields.html.erb
+2
-1
public/uploads/tmp/1415329593-22750-2891/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415330857-23112-9064/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415330937-23112-9278/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415331043-23112-2022/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415331096-23112-2706/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415331173-23112-4424/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415331207-23319-3582/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415331242-23319-3246/_78796825_hltau_nrao.jpg
+0
-0
public/uploads/tmp/1415331446-23319-2503/_78796825_hltau_nrao.jpg
+0
-0
test/integration/microposts_interface_test.rb
+27
-27
test/models/user_test.rb
+41
-40
No files found.
.gitignore
View file @
e1383332
...
...
@@ -14,3 +14,4 @@
# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
#/public/uploads
app/controllers/application_controller.rb
View file @
e1383332
...
...
@@ -14,4 +14,4 @@ class ApplicationController < ActionController::Base
redirect_to
login_url
end
end
end
end
\ No newline at end of file
app/controllers/microposts_controller.rb
View file @
e1383332
...
...
@@ -3,19 +3,20 @@ class MicropostsController < ApplicationController
before_action
:correct_user
,
only: :destroy
def
create
@feed_items
=
current_user
.
microposts
.
paginate
(
page:
params
[
:page
])
@micropost
=
current_user
.
microposts
.
build
(
micropost_params
)
if
@micropost
.
save
flash
[
:success
]
=
"Micropost created!"
flash
[
:success
]
=
'Micropost created!'
redirect_to
root_url
else
@feed_items
=
[]
render
'static_pages/home'
end
end
def
destroy
@micropost
.
destroy
flash
[
:success
]
=
"Micropost deleted"
flash
[
:success
]
=
'Micropost deleted'
redirect_to
request
.
referrer
||
root_url
end
...
...
@@ -27,6 +28,6 @@ class MicropostsController < ApplicationController
def
correct_user
@micropost
=
current_user
.
microposts
.
find_by
(
id:
params
[
:id
])
redirect_to
root_url
if
@micropost
.
nil?
redirect_to
root_url
if
@micropost
end
end
app/controllers/sessions_controller.rb
View file @
e1383332
class
SessionsController
<
ApplicationController
def
new
end
...
...
app/controllers/static_pages_controller.rb
View file @
e1383332
class
StaticPagesController
<
ApplicationController
def
home
@micropost
=
current_user
.
microposts
.
build
if
logged_in?
@feed_items
=
current_user
.
feed
.
paginate
(
page:
params
[
:page
])
if
logged_in?
@micropost
=
current_user
.
microposts
.
build
@feed_items
=
current_user
.
microposts
.
paginate
(
page:
params
[
:page
])
end
end
def
help
...
...
app/controllers/users_controller.rb
View file @
e1383332
...
...
@@ -2,6 +2,7 @@ class UsersController < ApplicationController
before_action
:logged_in_user
,
only:
[
:index
,
:edit
,
:update
,
:destroy
]
before_action
:correct_user
,
only:
[
:edit
,
:update
]
before_action
:admin_user
,
only: :destroy
before_action
:set_user
,
only:
[
:show
,
:edit
,
:update
,
:destroy
]
def
index
...
...
@@ -9,12 +10,13 @@ class UsersController < ApplicationController
end
def
show
@user
=
User
.
find
(
params
[
:id
])
@microposts
=
@user
.
microposts
.
paginate
(
page:
params
[
:page
])
end
def
new
@user
=
User
.
new
end
def
create
@user
=
User
.
new
(
user_params
)
if
@user
.
save
...
...
@@ -27,11 +29,9 @@ class UsersController < ApplicationController
end
def
edit
@user
=
User
.
find
(
params
[
:id
])
end
def
update
@user
=
User
.
find
(
params
[
:id
])
if
@user
.
update_attributes
(
user_params
)
flash
[
:success
]
=
"Profile updated"
redirect_to
@user
...
...
@@ -41,29 +41,27 @@ class UsersController < ApplicationController
end
def
destroy
User
.
find
(
params
[
:id
])
.
destroy
@user
.
destroy
flash
[
:success
]
=
"User deleted"
redirect_to
users_url
end
def
user_params
params
.
require
(
:user
).
permit
(
:name
,
:email
,
:password
,
:password_confirmation
)
end
private
def
logged_in_user
unless
logged_in?
store_location
flash
[
:danger
]
=
"Please log in."
redirect_to
login_url
end
end
def
user_params
params
.
require
(
:user
).
permit
(
:name
,
:email
,
:password
,
:password_confirmation
)
end
def
set_user
@user
=
User
.
find
(
params
[
:id
])
end
def
correct_user
def
correct_user
@user
=
User
.
find
(
params
[
:id
])
redirect_to
(
root_url
)
unless
current_user?
(
@user
)
end
end
def
admin_user
redirect_to
(
root_url
)
unless
current_user
.
admin?
end
def
admin_user
redirect_to
(
root_url
)
unless
current_user
.
admin?
end
end
app/helpers/sessions_helper.rb
View file @
e1383332
...
...
@@ -6,13 +6,13 @@ module SessionsHelper
def
current_user
if
(
user_id
=
session
[
:user_id
])
@current_user
||=
User
.
find_by
(
id:
user_id
)
elsif
(
user_id
=
cookies
.
signed
[
:user_id
])
user
=
User
.
find_by
(
id:
user_id
)
if
user
&&
user
.
authenticated?
(
cookies
[
:remember_token
])
log_in
user
@current_user
=
user
end
end
elsif
(
user_id
=
cookies
.
signed
[
:user_id
])
user
=
User
.
find_by
(
id:
user_id
)
if
user
&&
user
.
authenticated?
(
cookies
[
:remember_token
])
log_in
user
@current_user
=
user
end
end
end
def
logged_in?
...
...
@@ -20,16 +20,16 @@ module SessionsHelper
end
def
log_out
forget
(
current_user
)
forget
(
current_user
)
session
.
delete
(
:user_id
)
@current_user
=
nil
end
end
def
remember
(
user
)
user
.
remember
cookies
.
permanent
.
signed
[
:user_id
]
=
user
.
id
cookies
.
permanent
[
:remember_token
]
=
user
.
remember_token
end
def
remember
(
user
)
user
.
remember
cookies
.
permanent
.
signed
[
:user_id
]
=
user
.
id
cookies
.
permanent
[
:remember_token
]
=
user
.
remember_token
end
# Forgets a persistent session.
def
forget
(
user
)
...
...
@@ -39,8 +39,8 @@ module SessionsHelper
end
def
current_user?
(
user
)
user
==
current_user
end
user
==
current_user
end
# Redirects to stored location (or to the default).
def
redirect_back_or
(
default
)
...
...
app/models/micropost.rb
View file @
e1383332
class
Micropost
<
ActiveRecord
::
Base
belongs_to
:user
default_scope
->
{
order
(
'created_at DESC'
)
}
mount_uploader
:picture
,
PictureUploader
belongs_to
:user
validates
:user_id
,
presence:
true
validates
:content
,
presence:
true
,
length:
{
maximum:
140
}
validate
:picture_size
mount_uploader
:picture
,
PictureUploader
private
def
picture_size
...
...
@@ -13,5 +16,4 @@ class Micropost < ActiveRecord::Base
errors
.
add
(
:picture
,
"should be less than 5MB"
)
end
end
end
app/models/user.rb
View file @
e1383332
class
User
<
ActiveRecord
::
Base
has_many
:microposts
,
dependent: :destroy
attr_accessor
:remember_token
before_save
{
self
.
email
=
email
.
downcase
}
validates
:name
,
presence:
true
,
length:
{
maximum:
50
}
attr_accessor
:remember_token
VALID_EMAIL_REGEX
=
/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
VALID_EMAIL_REGEX
=
/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates
:email
,
presence:
true
,
length:
{
maximum:
255
},
format:
{
with:
VALID_EMAIL_REGEX
},
uniqueness:
{
case_sensitive:
false
}
has_many
:microposts
,
dependent: :destroy
has_secure_password
validates
:password
,
length:
{
minimum:
6
},
allow_blank:
true
validates
:name
,
presence:
true
,
length:
{
maximum:
50
}
validates
:email
,
presence:
true
,
length:
{
maximum:
255
},
format:
{
with:
VALID_EMAIL_REGEX
},
uniqueness:
{
case_sensitive:
false
}
validates
:password
,
length:
{
minimum:
6
},
allow_blank:
true
has_secure_password
before_save
{
self
.
email
=
email
.
downcase
}
def
self
.
digest
(
string
)
cost
=
ActiveModel
::
SecurePassword
.
min_cost
?
BCrypt
::
Engine
::
MIN_COST
:
cost
=
ActiveModel
::
SecurePassword
.
min_cost
?
BCrypt
::
Engine
::
MIN_COST
:
BCrypt
::
Engine
.
cost
BCrypt
::
Password
.
create
(
string
,
cost:
cost
)
end
def
self
.
new_token
SecureRandom
.
urlsafe_base64
end
def
remember
self
.
remember_token
=
User
.
new_token
update_attribute
(
:remember_digest
,
User
.
digest
(
remember_token
))
end
def
authenticated?
(
remember_token
)
return
false
if
remember_digest
.
nil?
BCrypt
::
Password
.
new
(
remember_digest
).
is_password?
(
remember_token
)
end
def
forget
update_attribute
(
:remember_digest
,
nil
)
end
def
feed
# This is preliminary. See "Following users" for the full implementation.
Micropost
.
where
(
"user_id = ?"
,
id
)
end
BCrypt
::
Password
.
create
(
string
,
cost:
cost
)
end
def
self
.
new_token
SecureRandom
.
urlsafe_base64
end
def
remember
self
.
remember_token
=
User
.
new_token
update_attribute
(
:remember_digest
,
User
.
digest
(
remember_token
))
end
def
authenticated?
(
remember_token
)
return
false
if
remember_digest
BCrypt
::
Password
.
new
(
remember_digest
).
is_password?
(
remember_token
)
end
def
forget
update_attribute
(
:remember_digest
,
nil
)
end
end
app/views/layouts/_header.html.erb
View file @
e1383332
<header
class=
"navbar navbar-fixed-top navbar-inverse"
>
<div
class=
"container"
>
<%=
link_to
"sample app"
,
root_path
,
id:
"logo"
%>
<nav>
<ul
class=
"nav navbar-nav pull-right"
>
<li>
<%=
link_to
"Home"
,
root_path
%>
</li>
<li>
<%=
link_to
"Help"
,
help_path
%>
</li>
<%
if
logged_in?
%>
<li>
<%=
link_to
"Users"
,
users_path
%>
</li>
<li
class=
"dropdown"
>
<a
href=
"#"
class=
"dropdown-toggle"
data-toggle=
"dropdown"
>
Account
<b
class=
"caret"
></b>
</a>
<ul
class=
"dropdown-menu"
>
<li>
<%=
link_to
"Profile"
,
current_user
%>
</li>
<li>
<%=
link_to
"Settings"
,
edit_user_path
(
current_user
)
%>
</li>
<li
class=
"divider"
></li>
<li>
<%=
link_to
"Log out"
,
logout_path
,
method:
"delete"
%>
</li>
</ul>
</li>
<%
else
%>
<li>
<%=
link_to
"Log in"
,
login_path
%>
</li>
<%
end
%>
</ul>
</nav>
</div>
</header>
<div
class=
"container"
>
<%=
link_to
"sample app"
,
root_path
,
id:
"logo"
%>
<nav>
<ul
class=
"nav navbar-nav pull-right"
>
<li>
<%=
link_to
"Home"
,
root_path
%>
</li>
<li>
<%=
link_to
"Help"
,
help_path
%>
</li>
<%
if
logged_in?
%>
<li>
<%=
link_to
"Users"
,
users_path
%>
</li>
<li
class=
"dropdown"
>
<a
href=
"#"
class=
"dropdown-toggle"
data-toggle=
"dropdown"
>
Account
<b
class=
"caret"
></b>
</a>
<ul
class=
"dropdown-menu"
>
<li>
<%=
link_to
"Profile"
,
current_user
%>
</li>
<li>
<%=
link_to
"Settings"
,
edit_user_path
(
current_user
)
%>
</li>
<li
class=
"divider"
></li>
<li>
<%=
link_to
"Log out"
,
logout_path
,
method:
"delete"
%>
</li>
</ul>
</li>
<%
else
%>
<li>
<%=
link_to
"Log in"
,
login_path
%>
</li>
<%
end
%>
</ul>
</nav>
</div>
</header>
app/views/users/_fields.html.erb
View file @
e1383332
...
...
@@ -9,5 +9,5 @@
<%=
f
.
label
:password
%>
<%=
f
.
password_field
:password
,
class:
'form-control'
%>
<%=
f
.
label
:password_confirmation
,
"Confirmation"
%>
<%=
f
.
label
:password_confirmation
,
'Confirmation'
%>
<%=
f
.
password_field
:password_confirmation
,
class:
'form-control'
%>
\ No newline at end of file
public/uploads/tmp/1415329593-22750-2891/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415330857-23112-9064/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415330937-23112-9278/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415331043-23112-2022/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415331096-23112-2706/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415331173-23112-4424/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415331207-23319-3582/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415331242-23319-3246/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
public/uploads/tmp/1415331446-23319-2503/_78796825_hltau_nrao.jpg
deleted
100644 → 0
View file @
974672c5
32 KB
test/integration/microposts_interface_test.rb
View file @
e1383332
...
...
@@ -2,32 +2,32 @@ require 'test_helper'
class
MicropostInterfaceTest
<
ActionDispatch
::
IntegrationTest
def
setup
@user
=
users
(
:michael
)
end
def
setup
@user
=
users
(
:michael
)
end
test
"micropost interface"
do
log_in_as
(
@user
)
get
root_path
assert_select
'div.pagination'
# Invalid submission
post
microposts_path
,
micropost:
{
content:
""
}
assert_select
'div#error_explanation'
# Valid submission
content
=
"This micropost really ties the room together"
assert_difference
'Micropost.count'
,
1
do
post
microposts_path
,
micropost:
{
content:
content
}
end
follow_redirect!
assert_match
content
,
response
.
body
# Delete a post.
assert_select
'a'
,
'delete'
first_micropost
=
@user
.
microposts
.
paginate
(
page:
1
).
first
assert_difference
'Micropost.count'
,
-
1
do
delete
micropost_path
(
first_micropost
)
end
# Visit a different user.
get
user_path
(
users
(
:archer
))
assert_select
'a'
,
{
text:
'delete'
,
count:
0
}
end
test
"micropost interface"
do
log_in_as
(
@user
)
get
root_path
assert_select
'div.pagination'
# Invalid submission
post
microposts_path
,
micropost:
{
content:
""
}
assert_select
'div#error_explanation'
# Valid submission
content
=
"This micropost really ties the room together"
assert_difference
'Micropost.count'
,
1
do
post
microposts_path
,
micropost:
{
content:
content
}
end
follow_redirect!
assert_match
content
,
response
.
body
# Delete a post.
assert_select
'a'
,
'delete'
first_micropost
=
@user
.
microposts
.
paginate
(
page:
1
).
first
assert_difference
'Micropost.count'
,
-
1
do
delete
micropost_path
(
first_micropost
)
end
# Visit a different user.
get
user_path
(
users
(
:archer
))
assert_select
'a'
,
{
text:
'delete'
,
count:
0
}
end
end
test/models/user_test.rb
View file @
e1383332
...
...
@@ -4,57 +4,58 @@ class UserTest < ActiveSupport::TestCase
def
setup
@user
=
User
.
new
(
name:
"Example User"
,
email:
"user@example.com"
,
password:
"foobar"
,
password_confirmation:
"foobar"
)
end
test
"should be valid"
do
assert
@user
.
valid?
end
test
"name should be present"
do
@user
.
name
=
""
assert_not
@user
.
valid?
end
test
"should be valid"
do
assert
@user
.
valid?
end
test
"name should be present"
do
@user
.
name
=
""
assert_not
@user
.
valid?
end
should
validate_presence_of
(
:name
)
test
"email should be present"
do
@user
.
email
=
" "
assert_not
@user
.
valid?
end
test
"email should be present"
do
@user
.
email
=
" "
assert_not
@user
.
valid?
end
test
"name should not be too long"
do
@user
.
name
=
"a"
*
51
assert_not
@user
.
valid?
end
test
"name should not be too long"
do
@user
.
name
=
"a"
*
51
assert_not
@user
.
valid?
end
test
"email should not be too long"
do
@user
.
email
=
"a"
*
256
assert_not
@user
.
valid?
end
test
"email should not be too long"
do
@user
.
email
=
"a"
*
256
assert_not
@user
.
valid?
end
test
"email validation should accept valid addresses"
do
valid_addresses
=
%w[user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com]
valid_addresses
.
each
do
|
valid_address
|
@user
.
email
=
valid_address
assert_not
@user
.
valid?
,
"
#{
valid_address
.
inspect
}
should be valid"
end
end
test
"email validation should accept valid addresses"
do
valid_addresses
=
%w(user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com)
valid_addresses
.
each
do
|
valid_address
|
@user
.
email
=
valid_address
assert_not
@user
.
valid?
,
"
#{
valid_address
.
inspect
}
should be valid"
end
end
test
"email addresses should be unique"
do
duplicate_user
=
@user
.
dup
duplicate_user
.
email
=
@user
.
email
.
upcase
@user
.
save
assert_not
duplicate_user
.
valid?
end
test
"email addresses should be unique"
do
duplicate_user
=
@user
.
dup
duplicate_user
.
email
=
@user
.
email
.
upcase
@user
.
save
assert_not
duplicate_user
.
valid?
end
test
"password should have a minimum length"
do
@user
.
password
=
@user
.
password_confirmation
=
"a"
*
5
assert_not
@user
.
valid?
end
test
"password should have a minimum length"
do
@user
.
password
=
@user
.
password_confirmation
=
"a"
*
5
assert_not
@user
.
valid?
end
test
"authenticated? should return false for a user with nil digest"
do
assert_not
@user
.
authenticated?
(
''
)
end
test
"authenticated? should return false for a user with nil digest"
do
assert_not
@user
.
authenticated?
(
''
)
end
test
"associated microposts should be destroyed"
do
test
"associated microposts should be destroyed"
do
@user
.
save
@user
.
microposts
.
create!
(
content:
"Lorem ipsum"
)
assert_difference
'Micropost.count'
,
-
1
do
...
...
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