rafmycat 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/Documentation.md +33 -0
 - data/LICENSE.txt +21 -0
 - data/lib/raf/version.rb +5 -0
 - data/lib/raf.rb +10 -0
 - data/lib/source/DBUniversity.rb +37 -0
 - data/lib/source/Students_list_DB.rb +70 -0
 - data/lib/source/controller.rb +119 -0
 - data/lib/source/data/data_list.rb +76 -0
 - data/lib/source/data/data_list_student_short.rb +15 -0
 - data/lib/source/data/data_table.rb +38 -0
 - data/lib/source/logger_holder.rb +20 -0
 - data/lib/source/logicFromWindow.rb +182 -0
 - data/lib/source/strategy/student_list_base.rb +73 -0
 - data/lib/source/strategy/student_list_strategy.rb +10 -0
 - data/lib/source/strategy/students_list_json.rb +16 -0
 - data/lib/source/strategy/students_list_txt.rb +44 -0
 - data/lib/source/strategy/students_list_yaml.rb +20 -0
 - data/lib/source/student/student.rb +151 -0
 - data/lib/source/student/student_short.rb +35 -0
 - data/lib/source/studentFileAdapter.rb +36 -0
 - data/lib/source/studentList.rb +29 -0
 - data/lib/source/student_contact_form_controller.rb +40 -0
 - data/lib/source/student_create_form.rb +67 -0
 - data/lib/source/student_create_form_controller.rb +35 -0
 - data/lib/source/student_edit_form_controller.rb +40 -0
 - data/lib/source/student_git_form_controller.rb +38 -0
 - data/rafmycat.gemspec +17 -0
 - data/sig/ribbish_code.rbs +4 -0
 - metadata +85 -0
 
| 
         @@ -0,0 +1,73 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class StudentListBase
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              attr_writer :data_type
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              # конструктор
         
     | 
| 
      
 6 
     | 
    
         
            +
              def initialize(data_type)
         
     | 
| 
      
 7 
     | 
    
         
            +
                self.students = []
         
     | 
| 
      
 8 
     | 
    
         
            +
                self.this_id = 1
         
     | 
| 
      
 9 
     | 
    
         
            +
                self.data_type = data_type
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def load_from_file(file_address)
         
     | 
| 
      
 13 
     | 
    
         
            +
                list = data_type.string_to_list(File.read(file_address))
         
     | 
| 
      
 14 
     | 
    
         
            +
                self.students = list.map{ |i|
         
     | 
| 
      
 15 
     | 
    
         
            +
                  Student.new(**i)
         
     | 
| 
      
 16 
     | 
    
         
            +
                }
         
     | 
| 
      
 17 
     | 
    
         
            +
                new_this_id
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def save_to_file(file_address)
         
     | 
| 
      
 21 
     | 
    
         
            +
                list = students.map(&:to_hash)
         
     | 
| 
      
 22 
     | 
    
         
            +
                File.write(file_address, data_type.list_to_string(list))
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def student_by_id(student_id)
         
     | 
| 
      
 26 
     | 
    
         
            +
                students.detect { |student_i| student_i.id == student_id}
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def sort_students
         
     | 
| 
      
 31 
     | 
    
         
            +
                students.sort_by(&:short_name)
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def add_student(student)
         
     | 
| 
      
 35 
     | 
    
         
            +
                student.id = this_id
         
     | 
| 
      
 36 
     | 
    
         
            +
                students << student
         
     | 
| 
      
 37 
     | 
    
         
            +
                self.this_id += 1
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def replace_student(id, student)
         
     | 
| 
      
 41 
     | 
    
         
            +
                this_student = students.find_index {
         
     | 
| 
      
 42 
     | 
    
         
            +
                  |stud|
         
     | 
| 
      
 43 
     | 
    
         
            +
                  stud.id == id
         
     | 
| 
      
 44 
     | 
    
         
            +
                }
         
     | 
| 
      
 45 
     | 
    
         
            +
                students[this_student] = student
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              def delete_student(id)
         
     | 
| 
      
 49 
     | 
    
         
            +
                students.reject!{|stud| stud.id == id}
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              def get_k_n_student_short_list(page, n, data_list)
         
     | 
| 
      
 53 
     | 
    
         
            +
                page_list = students[(page-1)*n, n].map{|st| StudentShort.new(st)}
         
     | 
| 
      
 54 
     | 
    
         
            +
                return DataListStudentShort.new(page_list) if data_list.nil?
         
     | 
| 
      
 55 
     | 
    
         
            +
                data_list.replace_objects(page_list)
         
     | 
