Skip to content

Instantly share code, notes, and snippets.

@madsheep
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madsheep/9368893 to your computer and use it in GitHub Desktop.
Save madsheep/9368893 to your computer and use it in GitHub Desktop.
log-in service example
# session controller
# receives callbacks with oauth
class SessionsController < ApplicationController
skip_before_filter :login_required
def create
login.run!
redirect_to root_path
end
private
def auth_info
request.env['omniauth.auth'].to_hash
end
def user_params
raw_params = ActionController::Parameters.new(auth_info['info'])
raw_params.permit(:first_name, :last_name, :email)
end
def login
LogUserIn.new(session, user_params)
end
end
# app/services/log_user_in.rb
# exsting user logged in with data
# non-existing user created (dispatched to creation service)
class LogUserIn
attr_accessor :session, :data, :user, :email
def initialize session, user_hash
self.session = session
self.data = user_hash
self.email = data[:email]
end
def run!
create_user unless user.present?
session[:user_id] = user.id
end
def create_user
registration.run!
self.user = registration.user
end
def user
@user ||= email && User.find_by(email: email)
end
private
def registration
RegisterUser.new(data) # same style service
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment