Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. ##################### CONTROLLER ####################################################
  2. #################### SESSIONS #####################################################
  3.  
  4. # sessions new
  5. get '/login' do
  6. @user = User.new
  7. erb :'sessions/login'
  8. end
  9.  
  10. # sessions create
  11. post '/login' do
  12. user_params = params[:user]
  13. @user = User.authenticate(user_params[:email], user_params[:password])
  14. if @user
  15. session[:user_id] = @user.id
  16. redirect :'/profile'
  17. else
  18. status 422
  19. @errors = ["Login failed"]
  20. User.new(email: params[:email])
  21. erb :'sessions/login'
  22. end
  23. end
  24.  
  25. # sessions delete
  26. delete '/logout' do
  27. session.delete(:user_id)
  28. redirect :'/'
  29. end
  30. ##################### CONTROLLER ####################################################
  31. ######################## USER #######################################################
  32.  
  33. # users new
  34. get '/register' do
  35. @user = User.new
  36. erb :'users/new'
  37. end
  38.  
  39. # users create
  40. post '/users' do
  41. @user = User.create(params[:user])
  42. if @user.save
  43. session[:user_id] = @user.id
  44. redirect :'/profile'
  45. else
  46. status 422
  47. @errors = @user.errors.full_messages
  48. erb :'users/new'
  49. end
  50. end
  51.  
  52. # users show
  53. get '/profile' do
  54. erb :'/users/profile'
  55. end
  56.  
  57. ######################### MODEL #####################################################
  58. ######################## USER #######################################################
  59. ################## BCrypt Hashed Password ###########################################
  60.  
  61. class User < ActiveRecord::Base
  62. include BCrypt
  63. validates :email, presence: true, uniqueness: true
  64. validate :password_present
  65.  
  66. has_many :subscriptions
  67. has_many :channels, through: :subscriptions
  68.  
  69. def password
  70. @password ||= Password.new(hashed_password)
  71. end
  72.  
  73. def password=(password)
  74. @password = Password.create(password)
  75. self.hashed_password = @password
  76. end
  77.  
  78. def self.authenticate(email, password)
  79. user = User.find_by(email: email)
  80. return user if user && user.password == password
  81. end
  82.  
  83. def authenticate(password)
  84. self.password.is_password? password
  85. end
  86.  
  87. def monthly_cost
  88. channels.sum(:price_per_month)
  89. end
  90.  
  91. def subscribed?(channel)
  92. channels.include? channel
  93. end
  94.  
  95. private
  96. def password_present
  97. errors.add(:password, "cannot be blank") if self.password == ""
  98. end
  99. end
  100. ######################## VIEWS #########################################################
  101. ################## FORM PARTIAL ## users/_form.erb ########################################
  102.  
  103. <% if @errors && @errors.any? %>
  104. <ul class="errors">
  105. <% @errors.each do |error| %>
  106. <li><%= error %></li>
  107. <% end %>
  108. </ul>
  109. <% end %>
  110.  
  111. <form action="/users" method="post">
  112. <div>
  113. <label for="first_name">First Name:</label>
  114. <input name="user[first_name]" placeholder="First Name" value="<%= @user.first_name %>"></input>
  115. </div>
  116. <div>
  117. <label for="last_name">Last Name:</label>
  118. <input name="user[last_name]" placeholder="Last Name" value="<%= @user.last_name %>"></input>
  119. </div>
  120. <div>
  121. <label for="email">Email:</label>
  122. <input name="user[email]" placeholder="email" value="<%= @user.email %>"></input>
  123. </div>
  124. <div>
  125. <label for="password">Password:</label>
  126. <input type="password" name="user[password]" placeholder="password"></input>
  127. </div>
  128. <div>
  129. <input type="submit" name="Register" />
  130. </div>
  131. </form>
  132.  
  133. ########################### VIEWS ##################################################
  134. ##################### users/profile.erb #############################################
  135.  
  136. <h1><%= current_user.first_name %>'s Profile Page</h1>
  137.  
  138. <%= erb :'/channels/_channels', locals: { channels: current_user.channels } %>
  139.  
  140. <h2>Total Monthly Bill:</h2>
  141. <div class="money"><%= current_user.monthly_cost %></div>
  142.  
  143.  
  144. ########################### VIEWS ##################################################
  145. ##################### sessions/login.erb #############################################
  146.  
  147. <% if @errors && @errors.any? %>
  148. <ul class="errors">
  149. <% @errors.each do |error| %>
  150. <li><%= error %></li>
  151. <% end %>
  152. </ul>
  153. <% end %>
  154.  
  155. <form action="/login" method="post">
  156. <div>
  157. <label for="email">Email:</label>
  158. <input name="user[email]" placeholder="email" value="<%= @user.email %>"></input>
  159. </div>
  160. <div>
  161. <label for="password">Password:</label>
  162. <input type="password" name="user[password]" placeholder="password"></input>
  163. </div>
  164. <div>
  165. <input type="submit" name="Register" />
  166. </div>
  167. </form>
  168. ########################## VIEWS #####################################################
  169. ##################### sessions/logout.erb #############################################
  170.  
  171. <form class="delete" action="/logout" method="post">
  172. <input type="hidden" name="_method" value="delete" />
  173. <input type="submit" value="Logout" class="delete" />
  174. </form>
  175.  
  176. ######################### VIEWS ###################################################
  177. ##################### layouts/_nav.erb #############################################
  178. <nav>
  179. <span class="brand">
  180. Time Warner Cable <span>America's favorite cable company</span>
  181. </span>
  182. <ul>
  183. <li><a href="/channels">Channels</a></li>
  184. <% if current_user %>
  185. <li><a href="/profile">Profile</a></li>
  186. <li><%= erb :'/sessions/logout_form' %></li>
  187. <% else %>
  188. <li><a href="/register">Register</a></li>
  189. <li><a href="/login">Login</a></li>
  190. <% end %>
  191. </ul>
  192. </nav>
  193. ######################## helpers ##################################################
  194. ######################## users.rb ##################################################
  195. helpers do
  196. def current_user
  197. @current_user ||= User.find_by(id: session[:user_id])
  198. end
  199.  
  200. def logged_in?
  201. !current_user.nil?
  202. end
  203. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement