This repository has been archived on 2021-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
greenlight/app/models/user.rb

75 lines
1.8 KiB
Ruby
Raw Normal View History

2018-05-07 16:06:01 -04:00
class User < ApplicationRecord
2018-05-09 16:31:52 -04:00
after_create :initialize_room
2018-05-11 15:57:31 -04:00
before_save { email.downcase! unless email.nil? }
2018-05-09 16:31:52 -04:00
2018-05-07 16:06:01 -04:00
has_one :room
2018-05-09 16:31:52 -04:00
validates :name, length: { maximum: 24 }, presence: true
validates :username, presence: true
validates :provider, presence: true
2018-05-11 15:57:31 -04:00
validates :email, length: { maximum: 60 }, allow_nil: true,
2018-05-09 16:31:52 -04:00
uniqueness: { case_sensitive: false },
format: {with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i }
validates :password, length: { minimum: 6 }, allow_nil: true
# We don't want to run the validations because they require a user
# to have a password. Users who authenticate via omniauth won't.
has_secure_password(validations: false)
2018-05-07 16:06:01 -04:00
class << self
# Generates a user from omniauth.
def from_omniauth(auth)
user = find_or_initialize_by(uid: auth['uid'], provider: auth['provider'])
user.name = send("#{auth['provider']}_name", auth)
user.username = send("#{auth['provider']}_username", auth)
user.email = send("#{auth['provider']}_email", auth)
user.save!
user
end
2018-05-11 15:57:31 -04:00
# Generates a user from a trusted launcher.
def from_launch(auth)
end
2018-05-07 16:06:01 -04:00
private
# Provider attributes.
def twitter_name(auth)
auth['info']['name']
end
def twitter_username(auth)
auth['info']['nickname']
end
def twitter_email(auth)
auth['info']['email']
end
def google_name(auth)
auth['info']['name']
end
def google_username(auth)
auth['info']['email'].split('@').first
end
def google_email(auth)
auth['info']['email']
end
end
2018-05-09 16:31:52 -04:00
private
# Initializes a room for the user.
def initialize_room
2018-05-14 14:28:18 -04:00
room = Room.create(user_id: self.id)
Meeting.create(room_id: room.id, name: "Example")
2018-05-09 16:31:52 -04:00
end
2018-05-07 16:06:01 -04:00
end