module Ninsho class Authentication PARENT_RESOURCE_NAME = Ninsho.parent_resource_name.to_s.downcase def initialize(omniauth = nil) @omniauth = omniauth @provider = omniauth['provider'] @uid = omniauth['uid'] @email = omniauth['info']['email'] end def authenticated? user.present? end def from_oauth Ninsho.resource_class.find_by_provider_and_uid(@provider, @uid) end def from_user user = Ninsho.parent_resource_name.send :find_by_email, @email if user user.send("#{Ninsho.resource_name.pluralize}").build(provider: @provider, uid: @uid) user.send(:save) user else user = Ninsho.parent_resource_name.send :new, { email: @email } user.send("#{Ninsho.resource_name.pluralize}").build(provider: @provider, uid: @uid) user.send(:save) user end end def user from_oauth.try(Ninsho.parent_resource_name.to_s.downcase.to_sym) || from_user end end end