| 
      
 56 
     | 
    
         
            +
                data_list
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              def student_count
         
     | 
| 
      
 60 
     | 
    
         
            +
                students.size
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              protected
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              attr_accessor :students, :this_id
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              private
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
              def new_this_id
         
     | 
| 
      
 70 
     | 
    
         
            +
                self.this_id = students.max_by(&:id).id.to_i + 1
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
              attr_reader :data_type
         
     | 
| 
      
 73 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'student_list_strategy'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class StudentListJson < StudentListStrategy
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              public_class_method :new
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def string_to_list(str)
         
     | 
| 
      
 10 
     | 
    
         
            +
                JSON.parse(str, {symbolize_names: true})
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def list_to_string(list)
         
     | 
| 
      
 14 
     | 
    
         
            +
                JSON.generate(list)
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'student_list_strategy'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class StudentListTxt < StudentListStrategy
         
     | 
| 
      
 5 
     | 
    
         
            +
              public_class_method :new
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              #Переопределяем методы
         
     | 
| 
      
 8 
     | 
    
         
            +
              def string_to_list(str)
         
     | 
| 
      
 9 
     | 
    
         
            +
                to_hash(str.split("\n").map(&:chomp))
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def list_to_string(list)
         
     | 
| 
      
 13 
     | 
    
         
            +
                to_string(list)
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              #делаем приватными методы реализующие перевод из list в string и наоборот
         
     | 
| 
      
 17 
     | 
    
         
            +
              private
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def to_hash( list_strings)
         
     | 
| 
      
 20 
     | 
    
         
            +
                list_hashes = []
         
     | 
| 
      
 21 
     | 
    
         
            +
                list_strings.each do
         
     | 
| 
      
 22 
     | 
    
         
            +
                |str|
         
     | 
| 
      
 23 
     | 
    
         
            +
                  str = str.gsub('"', "")
         
     | 
| 
      
 24 
     | 
    
         
            +
                  h = {}
         
     | 
| 
      
 25 
     | 
    
         
            +
                  str.split(',').each do |atr|
         
     | 
| 
      
 26 
     | 
    
         
            +
                    key, value = atr.split(':').map(&:strip)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    h[key.to_sym] = value
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  list_hashes << h
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                list_hashes
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def to_string (hashes)
         
     | 
| 
      
 35 
     | 
    
         
            +
                str = hashes.map do
         
     | 
| 
      
 36 
     | 
    
         
            +
                |h|
         
     | 
| 
      
 37 
     | 
    
         
            +
                  h.map{
         
     | 
| 
      
 38 
     | 
    
         
            +
                    |key, value|
         
     | 
| 
      
 39 
     | 
    
         
            +
                    "#{key}: #{value.inspect}"
         
     | 
| 
      
 40 
     | 
    
         
            +
                  }.join(",")
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
                str.join("\n")
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'student_list_strategy'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            class StudentListYaml<StudentListStrategy
         
     | 
| 
      
 7 
     | 
    
         
            +
              public_class_method :new
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              #переопределили методы
         
     | 
| 
      
 11 
     | 
    
         
            +
              def string_to_list(str)
         
     | 
| 
      
 12 
     | 
    
         
            +
                YAML.safe_load(str).map {|h| h.transform_keys(&:to_sym)}
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def list_to_string(list)
         
     | 
| 
      
 16 
     | 
    
         
            +
                list.map {
         
     | 
| 
      
 17 
     | 
    
         
            +
                  |h|
         
     | 
| 
      
 18 
     | 
    
         
            +
                  h.transform_keys(&:to_s)}.to_yaml
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,151 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'student_short'
         
     | 
| 
      
 3 
     | 
    
         
            +
            class Student < StudentShort
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              # создаем методы чтения и записи attr_accessor
         
     | 
| 
      
 6 
     | 
    
         
            +
              attr_accessor :id
         
     | 
| 
      
 7 
     | 
    
         
            +
              attr_reader :last_name, :first_name, :paternal_name, :phone, :git, :telegram, :email
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              #валидатор телефона #+++++++++
         
     | 
| 
      
 10 
     | 
    
         
            +
              def self.valid_phone?(phone)
         
     | 
| 
      
 11 
     | 
    
         
            +
                phone.match(/^\+?[7,8] ?\(?\d{3}\)?-?\d{3}-?\d{2}-?\d{2}$/)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              #валидатор для фамилии имени и отчества ++++
         
     | 
| 
      
 15 
     | 
    
         
            +
              def self.valid_name?(name)
         
     | 
| 
      
 16 
     | 
    
         
            +
                name.match(/^[А-Я][а-я]+$/)
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              #валидатор для git и telegram #++++++
         
     | 
