More advance signup flow

This commit is contained in:
2015-02-24 17:56:06 +01:00
parent 16418dde30
commit cb723ea432
19 changed files with 123 additions and 48 deletions
+16 -8
View File
@@ -1,19 +1,20 @@
class NewSupplier
include ActiveAttr::Model
attr_accessor :current_employee
attr_reader :employee, :supplier
attribute :supplier_name
attribute :email
attribute :password
attribute :password_confirmation
without_current_supplier = { unless: 'current_employee.present?' }
without_current_employee = { unless: 'current_employee.present?' }
validates :supplier_name, presence: true
validates :email, email: without_current_supplier
validates :password, presence: without_current_supplier, confirmation: without_current_supplier
validates :email, email: without_current_employee
validates :password, presence: without_current_employee, confirmation: without_current_employee
validate :supplier_name_uniqueness
validate :employee_uniqueness
validate :employee_uniqueness_or_existence
def save
if valid?
@@ -27,15 +28,22 @@ class NewSupplier
private
def persist!
employee = Employee.new unconfirmed_email: email, password: password, password_confirmation: password_confirmation
@employee ||= Employee.new email: email, password: password, password_confirmation: password_confirmation
raise "Cannot create employee with #{attributes.inspect}" unless employee.save
supplier = Supplier.create name: supplier_name
@supplier = Supplier.create name: supplier_name
supplier.add_manager employee
end
def employee_uniqueness
def employee_uniqueness_or_existence
return if current_employee.present?
errors.add :email, :taken if Employee.count_by_email(email) > 0
if Employee.count_by_email(email) > 0
employee = Employee.find_by_email(email)
if employee.valid_password? password
@employee = employee
else
errors.add :email, :taken
end
end
end
def supplier_name_uniqueness