Class: User

Inherits:
ApplicationRecord show all
Includes:
Checkable, Toggleable
Defined in:
app/models/user.rb

Overview

User

Constant Summary collapse

METRIC_AUTHENTICATION_SUCCESS =
'users.authentication.success.hit'
METRIC_AUTHENTICATION_FAILURE =
'users.authentication.failure.hit'
METRIC_AUTHENTICATION_EXTERNAL =
'users.authentication.external.hit'
EMAIL_LIMIT =
250
NOTICE_LIMIT =
255
PHONE_LIMIT =
50
SLUG_LIMIT =
250
EMAIL_PATTERN =
/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z0-9][-a-z0-9]+)\z/i.freeze
SCREEN_NAME_LIMIT =
30
SCREEN_NAME_PATTERN =
/\A[-a-z0-9_]{1,30}\z/i.freeze
SCREEN_NAME_PATTERN_HTML =
'^[-a-zA-Z0-9_]{1,30}$'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.entity_parametersObject

Параметры для администрирования



94
95
96
97
98
# File 'app/models/user.rb', line 94

def self.entity_parameters
  flags = %i[bot allow_login email_confirmed phone_confirmed foreign_slug]

  new_profile_parameters + flags + %i[screen_name notice balance]
end

.ids_rangeObject



100
101
102
103
104
# File 'app/models/user.rb', line 100

def self.ids_range
  min = User.minimum(:id).to_i
  max = User.maximum(:id).to_i
  (min..max)
end

.new_profile_parametersObject

Параметры при регистрации



89
90
91
# File 'app/models/user.rb', line 89

def self.new_profile_parameters
  profile_parameters + sensitive_parameters + %i[screen_name]
end

.page_for_administration(page, search_query = '') ⇒ Object

Parameters:

  • page (Integer)
  • search_query (String) (defaults to: '')


76
77
78
# File 'app/models/user.rb', line 76

def self.page_for_administration(page, search_query = '')
  list_for_administration.search(search_query).page(page)
end

.profile_parametersObject



80
81
82
# File 'app/models/user.rb', line 80

def self.profile_parameters
  %i[image allow_mail birthday consent]
end

.sensitive_parametersObject



84
85
86
# File 'app/models/user.rb', line 84

def self.sensitive_parameters
  %i[email phone password password_confirmation]
end

Instance Method Details

#can_receive_letters?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'app/models/user.rb', line 128

def can_receive_letters?
  allow_mail? && !email.blank?
end

#full_name(include_patronymic = false) ⇒ Object

Parameters:

  • include_patronymic (TrueClass|FalseClass) (defaults to: false)


121
122
123
124
125
126
# File 'app/models/user.rb', line 121

def full_name(include_patronymic = false)
  result = [name_for_letter]
  result << data.dig('profile', 'patronymic').to_s.strip if include_patronymic
  result << data.dig('profile', 'surname').to_s.strip
  result.compact.join(' ')
end

#name_for_letterObject



116
117
118
# File 'app/models/user.rb', line 116

def name_for_letter
  data.dig('profile', 'name').blank? ? profile_name : data['profile']['name']
end

#native_slug?Boolean

Returns:

  • (Boolean)


132
133
134
# File 'app/models/user.rb', line 132

def native_slug?
  !foreign_slug?
end

#profile_nameString

Name to be shown as profile

This can be redefined for cases when something other than screen name should be used.

Returns:

  • (String)


112
113
114
# File 'app/models/user.rb', line 112

def profile_name
  screen_name
end