rafmycat 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|