From 026db24b2ae5e55f59812c4eb6e9d7476ab746c5 Mon Sep 17 00:00:00 2001 From: David Gil Date: Tue, 25 Aug 2015 13:10:39 +0200 Subject: [PATCH] split long method into shorter, SRPer ones --- app/models/identity.rb | 7 +++++++ app/models/user.rb | 46 +++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/app/models/identity.rb b/app/models/identity.rb index e0778dfae..3ba19e3fa 100644 --- a/app/models/identity.rb +++ b/app/models/identity.rb @@ -7,4 +7,11 @@ class Identity < ActiveRecord::Base def self.find_for_oauth(auth) where(uid: auth.uid, provider: auth.provider).first_or_create end + + def update_user(new_user) + return unless user != new_user + + self.user = new_user + save! + end end diff --git a/app/models/user.rb b/app/models/user.rb index 4a1839b34..7cff8d732 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,33 +40,29 @@ class User < ActiveRecord::Base # Note that this may leave zombie accounts (with no associated identity) which # can be cleaned up at a later date. user = signed_in_resource ? signed_in_resource : identity.user - - # Create the user if needed - if user.nil? - - # Get the existing user by email if the provider gives us a verified email. - # If no verified email was provided we assign a temporary email and ask the - # user to verify it on the next step via RegistrationsController.finish_signup - email_is_verified = auth.info.email && (auth.info.verified || auth.info.verified_email) - email = auth.info.email if email_is_verified - user = User.where(email: email).first if email - - # Create the user if it's a new registration - if user.nil? - user = User.new( - username: auth.info.nickname || auth.extra.raw_info.name.parameterize('-') || auth.uid, - email: email ? email : "#{OMNIAUTH_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com", - password: Devise.friendly_token[0,20] - ) - user.skip_confirmation! - user.save! - end - end + user ||= first_or_create_for_oauth(auth) # Associate the identity with the user if needed - if identity.user != user - identity.user = user - identity.save! + identity.update_user(user) + user + end + + # Get the existing user by email if the provider gives us a verified email. + # If no verified email was provided we assign a temporary email and ask the + # user to verify it on the next step via RegistrationsController.finish_signup + def self.first_or_create_for_oauth(auth) + email = auth.info.email if auth.info.verified || auth.info.verified_email + user = User.where(email: email).first if email + + # Create the user if it's a new registration + if user.nil? + user = User.new( + username: auth.info.nickname || auth.extra.raw_info.name.parameterize('-') || auth.uid, + email: email ? email : "#{OMNIAUTH_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com", + password: Devise.friendly_token[0,20] + ) + user.skip_confirmation! + user.save! end user