lib/olelo/user.rb in olelo-0.9.2 vs lib/olelo/user.rb in olelo-0.9.3
- old
+ new
@@ -27,11 +27,11 @@
def change_password(oldpassword, password, confirm)
User.validate_password(password, confirm)
User.service.change_password(self, oldpassword, password)
end
- def modify(&block)
+ def update(&block)
copy = dup
block.call(copy)
validate
User.service.update(copy)
instance_variables.each do |name|
@@ -40,43 +40,25 @@
end
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\.\-\+_]+/
+ errors << :invalid_name.t if name !~ /[\w\.\-\+]+/
end
end
class Service
include Util
extend Factory
- class NotSupportedError < AuthenticationError
- def initialize(name)
- super(:auth_unsupported.t(:name => name))
- end
- end
-
def find(name)
raise NotImplementedError
end
def authenticate(name, password)
raise NotImplementedError
end
-
- def create(user, password)
- raise NotSupportedError('create')
- end
-
- def update(user)
- raise NotSupportedError('update')
- end
-
- def change_password(user, oldpassword, password)
- raise NotSupportedError('change_password')
- end
end
class<< self
def current
Thread.current[:olelo_user]
@@ -101,12 +83,12 @@
end
end
def anonymous(request)
ip = request.ip || 'unknown-ip'
- name = request.remote_host ? "#{request.remote_host} (#{ip})" : ip
- new(name, "anonymous@#{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
def find!(name)
service.find(name)
end
@@ -117,14 +99,18 @@
def authenticate(name, password)
service.authenticate(name, password).tap {|user| user.groups << 'user' }
end
- def create(name, password, confirm, email)
+ def supports?(method)
+ service.respond_to?(method)
+ end
+
+ def signup(name, password, confirm, email)
validate_password(password, confirm)
user = new(name, email, %w(user))
user.validate
- service.create(user, password)
+ service.signup(user, password)
user
end
end
end