| 
      
 20 
     | 
    
         
            +
              def self.valid_account?(account)
         
     | 
| 
      
 21 
     | 
    
         
            +
                account.match(/^@[A-Za-z0-9\-_]+$/)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              #валидатор почты ++
         
     | 
| 
      
 25 
     | 
    
         
            +
              def self.valid_email?(email)
         
     | 
| 
      
 26 
     | 
    
         
            +
                email.match(/^[A-Za-z0-9\-_]+@[A-Za-z]+\.([A-Za-z]+\.)*[A-Za-z]+$/)
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              # конструктор
         
     | 
| 
      
 30 
     | 
    
         
            +
              def initialize(last_name:nil, first_name:nil, paternal_name:nil, id:nil, phone:nil, git:nil, telegram:nil, email:nil)
         
     | 
| 
      
 31 
     | 
    
         
            +
                raise ArgumentError, "Required fields: last_name, first_name and paternal_name!" if last_name.nil?|| first_name.nil? || paternal_name.nil?
         
     | 
| 
      
 32 
     | 
    
         
            +
                self.last_name = last_name
         
     | 
| 
      
 33 
     | 
    
         
            +
                self.first_name = first_name
         
     | 
| 
      
 34 
     | 
    
         
            +
                self.paternal_name = paternal_name
         
     | 
| 
      
 35 
     | 
    
         
            +
                self.id = id
         
     | 
| 
      
 36 
     | 
    
         
            +
                self.git = git
         
     | 
| 
      
 37 
     | 
    
         
            +
                self.set_contacts(phone:phone, telegram:telegram, email:email)
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
              def self.into_hash(hash)
         
     | 
| 
      
 40 
     | 
    
         
            +
                Student.new(**hash)
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              #++
         
     | 
| 
      
 44 
     | 
    
         
            +
              def self.pars_str(str)
         
     | 
| 
      
 45 
     | 
    
         
            +
                args = JSON.parse(str)
         
     | 
| 
      
 46 
     | 
    
         
            +
                raise ArgumentError,"The argument must have last_name, first_name and paternal_name" unless
         
     | 
| 
      
 47 
     | 
    
         
            +
                  (args.has_key?('last_name') and args.has_key?('first_name') and args.has_key?('paternal_name'))
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                new(last_name: args['last_name'],
         
     | 
| 
      
 50 
     | 
    
         
            +
                    first_name: args['first_name'],
         
     | 
| 
      
 51 
     | 
    
         
            +
                    paternal_name: args['paternal_name'],
         
     | 
| 
      
 52 
     | 
    
         
            +
                    id: args['id'],
         
     | 
| 
      
 53 
     | 
    
         
            +
                    phone: args['phone'],
         
     | 
| 
      
 54 
     | 
    
         
            +
                    git: args['git'],
         
     | 
| 
      
 55 
     | 
    
         
            +
                    telegram: args['telegram'],
         
     | 
| 
      
 56 
     | 
    
         
            +
                    email: args['email'])
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              #(last_name, first_name, paternal_name, id:nil, phone:nil, git:nil, telegram:nil, email:nil)
         
     | 
| 
      
 60 
     | 
    
         
            +
              # ++
         
     | 
| 
      
 61 
     | 
    
         
            +
              def shortName
         
     | 
| 
      
 62 
     | 
    
         
            +
                "#{last_name} #{first_name[0]}. #{paternal_name[0]}."
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              def contact
         
     | 
| 
      
 66 
     | 
    
         
            +
                if phone
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @contact = {type: :phone, value: phone}
         
     | 
| 
      
 68 
     | 
    
         
            +
                elsif telegram
         
     | 
| 
      
 69 
     | 
    
         
            +
                  @contact = {type: :telegram, value: telegram}
         
     | 
| 
      
 70 
     | 
    
         
            +
                elsif email
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @contact = {type: :email, value: email}
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              def getInfo
         
     | 
| 
      
 76 
     | 
    
         
            +
                raise ArgumentError, "Required fields: last_name, first_name and paternal_name!" if last_name.nil?|| first_name.nil? || paternal_name.nil?
         
     | 
| 
      
 77 
     | 
    
         
            +
                info = "#{shortName}"
         
     | 
| 
      
 78 
     | 
    
         
            +
                info += " #{getContact}"  unless getContact.nil?
         
     | 
| 
      
 79 
     | 
    
         
            +
                info += " git= #{git}" unless git.nil?
         
     | 
| 
      
 80 
     | 
    
         
            +
                info
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
              def to_hash
         
     | 
