class Ditty::User

Public Class Methods

anonymous_user() click to toggle source
# File lib/ditty/models/user.rb, line 93
def anonymous_user
  role = ::Ditty::Role.find_or_create(name: 'anonymous')
  ::Ditty::User.where(roles: role).first
end
create_anonymous_user(email = 'anonymous@ditty.io') click to toggle source
# File lib/ditty/models/user.rb, line 98
def create_anonymous_user(email = 'anonymous@ditty.io')
  return if anonymous_user

  user = ::Ditty::User.find_or_create(email: email)
  user.remove_role ::Ditty::Role.find_or_create(name: 'user')
  user.add_role ::Ditty::Role.find_or_create(name: 'anonymous') unless user.role?('anonymous')
end

Public Instance Methods

after_create() click to toggle source

Add the basic roles and identity

Calls superclass method
# File lib/ditty/models/user.rb, line 69
def after_create
  super
  check_roles
end
all_roles() click to toggle source
# File lib/ditty/models/user.rb, line 28
def all_roles
  roles.inject([]) do |memo, role|
    memo + [role] + role.descendants
  end.uniq
end
before_save() click to toggle source
Calls superclass method
# File lib/ditty/models/user.rb, line 62
def before_save
  super
  self.name = nil if name.blank?
  self.surname = nil if surname.blank?
end
check_roles() click to toggle source
# File lib/ditty/models/user.rb, line 74
def check_roles
  return if roles_dataset.first(name: 'anonymous')
  return if roles_dataset.first(name: 'user')

  add_role Role.find_or_create(name: 'user')
end
display_name() click to toggle source
# File lib/ditty/models/user.rb, line 88
def display_name
  name || username
end
gravatar() click to toggle source
# File lib/ditty/models/user.rb, line 48
def gravatar
  hash = Digest::MD5.hexdigest(email.downcase)
  "https://www.gravatar.com/avatar/#{hash}"
end
method_missing(method_sym, *arguments, &block) click to toggle source
Calls superclass method
# File lib/ditty/models/user.rb, line 34
def method_missing(method_sym, *arguments, &block)
  if respond_to_missing?(method_sym)
    role?(method_sym[0..-2])
  else
    super
  end
end
respond_to_missing?(name, _include_private = false) click to toggle source
Calls superclass method
# File lib/ditty/models/user.rb, line 42
def respond_to_missing?(name, _include_private = false)
  return true if name[-1] == '?'

  super
end
role?(check) click to toggle source
# File lib/ditty/models/user.rb, line 18
def role?(check)
  @roles ||= Hash.new do |h, k|
    role_or_descendant = roles.find do |role|
      role.name == k || role.descendants.map(&:name).include?(k)
    end
    h[k] = !role_or_descendant.nil?
  end
  @roles[check]
end
username() click to toggle source
# File lib/ditty/models/user.rb, line 81
def username
  identity = identity_dataset.first
  return identity.username if identity

  email
end
validate() click to toggle source
Calls superclass method
# File lib/ditty/models/user.rb, line 53
def validate
  super
  validates_presence :email
  return if email.blank?

  validates_unique :email
  validates_format(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :email)
end