Class: User
- Inherits:
-
Usman::ApplicationRecord
- Object
- ActiveRecord::Base
- Usman::ApplicationRecord
- User
- Defined in:
- app/models/user.rb
Constant Summary collapse
- PENDING =
Constants
"pending"- APPROVED =
"approved"- SUSPENDED =
"suspended"- STATUS =
{ PENDING => "Pending", APPROVED => "Approved", SUSPENDED => "Suspended" }
- STATUS_REVERSE =
{ "Pending" => PENDING, "Approved" => APPROVED, "Suspended" => SUSPENDED }
- MALE =
"male"- FEMALE =
"female"- NOGENDER =
"nogender"- GENDER =
{ MALE => "Male", FEMALE => "Female", NOGENDER => "No Gender" }
- GENDER_REVERSE =
{ "Male" => MALE, "Female" => FEMALE, "No Gender" => NOGENDER }
- EXCLUDED_JSON_ATTRIBUTES =
[:confirmation_token, :password_digest, :reset_password_token, :auth_token, :unlock_token, :status, :reset_password_sent_at, :remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip, :confirmed_at, :confirmation_sent_at, :unconfirmed_email, :failed_attempts, :locked_at, :created_at, :updated_at]
- DEFAULT_PASSWORD =
"Password@1"- SESSION_TIME_OUT =
120.minutes
Class Method Summary collapse
-
.save_row_data(hsh) ⇒ Object
Import Methods.
Instance Method Summary collapse
-
#add_permission(feature_name, **options) ⇒ Object
Permission Methods ——————.
-
#add_role(role) ⇒ Object
Role Methods ————.
-
#approve! ⇒ Object
change the status to :approved Return the status == Examples >>> user.approve! => “approved”.
-
#approved? ⇒ Boolean
-
Return true if the user is not approved, else false.
-
-
#as_json(options = {}) ⇒ Object
Exclude some attributes info from json output.
- #assign_default_password ⇒ Object
- #can_be_approved? ⇒ Boolean
- #can_be_deleted? ⇒ Boolean
- #can_be_edited? ⇒ Boolean
- #can_be_marked_as_pending? ⇒ Boolean
- #can_be_suspended? ⇒ Boolean
- #can_create?(feature_name) ⇒ Boolean
- #can_delete?(feature_name) ⇒ Boolean
- #can_read?(feature_name) ⇒ Boolean
- #can_update?(feature_name) ⇒ Boolean
- #default_image_url(size = "small") ⇒ Object
-
#display_name ⇒ Object
-
Return full name == Examples >>> user.display_name => “Joe Black”.
-
- #end_session ⇒ Object
-
#female? ⇒ Boolean
-
Return true if the user is female, else false.
-
- #generate_dummy_data(registration_id = nil) ⇒ Object
- #generate_reset_password_token ⇒ Object
- #generate_username_and_password ⇒ Object
- #has_create_permission?(class_name) ⇒ Boolean
- #has_delete_permission?(class_name) ⇒ Boolean
- #has_read_permission?(class_name) ⇒ Boolean
- #has_role?(role) ⇒ Boolean
- #has_update_permission?(class_name) ⇒ Boolean
-
#male? ⇒ Boolean
-
Return true if the user is male, else false.
-
-
#nogender? ⇒ Boolean
-
Return true if the user is nogender, else false.
-
-
#pending! ⇒ Object
change the status to :pending Return the status == Examples >>> user.pending! => “pending”.
-
#pending? ⇒ Boolean
-
Return true if the user is pending, else false.
-
- #remove_role(role) ⇒ Object
-
#set_permission(feature_name, **options) ⇒ Object
Permission Methods ——————.
-
#start_session(remote_ip) ⇒ Object
Authentication Methods ———————-.
-
#suspend! ⇒ Object
change the status to :suspended Return the status == Examples >>> user.suspend! => “suspended”.
-
#suspended? ⇒ Boolean
-
Return true if the user is suspended, else false.
-
Class Method Details
.save_row_data(hsh) ⇒ Object
Import Methods
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'app/models/user.rb', line 110 def self.save_row_data(hsh) return if hsh[:name].blank? user = User.find_by_username(hsh[:username]) || User.new user.name = hsh[:name] user.username = hsh[:username] user.designation = hsh[:designation] user.email = hsh[:email] user.phone = hsh[:phone] user.super_admin = ["true", "t","1","yes","y"].include?(hsh[:super_admin].to_s.downcase.strip) user.status = hsh[:status] user.assign_default_password # Initializing error hash for displaying all errors altogether error_object = Kuppayam::Importer::ErrorHash.new if user.valid? begin user.save! rescue Exception => e summary = "uncaught #{e} exception while handling connection: #{e.}" details = "Stack trace: #{e.backtrace.map {|l| " #{l}\n"}.join}" error_object.errors << { summary: summary, details: details } end else summary = "Error while saving user: #{user.name}" details = "Error! #{user.errors..to_sentence}" error_object.errors << { summary: summary, details: details } end return error_object end |
Instance Method Details
#add_permission(feature_name, **options) ⇒ Object
Permission Methods
364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'app/models/user.rb', line 364 def (feature_name, **) .reverse_merge!( can_create: false, can_read: true, can_update: false, can_delete: false ) feature = Feature.find_by_name(feature_name) = self..where("feature_id = ?", feature.id).first || self..build .feature = feature .can_create = [:can_create] .can_read = [:can_read] .can_update = [:can_update] .can_delete = [:can_delete] .save end |
#add_role(role) ⇒ Object
Role Methods
335 336 337 338 339 340 341 342 343 344 |
# File 'app/models/user.rb', line 335 def add_role(role) return false unless self.approved? role = Role.find_by_name(role) if role.is_a?(String) if role self.roles << role unless self.has_role?(role) return true else return false end end |
#approve! ⇒ Object
change the status to :approved Return the status
Examples
>>> user.approve!
=> "approved"
192 193 194 195 |
# File 'app/models/user.rb', line 192 def approve! self.update_attribute(:status, APPROVED) self.registration.update_attribute(:status, Registration::VERIFIED) if self.registration end |
#approved? ⇒ Boolean
-
Return true if the user is not approved, else false.
Examples
>>> user.approved?
=> true
157 158 159 |
# File 'app/models/user.rb', line 157 def approved? (status == APPROVED) end |
#as_json(options = {}) ⇒ Object
Exclude some attributes info from json output.
73 74 75 76 77 78 79 80 |
# File 'app/models/user.rb', line 73 def as_json(={}) [:except] ||= EXCLUDED_JSON_ATTRIBUTES #options[:include] ||= [] #options[:methods] = [] #options[:methods] << :profile_image json = super() Hash[*json.map{|k, v| [k, v || ""]}.flatten] end |
#assign_default_password ⇒ Object
256 257 258 259 |
# File 'app/models/user.rb', line 256 def assign_default_password self.password = DEFAULT_PASSWORD self.password_confirmation = DEFAULT_PASSWORD end |
#can_be_approved? ⇒ Boolean
312 313 314 |
# File 'app/models/user.rb', line 312 def can_be_approved? pending? or suspended? end |
#can_be_deleted? ⇒ Boolean
324 325 326 |
# File 'app/models/user.rb', line 324 def can_be_deleted? suspended? end |
#can_be_edited? ⇒ Boolean
328 329 330 |
# File 'app/models/user.rb', line 328 def can_be_edited? !suspended? end |
#can_be_marked_as_pending? ⇒ Boolean
316 317 318 |
# File 'app/models/user.rb', line 316 def can_be_marked_as_pending? approved? or suspended? end |
#can_be_suspended? ⇒ Boolean
320 321 322 |
# File 'app/models/user.rb', line 320 def can_be_suspended? approved? or pending? end |
#can_create?(feature_name) ⇒ Boolean
284 285 286 287 288 289 |
# File 'app/models/user.rb', line 284 def can_create?(feature_name) feature = get_feature(feature_name) = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first && .can_create? end |
#can_delete?(feature_name) ⇒ Boolean
305 306 307 308 309 310 |
# File 'app/models/user.rb', line 305 def can_delete?(feature_name) feature = get_feature(feature_name) = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first && .can_delete? end |
#can_read?(feature_name) ⇒ Boolean
291 292 293 294 295 296 |
# File 'app/models/user.rb', line 291 def can_read?(feature_name) feature = get_feature(feature_name) = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first && .can_read? end |
#can_update?(feature_name) ⇒ Boolean
298 299 300 301 302 303 |
# File 'app/models/user.rb', line 298 def can_update?(feature_name) feature = get_feature(feature_name) = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first && .can_update? end |
#default_image_url(size = "small") ⇒ Object
437 438 439 |
# File 'app/models/user.rb', line 437 def default_image_url(size="small") "/assets/kuppayam/defaults/user-#{size}.png" end |
#display_name ⇒ Object
-
Return full name
Examples
>>> user.display_name
=> "Joe Black"
433 434 435 |
# File 'app/models/user.rb', line 433 def display_name "#{name}" end |
#end_session ⇒ Object
246 247 248 249 250 251 252 253 254 |
# File 'app/models/user.rb', line 246 def end_session self.last_sign_in_at = self.current_sign_in_at self.last_sign_in_ip = self.current_sign_in_ip self.current_sign_in_at = nil self.current_sign_in_ip = nil self.save end |
#female? ⇒ Boolean
-
Return true if the user is female, else false.
Examples
>>> user.female?
=> true
222 223 224 |
# File 'app/models/user.rb', line 222 def female? (gender == FEMALE) end |
#generate_dummy_data(registration_id = nil) ⇒ Object
449 450 451 452 453 454 |
# File 'app/models/user.rb', line 449 def generate_dummy_data(registration_id=nil) generate_username_and_password self.email = "#{self.username}@donedealapps.com" self.name = "User #{registration_id}" self.dummy = true end |
#generate_reset_password_token ⇒ Object
261 262 263 264 |
# File 'app/models/user.rb', line 261 def generate_reset_password_token self.reset_password_token = SecureRandom.hex unless self.reset_password_token self.reset_password_sent_at = Time.now unless self.reset_password_sent_at end |
#generate_username_and_password ⇒ Object
441 442 443 444 445 446 447 |
# File 'app/models/user.rb', line 441 def generate_username_and_password self.username = SecureRandom.hex(4) unless self.username # Password should contain at least one special character, integer and one upper case character passwd = SecureRandom.hex(8) + "A@1" unless self.password self.password = passwd self.password_confirmation = passwd end |
#has_create_permission?(class_name) ⇒ Boolean
393 394 395 396 397 398 399 400 401 402 |
# File 'app/models/user.rb', line 393 def (class_name) return true if self.super_admin feature = Feature.published.find_by_name(class_name.to_s) if feature = self..where("feature_id =?", feature.id).first return && .can_create? else return false end end |
#has_delete_permission?(class_name) ⇒ Boolean
415 416 417 418 419 420 421 422 423 424 |
# File 'app/models/user.rb', line 415 def (class_name) return true if self.super_admin feature = Feature.published.find_by_name(class_name.to_s) if feature = self..where("feature_id =?", feature.id).first return && .can_delete? else return false end end |
#has_read_permission?(class_name) ⇒ Boolean
382 383 384 385 386 387 388 389 390 391 |
# File 'app/models/user.rb', line 382 def (class_name) return true if self.super_admin feature = Feature.published.find_by_name(class_name.to_s) if feature = self..where("feature_id =?", feature.id).first return && .can_read? else return false end end |
#has_role?(role) ⇒ Boolean
351 352 353 354 355 356 357 358 359 |
# File 'app/models/user.rb', line 351 def has_role?(role) role = Role.find_by_name(role) if role.is_a?(String) if role && role.persisted? return true if self.super_admin self.roles.exists?(:id => [role.id]) else return false end end |
#has_update_permission?(class_name) ⇒ Boolean
404 405 406 407 408 409 410 411 412 413 |
# File 'app/models/user.rb', line 404 def (class_name) return true if self.super_admin feature = Feature.published.find_by_name(class_name.to_s) if feature = self..where("feature_id =?", feature.id).first return && .can_update? else return false end end |
#male? ⇒ Boolean
-
Return true if the user is male, else false.
Examples
>>> user.male?
=> true
214 215 216 |
# File 'app/models/user.rb', line 214 def male? (gender == MALE) end |
#nogender? ⇒ Boolean
-
Return true if the user is nogender, else false.
Examples
>>> user.nogender?
=> true
230 231 232 |
# File 'app/models/user.rb', line 230 def nogender? (gender == NOGENDER) end |
#pending! ⇒ Object
change the status to :pending Return the status
Examples
>>> user.pending!
=> "pending"
182 183 184 185 |
# File 'app/models/user.rb', line 182 def pending! self.update_attribute(:status, PENDING) self.registration.update_attribute(:status, PENDING) if self.registration end |
#pending? ⇒ Boolean
-
Return true if the user is pending, else false.
Examples
>>> user.pending?
=> true
165 166 167 |
# File 'app/models/user.rb', line 165 def pending? (status == PENDING) end |
#remove_role(role) ⇒ Object
346 347 348 349 |
# File 'app/models/user.rb', line 346 def remove_role(role) role = Role.find_by_name(role) if role.is_a?(String) self.roles.delete(role) if role end |
#set_permission(feature_name, **options) ⇒ Object
Permission Methods
269 270 271 272 273 274 275 276 277 278 279 280 281 282 |
# File 'app/models/user.rb', line 269 def (feature_name, **) .reverse_merge!( can_create: false, can_read: true, can_update: false, can_delete: false ) feature = get_feature(feature_name) = Permission.where("user_id = ? AND feature_id = ?", self.id, feature.id).first || Permission.new(user: self, feature: feature) .assign_attributes() .save end |
#start_session(remote_ip) ⇒ Object
Authentication Methods
237 238 239 240 241 242 243 244 |
# File 'app/models/user.rb', line 237 def start_session(remote_ip) self.current_sign_in_at = Time.now self.current_sign_in_ip = remote_ip self.sign_in_count = self.sign_in_count ? self.sign_in_count + 1 : 1 self.save end |
#suspend! ⇒ Object
change the status to :suspended Return the status
Examples
>>> user.suspend!
=> "suspended"
202 203 204 205 |
# File 'app/models/user.rb', line 202 def suspend! self.update_attribute(:status, SUSPENDED) self.registration.update_attribute(:status, SUSPENDED) if self.registration end |
#suspended? ⇒ Boolean
-
Return true if the user is suspended, else false.
Examples
>>> user.suspended?
=> true
173 174 175 |
# File 'app/models/user.rb', line 173 def suspended? (status == SUSPENDED) end |