Advertisement
Guest User

Untitled

a guest
Jun 14th, 2016
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.91 KB | None | 0 0
  1. # CONTROLLER
  2.  
  3. #index
  4. get '/users' do
  5.  
  6. end
  7.  
  8. #new
  9. get '/users/new' do
  10. # @user = User.new
  11. erb :"/users/register"
  12. end
  13.  
  14. #create
  15. post '/users' do
  16. @user = User.new(params[:user])
  17.  
  18. if @user.valid?
  19. @user.save
  20. redirect '/'
  21. else
  22. @errors = @user.errors.full_messages
  23. erb :"/users/register"
  24. end
  25. end
  26.  
  27. #show
  28. get '/users/:id' do
  29. @user = User.find_by(id: params[:id])
  30. erb :"/users/show"
  31. end
  32.  
  33. #edit
  34. get '/users/:id/edit' do
  35.  
  36. end
  37.  
  38. #update
  39. patch '/users/:id' do
  40.  
  41. end
  42.  
  43. #delete
  44. delete '/users/:id' do
  45.  
  46. end
  47.  
  48. get '/login' do
  49. erb :"/users/login"
  50. end
  51.  
  52. post '/login' do
  53. @user = User.authenticate(params[:email], params[:password])
  54. if @user
  55. session[:user_id] = @user.id
  56. redirect "/"
  57. else
  58. @error = "Email and Password do not match."
  59. erb :"/users/login"
  60. end
  61. end
  62.  
  63. delete '/logout' do
  64. session[:user_id] = nil
  65. redirect '/'
  66. end
  67.  
  68.  
  69.  
  70. # MODEL
  71.  
  72. class User < ActiveRecord::Base
  73. validates :email, presence: true, uniqueness: true
  74. validates :hashed_password, presence: true
  75. validates :first_name, :last_name, presence: true
  76. validate :password_present?
  77.  
  78. def self.authenticate(email, password)
  79. @user = User.find_by(email: email)
  80. return @user if @user && @user.password == password
  81. nil
  82. end
  83.  
  84. def password
  85. @password ||= BCrypt::Password.new(hashed_password)
  86. end
  87.  
  88. def password=(new_password)
  89. @password = BCrypt::Password.create(new_password)
  90. self.hashed_password = @password
  91. end
  92.  
  93. def full_name
  94. "#{first_name} #{last_name}"
  95. end
  96.  
  97. private
  98. def password_blank?
  99. password == ""
  100. end
  101.  
  102. def password_present?
  103. if password_blank?
  104. errors.add :password, 'cannot be blank.'
  105. end
  106. end
  107.  
  108. end
  109.  
  110.  
  111. # VIEWS - LOGIN
  112.  
  113. <h2>Login</h2><br><br>
  114.  
  115. <% if @error %>
  116. <p><%= @error %></p>
  117. <% end %>
  118.  
  119. <form action="/login" method=POST>
  120. <label for="email">Email</label>
  121. <input type="text" name="email"><br><br>
  122. <label for="password">Password</label>
  123. <input type="password" name="password"><br><br>
  124.  
  125. <input type="submit" value="Login">
  126. </form>
  127.  
  128.  
  129. # VIEWS - REGISTER
  130.  
  131.  
  132. <h2>Register</h2>
  133.  
  134. <% if @errors %>
  135. <% @errors.each do |msg| %>
  136. <p><%= msg %></p>
  137. <% end %>
  138. <% end %>
  139.  
  140. <form action="/users" method=POST>
  141. <label for="user[first_name]">First Name</label>
  142. <input type="text" name="user[first_name]">
  143. <label for="user[last_name]">Last Name</label>
  144. <input type="text" name="user[last_name]"><br><br>
  145. <label for="user[email]">Email</label>
  146. <input type="text" name="user[email]"><br><br>
  147. <label for="user[password]">Password</label>
  148. <input type="password" name="user[password]"><br><br>
  149.  
  150. <input type="submit" value="Sign up">
  151. </form>
  152.  
  153.  
  154.  
  155. # VIEWS - LAYOUT
  156.  
  157. <!DOCTYPE html>
  158. <html lang="en">
  159. <head>
  160. <link rel="stylesheet" href="/css/normalize.css?app=skills">
  161. <link rel="stylesheet" href="/css/application.css?app=skills">
  162.  
  163. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  164. <script src="/js/application.js?app=skills"></script>
  165.  
  166. <title></title>
  167. </head>
  168. <body>
  169. <header>
  170. <a class="button" href="/">Home</a>
  171. <% if current_user %>
  172. <h2><a href="/users/<%= current_user.id %>"><%= current_user.full_name %></a></h2>
  173. <form action="/logout" method=POST>
  174. <input type="hidden" name="_method" value=DELETE>
  175. <input type="submit" value="Logout">
  176. </form>
  177. <% else %>
  178. <a class="button" href="/users/new">Register</a>
  179. <a class="button" href="/login">Login</a><br><br><br><br>
  180. <% end %>
  181. </header>
  182. <%= yield %>
  183. </body>
  184. </html>
  185.  
  186.  
  187.  
  188. # HELPERS
  189.  
  190. helpers do
  191. def current_user
  192. @current_user ||= User.find_by(id: session[:user_id])
  193. end
  194.  
  195. def logged_in?
  196. current_user ? true : false
  197. end
  198. end
  199.  
  200.  
  201. # MIGRATION
  202.  
  203.  
  204. class CreateUsers < ActiveRecord::Migration
  205. def change
  206. create_table :users do |t|
  207. t.string :first_name, :null => false
  208. t.string :last_name, :null => false
  209. t.string :email, :null => false
  210. t.string :hashed_password, :null => false
  211. t.timestamps
  212. end
  213. add_index :users, :email, :unique => true
  214. end
  215. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement