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
|