Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##################### CONTROLLER ####################################################
- #################### SESSIONS #####################################################
- # sessions new
- get '/login' do
- @user = User.new
- erb :'sessions/login'
- end
- # sessions create
- post '/login' do
- user_params = params[:user]
- @user = User.authenticate(user_params[:email], user_params[:password])
- if @user
- session[:user_id] = @user.id
- redirect :'/profile'
- else
- status 422
- @errors = ["Login failed"]
- User.new(email: params[:email])
- erb :'sessions/login'
- end
- end
- # sessions delete
- delete '/logout' do
- session.delete(:user_id)
- redirect :'/'
- end
- ##################### CONTROLLER ####################################################
- ######################## USER #######################################################
- # users new
- get '/register' do
- @user = User.new
- erb :'users/new'
- end
- # users create
- post '/users' do
- @user = User.create(params[:user])
- if @user.save
- session[:user_id] = @user.id
- redirect :'/profile'
- else
- status 422
- @errors = @user.errors.full_messages
- erb :'users/new'
- end
- end
- # users show
- get '/profile' do
- erb :'/users/profile'
- end
- ######################### MODEL #####################################################
- ######################## USER #######################################################
- ################## BCrypt Hashed Password ###########################################
- class User < ActiveRecord::Base
- include BCrypt
- validates :email, presence: true, uniqueness: true
- validate :password_present
- has_many :subscriptions
- has_many :channels, through: :subscriptions
- def password
- @password ||= Password.new(hashed_password)
- end
- def password=(password)
- @password = Password.create(password)
- self.hashed_password = @password
- end
- def self.authenticate(email, password)
- user = User.find_by(email: email)
- return user if user && user.password == password
- end
- def authenticate(password)
- self.password.is_password? password
- end
- def monthly_cost
- channels.sum(:price_per_month)
- end
- def subscribed?(channel)
- channels.include? channel
- end
- private
- def password_present
- errors.add(:password, "cannot be blank") if self.password == ""
- end
- end
- ######################## VIEWS #########################################################
- ################## FORM PARTIAL ## users/_form.erb ########################################
- <% if @errors && @errors.any? %>
- <ul class="errors">
- <% @errors.each do |error| %>
- <li><%= error %></li>
- <% end %>
- </ul>
- <% end %>
- <form action="/users" method="post">
- <div>
- <label for="first_name">First Name:</label>
- <input name="user[first_name]" placeholder="First Name" value="<%= @user.first_name %>"></input>
- </div>
- <div>
- <label for="last_name">Last Name:</label>
- <input name="user[last_name]" placeholder="Last Name" value="<%= @user.last_name %>"></input>
- </div>
- <div>
- <label for="email">Email:</label>
- <input name="user[email]" placeholder="email" value="<%= @user.email %>"></input>
- </div>
- <div>
- <label for="password">Password:</label>
- <input type="password" name="user[password]" placeholder="password"></input>
- </div>
- <div>
- <input type="submit" name="Register" />
- </div>
- </form>
- ########################### VIEWS ##################################################
- ##################### users/profile.erb #############################################
- <h1><%= current_user.first_name %>'s Profile Page</h1>
- <%= erb :'/channels/_channels', locals: { channels: current_user.channels } %>
- <h2>Total Monthly Bill:</h2>
- <div class="money"><%= current_user.monthly_cost %></div>
- ########################### VIEWS ##################################################
- ##################### sessions/login.erb #############################################
- <% if @errors && @errors.any? %>
- <ul class="errors">
- <% @errors.each do |error| %>
- <li><%= error %></li>
- <% end %>
- </ul>
- <% end %>
- <form action="/login" method="post">
- <div>
- <label for="email">Email:</label>
- <input name="user[email]" placeholder="email" value="<%= @user.email %>"></input>
- </div>
- <div>
- <label for="password">Password:</label>
- <input type="password" name="user[password]" placeholder="password"></input>
- </div>
- <div>
- <input type="submit" name="Register" />
- </div>
- </form>
- ########################## VIEWS #####################################################
- ##################### sessions/logout.erb #############################################
- <form class="delete" action="/logout" method="post">
- <input type="hidden" name="_method" value="delete" />
- <input type="submit" value="Logout" class="delete" />
- </form>
- ######################### VIEWS ###################################################
- ##################### layouts/_nav.erb #############################################
- <nav>
- <span class="brand">
- Time Warner Cable <span>America's favorite cable company</span>
- </span>
- <ul>
- <li><a href="/channels">Channels</a></li>
- <% if current_user %>
- <li><a href="/profile">Profile</a></li>
- <li><%= erb :'/sessions/logout_form' %></li>
- <% else %>
- <li><a href="/register">Register</a></li>
- <li><a href="/login">Login</a></li>
- <% end %>
- </ul>
- </nav>
- ######################## helpers ##################################################
- ######################## users.rb ##################################################
- helpers do
- def current_user
- @current_user ||= User.find_by(id: session[:user_id])
- end
- def logged_in?
- !current_user.nil?
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement