# coding: utf-8 module DeviseRussian module Models module Base def self.included(base) base.extend ClassMethods end module ClassMethods def omniauthable has_many :authentications, :dependent => :destroy unless included_modules.include? InstanceMethods include InstanceMethods end end end module InstanceMethods def apply_omniauth(omniauth, with_self=false) provider = omniauth['provider'] uid = omniauth['uid'] user_email = omniauth['extra']['raw_info']['email'] rescue nil user_name = omniauth['extra']['raw_info']['first_name'] rescue nil # Facebook omniauth: # extra=# id="100005327070305" last_name="Ru" link="http://www.facebook.com/profile.php?id=100005327070305" locale="ru_RU" name="Lipada Ru" timezone=7 updated_time="2013-02-20T15:25:45+0000" verified=true>> info=# verified=true> provider="facebook" uid="100005327070305"> # Vkontakte omniauth: # extra=#> info=#> provider="vkontakte" uid=201853841> # Odnoklassniki omniauth: # extra=# name="Lipada ru" online="web" pic_1="http://i503.odnoklassniki.ru/res/stub_50x50.gif" pic_2="http://usd8.odnoklassniki.ru/res/stub_128x96.gif" uid="555839750549">> info=#> provider="odnoklassniki" uid="555839750549"> if with_self self.email = user_email if user_email && self.email.blank? self.name = user_name if user_name && self.name.blank? end self.authentications.build( :provider => provider, :uid => uid, :email => user_email, :name => user_name ) end def password_required? (authentications.empty? || !password.blank?) && super end end end end end