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