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



102
103
104
105
106
107
108
109
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
# File 'app/models/user.rb', line 102

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_role(role) ⇒ Object

Role Methods




327
328
329
330
331
332
333
334
335
336
# File 'app/models/user.rb', line 327

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"


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

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)


149
150
151
# File 'app/models/user.rb', line 149

def approved?
  (status == APPROVED)
end

#as_json(options = {}) ⇒ Object

Exclude some attributes info from json output.



69
70
71
72
73
74
75
76
# File 'app/models/user.rb', line 69

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



248
249
250
251
# File 'app/models/user.rb', line 248

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

#can_be_approved?Boolean

Returns:

  • (Boolean)


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

def can_be_approved?
  pending? or suspended?
end

#can_be_deleted?Boolean

Returns:

  • (Boolean)


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

def can_be_deleted?
  suspended?
end

#can_be_edited?Boolean

Returns:

  • (Boolean)


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

def can_be_edited?
  !suspended?
end

#can_be_marked_as_pending?Boolean

Returns:

  • (Boolean)


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

def can_be_marked_as_pending?
  approved? or suspended?
end

#can_be_suspended?Boolean

Returns:

  • (Boolean)


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

def can_be_suspended?
  approved? or pending?
end

#can_create?(feature_name) ⇒ Boolean

Returns:

  • (Boolean)


276
277
278
279
280
281
# File 'app/models/user.rb', line 276

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)


297
298
299
300
301
302
# File 'app/models/user.rb', line 297

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)


283
284
285
286
287
288
# File 'app/models/user.rb', line 283

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)


290
291
292
293
294
295
# File 'app/models/user.rb', line 290

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



364
365
366
# File 'app/models/user.rb', line 364

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

#display_nameObject

  • Return full name

Examples

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


360
361
362
# File 'app/models/user.rb', line 360

def display_name
  "#{name}"
end

#end_sessionObject



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

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)


214
215
216
# File 'app/models/user.rb', line 214

def female?
  (gender == FEMALE)
end

#generate_reset_password_tokenObject



253
254
255
256
# File 'app/models/user.rb', line 253

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



368
369
370
371
372
373
374
# File 'app/models/user.rb', line 368

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_role?(role) ⇒ Boolean

Returns:

  • (Boolean)


343
344
345
346
347
348
349
350
351
# File 'app/models/user.rb', line 343

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

#male?Boolean

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

Examples

>>> user.male?
=> true

Returns:

  • (Boolean)


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

def male?
  (gender == MALE)
end

#nogender?Boolean

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

Examples

>>> user.nogender?
=> true

Returns:

  • (Boolean)


222
223
224
# File 'app/models/user.rb', line 222

def nogender?
  (gender == NOGENDER)
end

#pending!Object

change the status to :pending Return the status

Examples

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


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

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)


157
158
159
# File 'app/models/user.rb', line 157

def pending?
  (status == PENDING)
end

#remove_role(role) ⇒ Object



338
339
340
341
# File 'app/models/user.rb', line 338

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




261
262
263
264
265
266
267
268
269
270
271
272
273
274
# File 'app/models/user.rb', line 261

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




229
230
231
232
233
234
235
236
# File 'app/models/user.rb', line 229

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"


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

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)


165
166
167
# File 'app/models/user.rb', line 165

def suspended?
  (status == SUSPENDED)
end