78 lines
2.6 KiB
Ruby
78 lines
2.6 KiB
Ruby
class Supporter
|
|
include Mongoid::Document
|
|
# Include default devise modules. Others available are:
|
|
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
devise :database_authenticatable, :registerable,
|
|
:recoverable, :rememberable, :trackable, :validatable
|
|
|
|
## Database authenticatable
|
|
field :email, type: String, default: ''
|
|
field :encrypted_password, type: String, default: ''
|
|
|
|
## Recoverable
|
|
field :reset_password_token, type: String
|
|
field :reset_password_sent_at, type: Time
|
|
|
|
## Rememberable
|
|
field :remember_created_at, type: Time
|
|
|
|
## Trackable
|
|
field :sign_in_count, type: Integer, default: 0
|
|
field :current_sign_in_at, type: Time
|
|
field :last_sign_in_at, type: Time
|
|
field :current_sign_in_ip, type: String
|
|
field :last_sign_in_ip, type: String
|
|
|
|
## Confirmable
|
|
# field :confirmation_token, type: String
|
|
# field :confirmed_at, type: Time
|
|
# field :confirmation_sent_at, type: Time
|
|
# field :unconfirmed_email, type: String # Only if using reconfirmable
|
|
|
|
## 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
|
|
include Mongoid::Timestamps
|
|
include Mongoid::Paranoia
|
|
include Geocoder::Model::Mongoid
|
|
|
|
COUNTER_START = 10_003
|
|
|
|
geocoded_by :address
|
|
after_validation :geocode # auto-fetch coordinates
|
|
|
|
field :first_name, type: String
|
|
field :last_name, type: String
|
|
field :street, type: String
|
|
field :zip, type: Integer
|
|
field :city, type: String
|
|
field :support, type: String # Indicates the type of support
|
|
field :li_membership, type: Boolean, default: false
|
|
field :age_category, type: String
|
|
field :coordinates, type: Array
|
|
field :comments, type: String
|
|
field :language, type: String
|
|
field :unsubscribed, type: Boolean, default: false
|
|
field :duplicate, type: Boolean, default: false
|
|
|
|
validates :first_name, presence: true
|
|
validates :last_name, presence: true
|
|
validates :street, presence: true
|
|
validates :zip, presence: true
|
|
validates :city, presence: true
|
|
validates :email, presence: true, uniqueness: true, format: /.+@.+\..+/i
|
|
validates :support, presence: true
|
|
validates :age_category, presence: true
|
|
validates :language, presence: true
|
|
|
|
def self.counter
|
|
actual = count.to_i
|
|
actual > COUNTER_START ? actual : COUNTER_START
|
|
end
|
|
|
|
def address
|
|
"#{street}, #{zip}, #{city}, Switzerland"
|
|
end
|
|
end
|