| 
      
 84 
     | 
    
         
            +
                attrs = {}
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                %i[first_name last_name paternal_name id phone telegram email git].each do |attr|
         
     | 
| 
      
 87 
     | 
    
         
            +
                  attr_val = send(attr)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  attrs[attr] = attr_val unless attr_val.nil?
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
                attrs
         
     | 
| 
      
 91 
     | 
    
         
            +
              end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
              #сеттер
         
     | 
| 
      
 94 
     | 
    
         
            +
              def phone=(phone)
         
     | 
| 
      
 95 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: phone=#{phone}!" if !phone.nil? && !Student.valid_phone?(phone)
         
     | 
| 
      
 96 
     | 
    
         
            +
                @phone = phone
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
              def first_name=(first_name)
         
     | 
| 
      
 100 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: first_name=#{first_name}!" if !first_name.nil? && !Student.valid_name?(first_name)
         
     | 
| 
      
 101 
     | 
    
         
            +
                @first_name = first_name
         
     | 
| 
      
 102 
     | 
    
         
            +
              end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
              def last_name=(last_name)
         
     | 
| 
      
 105 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: last_name=#{last_name}!" if !last_name.nil? && !Student.valid_name?(last_name)
         
     | 
| 
      
 106 
     | 
    
         
            +
                @last_name = last_name
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
              def paternal_name=(paternal_name)
         
     | 
| 
      
 110 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: paternal_name=#{paternal_name}!" if !paternal_name.nil? && !Student.valid_name?(paternal_name)
         
     | 
| 
      
 111 
     | 
    
         
            +
                @paternal_name = paternal_name
         
     | 
| 
      
 112 
     | 
    
         
            +
              end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
              def git=(git)
         
     | 
| 
      
 115 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: git=#{git}!" if !git.nil? && !Student.valid_account?(git)
         
     | 
| 
      
 116 
     | 
    
         
            +
                @git = git
         
     | 
| 
      
 117 
     | 
    
         
            +
              end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
              def telegram=(telegram)
         
     | 
| 
      
 120 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: telegram=#{telegram}!" if !telegram.nil? && !Student.valid_account?(telegram)
         
     | 
| 
      
 121 
     | 
    
         
            +
                @telegram = telegram
         
     | 
| 
      
 122 
     | 
    
         
            +
              end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
              def email=(email)
         
     | 
| 
      
 125 
     | 
    
         
            +
                raise ArgumentError, "Incorrect value: email=#{email}!" if !email.nil? && !Student.valid_email?(email)
         
     | 
| 
      
 126 
     | 
    
         
            +
                @email = email
         
     | 
| 
      
 127 
     | 
    
         
            +
              end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
              def validate?
         
     | 
| 
      
 130 
     | 
    
         
            +
                !git.nil? && !email.nil? && !telegram.nil? && !phone.nil?
         
     | 
| 
      
 131 
     | 
    
         
            +
              end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
              def set_contacts(phone: nil, telegram: nil, email: nil)
         
     | 
| 
      
 134 
     | 
    
         
            +
                self.phone = phone if phone
         
     | 
| 
      
 135 
     | 
    
         
            +
                self.email = email if email
         
     | 
| 
      
 136 
     | 
    
         
            +
                self.telegram = telegram if telegram
         
     | 
| 
      
 137 
     | 
    
         
            +
                @contact = contact
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
              def to_s
         
     | 
| 
      
 142 
     | 
    
         
            +
                res = self.last_name + " " + self.first_name + " " + self.paternal_name
         
     | 
| 
      
 143 
     | 
    
         
            +
                res+=" id: #{self.id}" unless self.id.nil?
         
     | 
| 
      
 144 
     | 
    
         
            +
                res+=" phone: #{self.phone}" unless self.phone.nil?
         
     | 
| 
      
 145 
     | 
    
         
            +
                res+=" git: #{self.git}" unless self.git.nil?
         
     | 
| 
      
 146 
     | 
    
         
            +
                res+=" telegram: #{self.telegram}" unless self.telegram.nil?
         
     | 
| 
      
 147 
     | 
    
         
            +
                res+=" email: #{self.email}" unless self.email.nil?
         
     | 
| 
      
 148 
     | 
    
         
            +
                res
         
     | 
| 
      
 149 
     | 
    
         
            +
              end
         
     | 
| 
      
 150 
     | 
    
         
            +
            end
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 2 
     | 
    
         
            +
            #(last_name, first_name, paternal_name, id:nil, phone:nil, git:nil, telegram:nil, email:nil)
         
     | 
