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



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
145
146
147
# File 'app/models/user.rb', line 113

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




367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
# File 'app/models/user.rb', line 367

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




338
339
340
341
342
343
344
345
346
347
# File 'app/models/user.rb', line 338

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"


195
196
197
198
# File 'app/models/user.rb', line 195

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)


160
161
162
# File 'app/models/user.rb', line 160

def approved?
  (status == APPROVED)
end

#as_json(options = {}) ⇒ Object

Exclude some attributes info from json output.



76
77
78
79
80
81
82
83
# File 'app/models/user.rb', line 76

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



259
260
261
262
# File 'app/models/user.rb', line 259

def assign_default_password
  self.password = DEFAULT_PASSWORD
  self.password_confirmation = DEFAULT_PASSWORD
end

#can_be_approved?Boolean

Returns:

  • (Boolean)


315
316
317
# File 'app/models/user.rb', line 315

def can_be_approved?
  pending? or suspended?
end

#can_be_deleted?Boolean

Returns:

  • (Boolean)


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

def can_be_deleted?
  suspended?
end

#can_be_edited?Boolean

Returns:

  • (Boolean)


331
332
333
# File 'app/models/user.rb', line 331

def can_be_edited?
  !suspended?
end

#can_be_marked_as_pending?Boolean

Returns:

  • (Boolean)


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

def can_be_marked_as_pending?
  approved? or suspended?
end

#can_be_suspended?Boolean

Returns:

  • (Boolean)


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

def can_be_suspended?
  approved? or pending?
end

#can_create?(feature_name) ⇒ Boolean

Returns:

  • (Boolean)


287
288
289
290
291
292
# File 'app/models/user.rb', line 287

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)


308
309
310
311
312
313
# File 'app/models/user.rb', line 308

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)


294
295
296
297
298
299
# File 'app/models/user.rb', line 294

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)


301
302
303
304
305
306
# File 'app/models/user.rb', line 301

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



440
441
442
# File 'app/models/user.rb', line 440

def default_image_url(size="small")
  "/assets/kuppayam/defaults/user-#{size}.png"
end

#display_nameObject

  • Return full name

Examples

>>> user.display_name
=> "Joe Black"


436
437
438
# File 'app/models/user.rb', line 436

def display_name
  "#{name}"
end

#end_sessionObject



249
250
251
252
253
254
255
256
257
# File 'app/models/user.rb', line 249

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)


225
226
227
# File 'app/models/user.rb', line 225

def female?
  (gender == FEMALE)
end

#generate_dummy_data(registration) ⇒ Object



452
453
454
455
456
457
458
459
# File 'app/models/user.rb', line 452

def generate_dummy_data(registration)
  generate_username_and_password
  self.email = "#{self.username}@donedealapps.com"
  self.name = "User #{registration.try(:id)}"
  self.country_id = registration.country_id
  self.city_id = registration.city_id
  self.dummy = true
end

#generate_reset_password_tokenObject



264
265
266
267
# File 'app/models/user.rb', line 264

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



444
445
446
447
448
449
450
# File 'app/models/user.rb', line 444

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)


396
397
398
399
400
401
402
403
404
405
# File 'app/models/user.rb', line 396

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)


418
419
420
421
422
423
424
425
426
427
# File 'app/models/user.rb', line 418

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)


385
386
387
388
389
390
391
392
393
394
# File 'app/models/user.rb', line 385

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)


354
355
356
357
358
359
360
361
362
# File 'app/models/user.rb', line 354

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)


407
408
409
410
411
412
413
414
415
416
# File 'app/models/user.rb', line 407

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

#image_configurationObject

Image Configuration




463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
# File 'app/models/user.rb', line 463

def image_configuration
  {
    "Image::ProfilePicture" => {
      max_upload_limit: 10485760,
      min_upload_limit: 1024,
      resolutions: [400, 400],
      form_upload_image_label: "Upload a new Image",
      form_title: "Upload an Image (Profile)",
      form_sub_title: "Please read the instructions below:",
      form_instructions: [
        "the filename should be in .jpg / .jpeg or .png format",
        "the image resolutions should be <strong>400 x 400 Pixels</strong>",
        "the file size should be greater than 100 Kb and or lesser than <strong>10 MB</strong>"
      ]
    }
  }
end

#male?Boolean

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

Examples

>>> user.male?
=> true

Returns:

  • (Boolean)


217
218
219
# File 'app/models/user.rb', line 217

def male?
  (gender == MALE)
end

#nogender?Boolean

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

Examples

>>> user.nogender?
=> true

Returns:

  • (Boolean)


233
234
235
# File 'app/models/user.rb', line 233

def nogender?
  (gender == NOGENDER)
end

#pending!Object

change the status to :pending Return the status

Examples

>>> user.pending!
=> "pending"


185
186
187
188
# File 'app/models/user.rb', line 185

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)


168
169
170
# File 'app/models/user.rb', line 168

def pending?
  (status == PENDING)
end

#remove_role(role) ⇒ Object



349
350
351
352
# File 'app/models/user.rb', line 349

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




272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'app/models/user.rb', line 272

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




240
241
242
243
244
245
246
247
# File 'app/models/user.rb', line 240

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"


205
206
207
208
# File 'app/models/user.rb', line 205

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)


176
177
178
# File 'app/models/user.rb', line 176

def suspended?
  (status == SUSPENDED)
end