class AdvancedGenerator
Public Instance Methods
create_advanced_file()
click to toggle source
Adds the helper, view, controller, test, routes and includes the SessionHelper in the ApplicationController
# File lib/generators/advanced/advanced_generator.rb, line 8 def create_advanced_file copy_file 'new.html.erb', 'app/views/sessions/new.html.erb' copy_file 'sessions_controller_test.rb', 'test/controllers/sessions_controller_test.rb' create_file 'app/helpers/sessions_helper.rb', <<-FILE module SessionsHelper def log_in(user) session[:user_id] = user.id end def remember(user) cookies.permanent.signed[:id] = user.id token = SecureRandom.urlsafe_base64 cookies.permanent[:remember_token] = token user.remember(token) end def create_session(user) log_in(user) remember(user) end def current_user if session[:user_id] @current_user ||= #{file_name.capitalize}.find_by(id: session[:user_id]) elsif cookies.signed[:id] user = #{file_name.capitalize}.find_by(id: cookies.signed[:id]) cond1 = user.authenticated?(cookies[:remember_token]) if user && cond1 @current_user ||= user session[:user_id] = user.id end end end def logged_in? !current_user.nil? end def log_out @current_user = nil session[:user_id] = nil cookies.delete :remember_token cookies.delete :id end def correct_user redirect_to root_path unless current_user == #{file_name.capitalize}.find(params[:id]) end def login_if_not_logged redirect_to login_path unless logged_in? end end FILE create_file 'app/controllers/sessions_controller.rb', <<-FILE class SessionsController < ApplicationController def new; end def create user = #{file_name.capitalize}.find_by(username: params[:session][:username].downcase) if user&.authenticate(params[:session][:password]) create_session user redirect_to user else flash.now[:danger] = 'Invalid username/password combination' render 'new' end end def destroy log_out redirect_to root_path end end FILE copy_file 'custom.scss', 'app/assets/stylesheets/custom.scss' end
file_changes()
click to toggle source
# File lib/generators/advanced/advanced_generator.rb, line 86 def file_changes route "get '/login', to: 'sessions#new'" route "post '/login', to: 'sessions#create'" route "delete '/logout', to: 'sessions#destroy'" inject_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-'RUBY' protect_from_forgery with: :exception include SessionsHelper RUBY end end
inject_user()
click to toggle source
# File lib/generators/advanced/advanced_generator.rb, line 97 def inject_user inject_into_file "app/models/#{file_name.downcase}.rb", after: "class #{file_name.capitalize} < ApplicationRecord\n" do <<-'RUBY' attr_accessor :remember_token ############ # Paste this two functions after your validations and before private (If you have it) def remember(token) self.remember_token = token update_attribute(:remember_digest, BCrypt::Password.create(remember_token)) end def authenticated?(remember_token) BCrypt::Password.new(remember_digest).is_password?(remember_token) end ############ RUBY end end
migration()
click to toggle source
# File lib/generators/advanced/advanced_generator.rb, line 115 def migration generate 'migration', "add_remember_digest_to_#{file_name.downcase}s remember_digest:string" end