| 
      
 3 
     | 
    
         
            +
            class StudentShort
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              attr_reader :id, :git, :contact, :initials
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def initialize(student)
         
     | 
| 
      
 8 
     | 
    
         
            +
                @id = student.id
         
     | 
| 
      
 9 
     | 
    
         
            +
                @initials = "#{student.last_name} #{student.first_name[0]}.#{student.paternal_name[0]}. "
         
     | 
| 
      
 10 
     | 
    
         
            +
                @git = student.git unless student.git.nil?
         
     | 
| 
      
 11 
     | 
    
         
            +
                @contact = student.set_contacts(phone: student.phone, email: student.email, telegram: student.telegram)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def self.from_str(id, str)
         
     | 
| 
      
 15 
     | 
    
         
            +
                result = JSON.parse(str)
         
     | 
| 
      
 16 
     | 
    
         
            +
                raise ArgumentError, 'Missing fields: last_name, first_name, paternal_name' unless result.key?('first_name') &&
         
     | 
| 
      
 17 
     | 
    
         
            +
                  result.key?('last_name') && result.key?('paternal_name')
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                StudentShort.new(Student.new(last_name: result['last_name'],first_name: result['first_name'],
         
     | 
| 
      
 20 
     | 
    
         
            +
                                             paternal_name: result['paternal_name'],id: id,
         
     | 
| 
      
 21 
     | 
    
         
            +
                                             phone: result['phone'], git: result['git'],
         
     | 
| 
      
 22 
     | 
    
         
            +
                                             email: result['email'],telegram: result['telegram']))
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def shortName
         
     | 
| 
      
 26 
     | 
    
         
            +
                "#{@initials}"
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
              def to_s
         
     | 
| 
      
 29 
     | 
    
         
            +
                res = "#{initials}"
         
     | 
| 
      
 30 
     | 
    
         
            +
                res += "id=#{id}" unless id.nil?
         
     | 
| 
      
 31 
     | 
    
         
            +
                res += " git=#{git}" unless git.nil?
         
     | 
| 
      
 32 
     | 
    
         
            +
                res += " #{contact}" unless contact.nil?
         
     | 
| 
      
 33 
     | 
    
         
            +
                res
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '../strategy/student_list_base'
         
     | 
| 
      
 2 
     | 
    
         
            +
            class StudentFileAdapter
         
     | 
| 
      
 3 
     | 
    
         
            +
              def initialize(type_file,file_address)
         
     | 
| 
      
 4 
     | 
    
         
            +
                #обращаемся к экземплярам класса StudentListBase
         
     | 
| 
      
 5 
     | 
    
         
            +
                @file = StudentListBase.new(type_file)
         
     | 
| 
      
 6 
     | 
    
         
            +
                @file.load_from_file(file_address)
         
     | 
| 
      
 7 
     | 
    
         
            +
                @file_address = file_address
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def student_by_id(id_student)
         
     | 
| 
      
 11 
     | 
    
         
            +
                @file.student_by_id(id_student)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def add_student(student)
         
     | 
| 
      
 15 
     | 
    
         
            +
                @file.add_student(student)
         
     | 
| 
      
 16 
     | 
    
         
            +
                @file.save_to_file(@file_address)
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def delete_student(id_student)
         
     | 
| 
      
 20 
     | 
    
         
            +
                @file.delete_student(id_student)
         
     | 
| 
      
 21 
     | 
    
         
            +
                @file.save_to_file(@file_address)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def replace_student(id_student, student)
         
     | 
| 
      
 25 
     | 
    
         
            +
                @file.replace_student(id_student, student)
         
     | 
| 
      
 26 
     | 
    
         
            +
                @file.save_to_file(@file_address)
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              def count_student
         
     | 
| 
      
 30 
     | 
    
         
            +
                @file.count_student
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def get_k_n_student_short_list(page,n, data_list)
         
     | 
| 
      
 34 
     | 
    
         
            +
                @file.get_k_n_student_short_list(page, n, data_list)
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class StudentList
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize(adapter)
         
     | 
| 
      
 3 
     | 
    
         
            +
                @adapter = adapter
         
     | 
| 
      
 4 
     | 
    
         
            +
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def student_by_id(id_student)
         
     | 
| 
      
 7 
     | 
    
         
            +
                @adapter.student_by_id(id_student)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def add_student(student)
         
     | 
| 
      
 11 
     | 
    
         
            +
                @adapter.add_student(student)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def delete_student(id_student)
         
     | 
| 
      
 15 
     | 
    
         
            +
                @adapter.delete_student(id_student)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def replace_student(id_student, student)
         
     | 
