app/models/pbw/user.rb in pbw-0.0.9 vs app/models/pbw/user.rb in pbw-0.0.10
- old
+ new
@@ -4,11 +4,11 @@
include ::Mongoid::Timestamps
ROLES = %W{superadmin admin moderator player}
devise :database_authenticatable, :registerable, :timeoutable,
- :recoverable, :rememberable, :trackable, :validatable, :lockable
+ :recoverable, :rememberable, :trackable, :lockable
## Database authenticatable
field :email, :type => String, :default => ""
field :encrypted_password, :type => String, :default => ""
@@ -25,25 +25,27 @@
field :last_sign_in_at, :type => Time
field :current_sign_in_ip, :type => String
field :last_sign_in_ip, :type => String
field :name, :type => String
- validates_presence_of :name
- validates_uniqueness_of :name, :email, :case_sensitive => false
- validates_format_of :email, :with => /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/
- validates_confirmation_of :password
-
+
field :role, :type => String, :default => 'player'
## Lockable
field :failed_attempts, :type => Integer, :default => 0 # Only if lock strategy is :failed_attempts
field :unlock_token, :type => String # Only if unlock strategy is :email or :both
field :locked_at, :type => Time
- has_many :resource_containers
- has_many :tokens
+ has_many :item_containers, :class_name => 'Pbw::ItemContainer'
+ has_many :tokens, :class_name => 'Pbw::Token'
+ validates :name, presence: true
+ validates :password, confirmation: true, length: {minimum: 8}
+ validates :email, uniqueness: {case_sensitive: false}, format: {with: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/}
+
+ attr_accessible :email, :name, :password, :password_confirmation
+
def superadmin?
self.role == "superadmin"
end
def make_superadmin!
@@ -71,10 +73,26 @@
def player?
self.role == "player"
end
+ def send_registration_email
+ UserMailer.registration(self).deliver
+ end
+
+ def reset_password!
+ token = User.friendly_token
+ self.password = token
+ self.password_confirmation = token
+ save!
+ send_password_email(token)
+ end
+
+ def send_password_email(password)
+ UserMailer.password_reset(self,password).deliver
+ end
+
def self.viewable_by?(user, subject)
true
end
def self.creatable_by?(user, subject)
@@ -85,8 +103,12 @@
user.admin? || subject == user
end
def self.deletable_by?(user, subject)
user.admin?
+ end
+
+ def self.friendly_token
+ SecureRandom.base64(15).tr('+/=lIO0', 'pqrsxyz')
end
end
end