class Olelo::User

Attributes

email[RW]
groups[R]
name[R]

Public Class Methods

anonymous(request) click to toggle source
# File lib/olelo/user.rb, line 86
def anonymous(request)
  ip = request.ip || 'unknown-ip'
  host = request.ip && Socket.gethostbyaddr(request.ip.split('.').map(&:to_i).pack('C*')).first rescue nil
  new(host ? "#{host} (#{ip})" : ip, "anonymous@#{ip}")
end
authenticate(name, password) click to toggle source
# File lib/olelo/user.rb, line 100
def authenticate(name, password)
  service.authenticate(name, password).tap {|user| user.groups << 'user' }
end
current() click to toggle source
# File lib/olelo/user.rb, line 63
def current
  Thread.current[:olelo_user]
end
current=(user) click to toggle source
# File lib/olelo/user.rb, line 67
def current=(user)
  Thread.current[:olelo_user] = user
end
find(name) click to toggle source
# File lib/olelo/user.rb, line 96
def find(name)
  find!(name) rescue nil
end
find!(name) click to toggle source
# File lib/olelo/user.rb, line 92
def find!(name)
  service.find(name)
end
logged_in?() click to toggle source
# File lib/olelo/user.rb, line 71
def logged_in?
  current && current.groups.include?('user')
end
new(name, email, groups = nil) click to toggle source
# File lib/olelo/user.rb, line 23
def initialize(name, email, groups = nil)
  @name, @email, @groups = name, email, Set.new(groups.to_a)
end
service() click to toggle source
# File lib/olelo/user.rb, line 75
def service
  @service ||= Service[Config['authentication.service']].new(Config['authentication'][Config['authentication.service']])
end
signup(name, password, confirm, email) click to toggle source
# File lib/olelo/user.rb, line 108
def signup(name, password, confirm, email)
  validate_password(password, confirm)
  user = new(name, email, %w(user))
  user.validate
  service.signup(user, password)
  user
end
supports?(method) click to toggle source
# File lib/olelo/user.rb, line 104
def supports?(method)
  service.respond_to?(method)
end
validate_password(password, confirm) click to toggle source
# File lib/olelo/user.rb, line 79
def validate_password(password, confirm)
  check do |errors|
    errors << :passwords_do_not_match.t if password != confirm
    errors << :empty_password.t if password.blank?
  end
end

Public Instance Methods

change_password(oldpassword, password, confirm) click to toggle source
# File lib/olelo/user.rb, line 27
def change_password(oldpassword, password, confirm)
  User.validate_password(password, confirm)
  User.service.change_password(self, oldpassword, password)
end
update(&block) click to toggle source
# File lib/olelo/user.rb, line 32
def update(&block)
  copy = dup
  block.call(copy)
  validate
  User.service.update(copy)
  instance_variables.each do |name|
    instance_variable_set(name, copy.instance_variable_get(name))
  end
end
validate() click to toggle source
# File lib/olelo/user.rb, line 42
def validate
  check do |errors|
    errors << :invalid_email.t if email !~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
    errors << :invalid_name.t  if name !~ /[\w\.\-\+]+/
  end
end