Class: Student

Inherits:
StudentBase show all
Defined in:
lib/source/models/student.rb

Instance Attribute Summary collapse

Attributes inherited from StudentBase

#git, #id

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from StudentBase

#has_contacts?, #has_git?, #short_contact, #valid?, valid_email?, valid_name?, valid_phone?, valid_profile_name?

Constructor Details

#initialize(last_name, first_name, father_name, **options) ⇒ Student

Стандартный конструктор



34
35
36
37
38
39
# File 'lib/source/models/student.rb', line 34

def initialize(last_name, first_name, father_name, **options)
  self.last_name = last_name
  self.first_name = first_name
  self.father_name = father_name
  super(**options)
end

Instance Attribute Details

#father_nameObject

Стандартные геттеры для полей



31
32
33
# File 'lib/source/models/student.rb', line 31

def father_name
  @father_name
end

#first_nameObject

Стандартные геттеры для полей



31
32
33
# File 'lib/source/models/student.rb', line 31

def first_name
  @first_name
end

#last_nameObject

Стандартные геттеры для полей



31
32
33
# File 'lib/source/models/student.rb', line 31

def last_name
  @last_name
end

Class Method Details

.from_hash(hash) ⇒ Object

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
18
19
# File 'lib/source/models/student.rb', line 10

def self.from_hash(hash)
  hash = hash.dup
  raise ArgumentError, 'Fields required: fist_name, last_name, father_name' unless hash.key?(:first_name) && hash.key?(:last_name) && hash.key?(:father_name)

  first_name = hash.delete(:first_name)
  last_name = hash.delete(:last_name)
  father_name = hash.delete(:father_name)

  Student.new(last_name, first_name, father_name, **hash)
end

.from_json_str(str) ⇒ Object

Конструктор из JSON строки



22
23
24
25
# File 'lib/source/models/student.rb', line 22

def self.from_json_str(str)
  params = JSON.parse(str, { symbolize_names: true })
  from_hash(params)
end

Instance Method Details

#last_name_and_initialsObject

Имя пользователя в формате Фамилия И. О.



68
69
70
# File 'lib/source/models/student.rb', line 68

def last_name_and_initials
  "#{last_name} #{first_name[0]}. #{father_name[0]}."
end

#set_contacts(phone: nil, telegram: nil, email: nil) ⇒ Object

Отдельный сеттер для массовой установки контактов



61
62
63
64
65
# File 'lib/source/models/student.rb', line 61

def set_contacts(phone: nil, telegram: nil, email: nil)
  self.phone = phone if phone
  self.telegram = telegram if telegram
  self.email = email if email
end

#short_infoObject

Краткая информация о пользователе



73
74
75
76
77
78
79
# File 'lib/source/models/student.rb', line 73

def short_info
  info = {}
  info[:last_name_and_initials] = last_name_and_initials
  info[:contact] = short_contact
  info[:git] = git
  JSON.generate(info)
end

#to_hashObject



91
92
93
94
95
96
97
98
# File 'lib/source/models/student.rb', line 91

def to_hash
  attrs = {}
  %i[last_name first_name father_name id phone telegram email git].each do |attr|
    attr_val = send(attr)
    attrs[attr] = attr_val unless attr_val.nil?
  end
  attrs
end

#to_json_strObject



100
101
102
# File 'lib/source/models/student.rb', line 100

def to_json_str
  JSON.generate(to_hash)
end

#to_sObject

Методы приведения объекта к строке



82
83
84
85
86
87
88
89
# File 'lib/source/models/student.rb', line 82

def to_s
  result = "#{last_name} #{first_name} #{father_name}"
  %i[id phone telegram email git].each do |attr|
    attr_val = send(attr)
    result += ", #{attr}=#{attr_val}" unless attr_val.nil?
  end
  result
end