Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # CONTROLLER
- #index
- get '/users' do
- end
- #new
- get '/users/new' do
- # @user = User.new
- erb :"/users/register"
- end
- #create
- post '/users' do
- @user = User.new(params[:user])
- if @user.valid?
- @user.save
- redirect '/'
- else
- @errors = @user.errors.full_messages
- erb :"/users/register"
- end
- end
- #show
- get '/users/:id' do
- @user = User.find_by(id: params[:id])
- erb :"/users/show"
- end
- #edit
- get '/users/:id/edit' do
- end
- #update
- patch '/users/:id' do
- end
- #delete
- delete '/users/:id' do
- end
- get '/login' do
- erb :"/users/login"
- end
- post '/login' do
- @user = User.authenticate(params[:email], params[:password])
- if @user
- session[:user_id] = @user.id
- redirect "/"
- else
- @error = "Email and Password do not match."
- erb :"/users/login"
- end
- end
- delete '/logout' do
- session[:user_id] = nil
- redirect '/'
- end
- # MODEL
- class User < ActiveRecord::Base
- validates :email, presence: true, uniqueness: true
- validates :hashed_password, presence: true
- validates :first_name, :last_name, presence: true
- validate :password_present?
- def self.authenticate(email, password)
- @user = User.find_by(email: email)
- return @user if @user && @user.password == password
- nil
- end
- def password
- @password ||= BCrypt::Password.new(hashed_password)
- end
- def password=(new_password)
- @password = BCrypt::Password.create(new_password)
- self.hashed_password = @password
- end
- def full_name
- "#{first_name} #{last_name}"
- end
- private
- def password_blank?
- password == ""
- end
- def password_present?
- if password_blank?
- errors.add :password, 'cannot be blank.'
- end
- end
- end
- # VIEWS - LOGIN
- <h2>Login</h2><br><br>
- <% if @error %>
- <p><%= @error %></p>
- <% end %>
- <form action="/login" method=POST>
- <label for="email">Email</label>
- <input type="text" name="email"><br><br>
- <label for="password">Password</label>
- <input type="password" name="password"><br><br>
- <input type="submit" value="Login">
- </form>
- # VIEWS - REGISTER
- <h2>Register</h2>
- <% if @errors %>
- <% @errors.each do |msg| %>
- <p><%= msg %></p>
- <% end %>
- <% end %>
- <form action="/users" method=POST>
- <label for="user[first_name]">First Name</label>
- <input type="text" name="user[first_name]">
- <label for="user[last_name]">Last Name</label>
- <input type="text" name="user[last_name]"><br><br>
- <label for="user[email]">Email</label>
- <input type="text" name="user[email]"><br><br>
- <label for="user[password]">Password</label>
- <input type="password" name="user[password]"><br><br>
- <input type="submit" value="Sign up">
- </form>
- # VIEWS - LAYOUT
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <link rel="stylesheet" href="/css/normalize.css?app=skills">
- <link rel="stylesheet" href="/css/application.css?app=skills">
- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
- <script src="/js/application.js?app=skills"></script>
- <title></title>
- </head>
- <body>
- <header>
- <a class="button" href="/">Home</a>
- <% if current_user %>
- <h2><a href="/users/<%= current_user.id %>"><%= current_user.full_name %></a></h2>
- <form action="/logout" method=POST>
- <input type="hidden" name="_method" value=DELETE>
- <input type="submit" value="Logout">
- </form>
- <% else %>
- <a class="button" href="/users/new">Register</a>
- <a class="button" href="/login">Login</a><br><br><br><br>
- <% end %>
- </header>
- <%= yield %>
- </body>
- </html>
- # HELPERS
- helpers do
- def current_user
- @current_user ||= User.find_by(id: session[:user_id])
- end
- def logged_in?
- current_user ? true : false
- end
- end
- # MIGRATION
- class CreateUsers < ActiveRecord::Migration
- def change
- create_table :users do |t|
- t.string :first_name, :null => false
- t.string :last_name, :null => false
- t.string :email, :null => false
- t.string :hashed_password, :null => false
- t.timestamps
- end
- add_index :users, :email, :unique => true
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement