Sha256: 8ee70e12874f938832b1add460ed5320dd9a78117fb1c6ad72c1a29e4e9f2885

Contents?: true

Size: 1.6 KB

Versions: 2

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

##
# Модель с краткой информацией о студенте

class StudentShort < StudentBase
  public_class_method :new

  private

  attr_writer :last_name_and_initials, :contact

  public

  attr_reader :last_name_and_initials, :contact

  ##
  # Конструктор из объекта класса Student

  def self.from_student(student)
    raise ArgumentError, 'Student ID is required' if student.id.nil?

    StudentShort.new(student.id, student.short_info)
  end

  ##
  # Стандартный конструктор. Принимает:
  # id - Числовой id студента
  # info_str - JSON строка с полями last_name_and_initials (обязательно), contact, git, а также полями базового класса

  def initialize(id, info_str)
    params = JSON.parse(info_str, { symbolize_names: true })
    raise ArgumentError, 'Fields required: last_name_and_initials' if !params.key?(:last_name_and_initials) || params[:last_name_and_initials].nil?

    self.id = id
    self.last_name_and_initials = params[:last_name_and_initials]
    self.contact = params[:contact]
    self.git = params[:git]

    options = {}
    options[:id] = id
    options[:git] = git
    options[contact[:type].to_sym] = contact[:value] if contact
    super(**options)
  end

  ##
  # Преобразование объекта в строку

  def to_s
    result = last_name_and_initials
    %i[id contact git].each do |attr|
      attr_val = send(attr)
      result += ", #{attr}=#{attr_val}" unless attr_val.nil?
    end
    result
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
shnaider_code-1.1.5 lib/source/models/student_short.rb
shaider-students-0.1.0 models/student_short.rb