| 
      
 19 
     | 
    
         
            +
                @adapter.replace_student(id_student, student)
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def count_student
         
     | 
| 
      
 23 
     | 
    
         
            +
                @adapter.count_student
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def get_k_n_student_short_list(k,n, data_list)
         
     | 
| 
      
 27 
     | 
    
         
            +
                @adapter.get_k_n_student_short_list(k,n, data_list)
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class StudentContactFormController
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize(parent_controller, existing_student_id)
         
     | 
| 
      
 3 
     | 
    
         
            +
                @parent_controller = parent_controller
         
     | 
| 
      
 4 
     | 
    
         
            +
                @existing_student_id = existing_student_id
         
     | 
| 
      
 5 
     | 
    
         
            +
                LoggerHolder.instance.debug('StudentCreateFormController: initialized')
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def view=(view)
         
     | 
| 
      
 9 
     | 
    
         
            +
                @view = view
         
     | 
| 
      
 10 
     | 
    
         
            +
                LoggerHolder.instance.debug('StudentCreateFormController: setter view')
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def on_view_created
         
     | 
| 
      
 14 
     | 
    
         
            +
                @student_list = StudentList.new(StudentListDBAdapter.new)
         
     | 
| 
      
 15 
     | 
    
         
            +
                @existing_student = @student_list.student_by_id(@existing_student_id)
         
     | 
| 
      
 16 
     | 
    
         
            +
                @view.make_readonly(:first_name,:last_name,:paternal_name, :git)
         
     | 
| 
      
 17 
     | 
    
         
            +
                set_fields(@existing_student)
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def set_fields(student)
         
     | 
| 
      
 21 
     | 
    
         
            +
                student = student
         
     | 
| 
      
 22 
     | 
    
         
            +
                puts student
         
     | 
| 
      
 23 
     | 
    
         
            +
                @view.set_value(:last_name, student.last_name)
         
     | 
| 
      
 24 
     | 
    
         
            +
                @view.set_value(:first_name, student.first_name)
         
     | 
| 
      
 25 
     | 
    
         
            +
                @view.set_value(:paternal_name, student.paternal_name)
         
     | 
| 
      
 26 
     | 
    
         
            +
                @view.set_value(:git, student.git)
         
     | 
| 
      
 27 
     | 
    
         
            +
                @view.set_value(:telegram, student.telegram)
         
     | 
| 
      
 28 
     | 
    
         
            +
                @view.set_value(:email, student.email)
         
     | 
| 
      
 29 
     | 
    
         
            +
                @view.set_value(:phone, student.phone)
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def process_fields(fields)
         
     | 
| 
      
 34 
     | 
    
         
            +
                new_student = Student.new(**fields)
         
     | 
| 
      
 35 
     | 
    
         
            +
                @student_list.replace_student(@existing_student_id, new_student)
         
     | 
| 
      
 36 
     | 
    
         
            +
                @view.close
         
     | 
| 
      
 37 
     | 
    
         
            +
                LoggerHolder.instance.debug('StudentCreateFormController: add student')
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,67 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'glimmer-dsl-libui'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'student_create_form_controller'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative '../student/student'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            class StudentCreateForm
         
     | 
| 
      
 9 
     | 
    
         
            +
              include Glimmer
         
     | 
