Class: User

Inherits:
Usman::ApplicationRecord show all
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

Instance Method Summary collapse

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.message}"
      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.full_messages.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 add_permission(feature_name, **options)
  options.reverse_merge!(
    can_create: false,
    can_read: true,
    can_update: false,
    can_delete: false
  )
  feature = Feature.find_by_name(feature_name)
  permission = self.permissions.where("feature_id = ?", feature.id).first || self.permissions.build
  permission.feature = feature
  permission.can_create = options[:can_create]
  permission.can_read = options[:can_read]
  permission.can_update = options[:can_update]
  permission.can_delete = options[:can_delete]
  permission.save
  permission
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

Returns:

  • (Boolean)


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(options={})
  options[:except] ||= EXCLUDED_JSON_ATTRIBUTES
  #options[:include] ||= []
  #options[:methods] = []
  #options[:methods] << :profile_image
  json = super(options)
  Hash[*json.map{|k, v| [k, v || ""]}.flatten]
end

#assign_default_passwordObject



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

Returns:

  • (Boolean)


312
313
314
# File 'app/models/user.rb', line 312

def can_be_approved?
  pending? or suspended?
end

#can_be_deleted?Boolean

Returns:

  • (Boolean)


324
325
326
# File 'app/models/user.rb', line 324

def can_be_deleted?
  suspended?
end

#can_be_edited?Boolean

Returns:

  • (Boolean)


328
329
330
# File 'app/models/user.rb', line 328

def can_be_edited?
  !suspended?
end

#can_be_marked_as_pending?Boolean

Returns:

  • (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

Returns:

  • (Boolean)


320
321
322
# File 'app/models/user.rb', line 320

def can_be_suspended?
  approved? or pending?
end

#can_create?(feature_name) ⇒ Boolean

Returns:

  • (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 = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first
  permission && permission.can_create?
end

#can_delete?(feature_name) ⇒ Boolean

Returns:

  • (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 = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first
  permission && permission.can_delete?
end

#can_read?(feature_name) ⇒ Boolean

Returns:

  • (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 = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first
  permission && permission.can_read?
end

#can_update?(feature_name) ⇒ Boolean

Returns:

  • (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 = Permission.where("feature_id = ? AND user_id = ?", feature.id, self.id).first
  permission && permission.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_nameObject

  • 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_sessionObject



246
247
248
249
250
251
252
253
254
# File 'app/models/user.rb', line 246

def end_session
  self. = self.
  self. = self.
  
  self. = nil
  self. = nil

  self.save
end

#female?Boolean

  • Return true if the user is female, else false.

Examples

>>> user.female?
=> true

Returns:

  • (Boolean)


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_tokenObject



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_passwordObject



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

Returns:

  • (Boolean)


393
394
395
396
397
398
399
400
401
402
# File 'app/models/user.rb', line 393

def has_create_permission?(class_name)
  return true if self.super_admin
  feature = Feature.published.find_by_name(class_name.to_s)
  if feature
    permission = self.permissions.where("feature_id =?", feature.id).first
    return permission && permission.can_create?
  else
    return false
  end
end

#has_delete_permission?(class_name) ⇒ Boolean

Returns:

  • (Boolean)


415
416
417
418
419
420
421
422
423
424
# File 'app/models/user.rb', line 415

def has_delete_permission?(class_name)
  return true if self.super_admin
  feature = Feature.published.find_by_name(class_name.to_s)
  if feature
    permission = self.permissions.where("feature_id =?", feature.id).first
    return permission && permission.can_delete?
  else
    return false
  end
end

#has_read_permission?(class_name) ⇒ Boolean

Returns:

  • (Boolean)


382
383
384
385
386
387
388
389
390
391
# File 'app/models/user.rb', line 382

def has_read_permission?(class_name)
  return true if self.super_admin
  feature = Feature.published.find_by_name(class_name.to_s)
  if feature
    permission = self.permissions.where("feature_id =?", feature.id).first
    return permission && permission.can_read?
  else
    return false
  end
end

#has_role?(role) ⇒ Boolean

Returns:

  • (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

Returns:

  • (Boolean)


404
405
406
407
408
409
410
411
412
413
# File 'app/models/user.rb', line 404

def has_update_permission?(class_name)
  return true if self.super_admin
  feature = Feature.published.find_by_name(class_name.to_s)
  if feature
    permission = self.permissions.where("feature_id =?", feature.id).first
    return permission && permission.can_update?
  else
    return false
  end
end

#male?Boolean

  • Return true if the user is male, else false.

Examples

>>> user.male?
=> true

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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 set_permission(feature_name, **options)
  options.reverse_merge!(
    can_create: false,
    can_read: true,
    can_update: false,
    can_delete: false
  )

  feature = get_feature(feature_name)

  permission = Permission.where("user_id = ? AND feature_id = ?", self.id, feature.id).first || Permission.new(user: self, feature: feature)
  permission.assign_attributes(options)
  permission.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. = Time.now
  self. = remote_ip

  self. = self. ? self. + 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

Returns:

  • (Boolean)


173
174
175
# File 'app/models/user.rb', line 173

def suspended?
  (status == SUSPENDED)
end