Sha256: 1f467eae3c5540a750e4dc4eba9960b8886151fd035d697262199bd354c83941

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module Admin
  class UserNewForm
    include Model::NonPersistent

    field :full_name, type: String
    field :email, type: String
    field :roles, type: Array, default: [:user]

    validates_presence_of :full_name, :email, :roles
    validates_format_of :email, with: /@/, message: :invalid_format

    validate do |record|
      # validate email
      if User.elem_match( :authentications => { :provider => :password, :uid => record.email } ).count > 0
        record.errors.add :email, :taken
      elsif User.elem_match( :emails => { :email => record.email } ).count > 0
        record.errors.add :email, :taken
      end
      # validate roles
      if record.roles_changed?
        unless Role.slugs.contains? record.roles
          record.errors.add :roles, :invalid_roles
        end
      end

    end

    # accessors:
    def roles=( value )
      if value.is_a? Array
        self[:roles] = value.map(&:to_sym)
      elsif value.is_a? String
        self[:roles] = value.split(",").map{|v| v.strip.to_sym}
      else
        raise ArgumentError.new "Invalid value of class #{value.class} passed to roles= setter"
      end
    end

  end # class UserNewForm
end # module Admin

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aerogel-admin-1.4.4 db/model/admin/user_new_form.rb