scholarslab/prism

View on GitHub
app/models/user.rb

Summary

Maintainability
A
25 mins
Test Coverage
class User < ActiveRecord::Base

  ROLES = %w[admin user]

  has_many :prisms
  has_many :word_markings

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable, :token_authenticatable, :omniauthable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid


  def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
    User.find_from_auth(
      auth.provider, auth.info.email, auth.extra.raw_info.name, auth.uid
    )
  end

  def self.find_for_google_oauth2(access_token, signed_in_resource=nil)
    data = access_token.info
    User.find_from_auth('google', data['email'], data['name'], data['uid'])
  end

  def self.find_for_browserid_oauth(access_token, signed_in_resource=nil)
    data = access_token.info
    User.find_from_auth('browserid', data['email'], data['name'], data['uid'])
  end

  def self.find_from_auth(provider, email, name, uid)
    user = User.where(:email => email).first
    if user
      # Update the login information to the most current every time someone
      # logs in. This makes sure that the avatar is coming from wherever they
      # logged in from for that session.
      user.update_attributes(
        :provider => provider,
        :uid      => uid,
      )
    else
      user = User.create(
        name: name,
        provider: provider,
        uid: uid,
        email: email,
        password: Devise.friendly_token[0,20]
      )
    end
    user
  end

  def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"] if user.email.blank?
      end
    end
  end

end
# == Schema Information
#
# Table name: users
#
#  id                     :integer         not null, primary key
#  email                  :string(255)     default(""), not null
#  encrypted_password     :string(255)     default(""), not null
#  reset_password_token   :string(255)
#  reset_password_sent_at :datetime
#  remember_created_at    :datetime
#  sign_in_count          :integer         default(0)
#  current_sign_in_at     :datetime
#  last_sign_in_at        :datetime
#  current_sign_in_ip     :string(255)
#  last_sign_in_ip        :string(255)
#  created_at             :datetime        not null
#  updated_at             :datetime        not null
#