| 
      
 10 
     | 
    
         
            +
              #puts "hello"
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def initialize(controller,existing_student = nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                @existing_student = existing_student.to_hash unless existing_student.nil?
         
     | 
| 
      
 14 
     | 
    
         
            +
                @controller = controller
         
     | 
| 
      
 15 
     | 
    
         
            +
                @entries = {}
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def on_create
         
     | 
| 
      
 19 
     | 
    
         
            +
                @controller.on_view_created
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def create
         
     | 
| 
      
 23 
     | 
    
         
            +
                @root_container = window('Универ', 300, 200) {
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  vertical_box {
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @student_form = form {
         
     | 
| 
      
 27 
     | 
    
         
            +
                      stretchy false
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                      fields = [[:last_name, 'Фамилия', false], [:first_name, 'Имя', false], [:paternal_name, 'Отчество', false], [:git, 'Гит', true], [:telegram, 'Телеграм', true], [:email, 'Почта', true], [:phone, 'Телефон', true]]
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                      fields.each do |field|
         
     | 
| 
      
 32 
     | 
    
         
            +
                        @entries[field[0]] = entry {
         
     | 
| 
      
 33 
     | 
    
         
            +
                          label field[1]
         
     | 
| 
      
 34 
     | 
    
         
            +
                        }
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
                    }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    button('Сохранить') {
         
     | 
| 
      
 39 
     | 
    
         
            +
                      stretchy false
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                      on_clicked {
         
     | 
| 
      
 42 
     | 
    
         
            +
                        values = @entries.transform_values { |v| v.text.force_encoding("utf-8").strip }
         
     | 
| 
      
 43 
     | 
    
         
            +
                        values.transform_values! { |v| v.empty? ? nil : v}
         
     | 
| 
      
 44 
     | 
    
         
            +
                        @controller.process_fields(values)
         
     | 
| 
      
 45 
     | 
    
         
            +
                      }
         
     | 
| 
      
 46 
     | 
    
         
            +
                    }
         
     | 
| 
      
 47 
     | 
    
         
            +
                  }
         
     | 
| 
      
 48 
     | 
    
         
            +
                }
         
     | 
| 
      
 49 
     | 
    
         
            +
                on_create
         
     | 
| 
      
 50 
     | 
    
         
            +
                @root_container
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              def set_value(field, value)
         
     | 
| 
      
 54 
     | 
    
         
            +
                return unless @entries.include?(field)
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                @entries[field].text = value
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              def make_readonly(*fields)
         
     | 
| 
      
 60 
     | 
    
         
            +
                fields.each do |field|
         
     | 
| 
      
 61 
     | 
    
         
            +
                  @entries[field].read_only = true
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
              def close
         
     | 
| 
      
 65 
     | 
    
         
            +
                @root_container.destroy
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'sqlite3'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'studentList'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative 'studentFileAdapter'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'logger_holder'
         
     | 
| 
      
 5 
     | 
    
         
            +
            class StudentCreateFormController
         
     | 
| 
      
 6 
     | 
    
         
            +
              def initialize(controller)
         
     | 
| 
      
 7 
     | 
    
         
            +
                @controller = controller
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def on_view_created
         
     | 
| 
      
 11 
     | 
    
         
            +
                begin
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #raise StandardError "Test"
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @student_rep = StudentList.new(StudentListDBAdapter.new)
         
     | 
| 
      
 14 
     | 
    
         
            +
                rescue SQLException::SQLException => e
         
     | 
| 
      
 15 
     | 
    
         
            +
                  on_db_conn_error(e)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def view=(view)
         
     | 
| 
      
 20 
     | 
    
         
            +
                @view = view
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def process_fields(fields)
         
     | 
| 
      
 24 
     | 
    
         
            +
                student = Student.new(**fields)
         
     | 
| 
      
 25 
     | 
    
         
            +
                @student_rep.add_student(student)
         
     | 
| 
      
 26 
     | 
    
         
            +
                @view.close
         
     | 
| 
      
 27 
     | 
    
         
            +
                @controller.view.refresh_current_page
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def on_db_conn_error(e)
         
     | 
| 
      
 31 
     | 
    
         
            +
                api = Win32API.new('user32', 'MessageBox', ['L', 'P', 'P', 'L'], 'I')
         
     | 
| 
      
 32 
     | 
    
         
            +
                api.call(0, "No connection to DB", "Error", 0)
         
     | 
| 
      
 33 
     | 
    
         
            +
                exit(false)
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'logger_holder'
         
     | 
| 
      
 2 
     | 
    
         
            +
            class StudentEditFormController
         
     | 
| 
      
 3 
     | 
    
         
            +
              def initialize(parent_controller, existing_student_id)
         
     | 
| 
      
 4 
     | 
    
         
            +
                @parent_controller = parent_controller
         
     | 
| 
      
 5 
     | 
    
         
            +
                @existing_student_id = existing_student_id
         
     | 
| 
      
 6 
     | 
    
         
            +
                LoggerHolder.instance.debug('StudentEditFormController: initialized')
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def view=(view)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @view = view
         
     | 
| 
      
 11 
     | 
    
         
            +
                LoggerHolder.instance.debug('StudentEditFormController: view')
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def on_view_created
         
     | 
| 
      
 15 
     | 
    
         
            +
                @student_list = StudentList.new(StudentListDBAdapter.new)
         
     | 
| 
      
 16 
     | 
    
         
            +
                @existing_student = @student_list.student_by_id(@existing_student_id)
         
     | 
| 
      
 17 
     | 
    
         
            +
                @view.make_readonly(:git, :telegram, :email, :phone)
         
     | 
| 
      
 18 
     | 
    
         
            +
                set_fields(@existing_student)
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def set_fields(student)
         
     | 
| 
      
 22 
     | 
    
         
            +
                student = student
         
     | 
| 
      
 23 
     | 
    
         
            +
                puts student
         
     | 
| 
      
 24 
     | 
    
         
            +
                @view.set_value(:last_name, student.last_name)
         
     | 
| 
      
 25 
     | 
    
         
            +
                @view.set_value(:first_name, student.first_name)
         
     | 
| 
      
 26 
     | 
    
         
            +
                @view.set_value(:paternal_name, student.paternal_name)
         
     | 
| 
      
 27 
     | 
    
         
            +
                @view.set_value(:git, student.git)
         
     | 
| 
      
 28 
     | 
    
         
            +
                @view.set_value(:telegram, student.telegram)
         
     | 
| 
      
 29 
     | 
    
         
            +
                @view.set_value(:email, student.email)
         
     | 
| 
      
 30 
     | 
    
         
            +
                @view.set_value(:phone, student.phone)
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def process_fields(fields)
         
     | 
| 
      
 34 
     | 
    
         
            +
                new_student = Student.new(**fields)
         
     | 
| 
      
 35 
     | 
    
         
            +
                LoggerHolder.instance.debug('StudentEditFormController: replace student')
         
     | 
| 
      
 36 
     | 
    
         
            +
                @student_list.replace_student(@existing_student_id, new_student)
         
     | 
| 
      
 37 
     | 
    
         
            +
                @view.close
         
     | 
| 
      
 38 
     | 
    
         
            +
                @parent_controller.view.refresh_current_page
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class StudentGitFormController
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize(parent_controller, existing_student_id)
         
     | 
| 
      
 3 
     | 
    
         
            +
                @parent_controller = parent_controller
         
     | 
| 
      
 4 
     | 
    
         
            +
                @existing_student_id = existing_student_id
         
     | 
| 
      
 5 
     | 
    
         
            +
              end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def view=(view)
         
     | 
| 
      
 8 
     | 
    
         
            +
                @view = view
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def on_view_created
         
     | 
| 
      
 12 
     | 
    
         
            +
                @student_list = StudentList.new(StudentListDBAdapter.new)
         
     | 
| 
      
 13 
     | 
    
         
            +
                @existing_student = @student_list.student_by_id(@existing_student_id)
         
     | 
| 
      
 14 
     | 
    
         
            +
                @view.make_readonly(:first_name,:last_name,:paternal_name, :telegram, :email, :phone)
         
     | 
| 
      
 15 
     | 
    
         
            +
                set_fields(@existing_student)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def set_fields(student)
         
     | 
| 
      
 19 
     | 
    
         
            +
                student = student
         
     | 
| 
      
 20 
     | 
    
         
            +
                puts student
         
     | 
| 
      
 21 
     | 
    
         
            +
                @view.set_value(:last_name, student.last_name)
         
     | 
| 
      
 22 
     | 
    
         
            +
                @view.set_value(:first_name, student.first_name)
         
     | 
| 
      
 23 
     | 
    
         
            +
                @view.set_value(:paternal_name, student.paternal_name)
         
     | 
| 
      
 24 
     | 
    
         
            +
                @view.set_value(:git, student.git)
         
     | 
| 
      
 25 
     | 
    
         
            +
                @view.set_value(:telegram, student.telegram)
         
     | 
| 
      
 26 
     | 
    
         
            +
                @view.set_value(:email, student.email)
         
     | 
| 
      
 27 
     | 
    
         
            +
                @view.set_value(:phone, student.phone)
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              def process_fields(fields)
         
     | 
| 
      
 32 
     | 
    
         
            +
                new_student = Student.new(**fields)
         
     | 
| 
      
 33 
     | 
    
         
            +
                @student_list.replace_student(@existing_student_id, new_student)
         
     | 
| 
      
 34 
     | 
    
         
            +
                @view.close
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
    
        data/rafmycat.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "lib/raf/version"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 6 
     | 
    
         
            +
              spec.name = "rafmycat"
         
     | 
| 
      
 7 
     | 
    
         
            +
              spec.version = Raf::VERSION
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.authors = ["Valentina Goncharenko"]
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.email = ["valentinagoncarenko975@gmail.com"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.summary = "Student App"
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.description = "А gem that allows you to get pass for patterns"
         
     | 
| 
      
 12 
     | 
    
         
            +
              spec.homepage = "https://github.com/yellowcat-dotcom"
         
     | 
| 
      
 13 
     | 
    
         
            +
              spec.license = "MIT"
         
     | 
| 
      
 14 
     | 
    
         
            +
              spec.required_ruby_version = ">= 3.2.0"
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.add_dependency 'sqlite3'
         
     | 
| 
      
 16 
     | 
    
         
            +
              spec.files = Dir.glob("**/*")
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     |