papaSquidLib 0.1.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/Gemfile +9 -0
- data/Gemfile.lock +69 -0
- data/lib/controllers/tab_students_controller.rb +43 -0
- data/lib/data_sources/db_client.rb +35 -0
- data/lib/db_config/config.yaml +5 -0
- data/lib/db_config/library_config.yaml +5 -0
- data/lib/db_config/migrations/create_db.sql +3 -0
- data/lib/db_config/migrations/create_tables.sql +29 -0
- data/lib/db_config/mock_data/mock_data.sql +72 -0
- data/lib/logger.rb +27 -0
- data/lib/main.rb +6 -0
- data/lib/manager/controllers/manager_input_form_controller_create.rb +44 -0
- data/lib/manager/controllers/manager_input_form_controller_edit.rb +54 -0
- data/lib/manager/controllers/manager_list_controller.rb +99 -0
- data/lib/manager/manager_db_data_source.rb +63 -0
- data/lib/manager/ui/manager_input_form.rb +69 -0
- data/lib/manager/ui/manager_list_view.rb +168 -0
- data/lib/models/manager.rb +41 -0
- data/lib/models/student.rb +102 -0
- data/lib/models/student_base.rb +100 -0
- data/lib/models/student_short.rb +50 -0
- data/lib/models/task.rb +49 -0
- data/lib/models/user.rb +32 -0
- data/lib/papaSquidLib/version.rb +5 -0
- data/lib/papa_squid_lib.rb +6 -0
- data/lib/repositories/adapters/db_source_adapter.rb +54 -0
- data/lib/repositories/adapters/file_source_adapter.rb +37 -0
- data/lib/repositories/containers/data_list.rb +74 -0
- data/lib/repositories/containers/data_list_student_short.rb +18 -0
- data/lib/repositories/containers/data_table.rb +35 -0
- data/lib/repositories/data_sources/db_data_source.rb +32 -0
- data/lib/repositories/data_sources/file_data_source.rb +75 -0
- data/lib/repositories/data_sources/transformers/data_transformer_base.rb +15 -0
- data/lib/repositories/data_sources/transformers/data_transformer_json.rb +16 -0
- data/lib/repositories/data_sources/transformers/data_transformer_yaml.rb +16 -0
- data/lib/repositories/student_repository.rb +32 -0
- data/lib/state_holders/list_state_notifier.rb +60 -0
- data/lib/task/controllers/task_input_form_controller_create.rb +43 -0
- data/lib/task/controllers/task_input_form_controller_edit.rb +57 -0
- data/lib/task/controllers/task_list_controller.rb +93 -0
- data/lib/task/task_db_data_source.rb +85 -0
- data/lib/task/ui/task_input_form.rb +67 -0
- data/lib/task/ui/task_input_form_factory.rb +26 -0
- data/lib/task/ui/task_list_view.rb +163 -0
- data/lib/user/controllers/user_input_form_controller_create.rb +42 -0
- data/lib/user/controllers/user_input_form_controller_edit.rb +53 -0
- data/lib/user/controllers/user_list_controller.rb +99 -0
- data/lib/user/ui/user_input_form.rb +69 -0
- data/lib/user/ui/user_list_view.rb +170 -0
- data/lib/user/user_db_data_source.rb +71 -0
- data/lib/views/main_window.rb +32 -0
- data/lib/views/tab_students.rb +148 -0
- data/papaSquidLib.gemspec +15 -0
- data/test/manager_test.rb +27 -0
- data/test/state_notifier_test.rb +82 -0
- data/test/task_test.rb +51 -0
- data/test/user_test.rb +39 -0
- metadata +113 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'mysql2'
|
2
|
+
require_relative '../data_sources/db_client'
|
3
|
+
|
4
|
+
class UserDbDataSource
|
5
|
+
def initialize
|
6
|
+
@client = DBClient.instance
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
# добавляет нового пользователя в базу данных, возвращает созданную запись.
|
11
|
+
def add(user)
|
12
|
+
query = "INSERT INTO User (FirstName, LastName, FatherName) VALUES ('#{user.first_name}', '#{user.last_name}', #{user.father_name.nil? ? 'NULL' : "'#{user.father_name}'"})"
|
13
|
+
@client.query(query)
|
14
|
+
user_id = @client.last_id
|
15
|
+
get(user_id)
|
16
|
+
end
|
17
|
+
|
18
|
+
# изменяет данные об пользователе в базе данных, возвращает измененную запись.
|
19
|
+
def change(user)
|
20
|
+
query = "UPDATE User SET FirstName='#{user.first_name}', LastName='#{user.last_name}', FatherName=#{user.father_name.nil? ? 'NULL' : "'#{user.father_name}'"} WHERE UserID=#{user.user_id}"
|
21
|
+
@client.query(query)
|
22
|
+
get(user.user_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
# удаляет запись об пользователе из базы данных.
|
26
|
+
def delete(id)
|
27
|
+
query = "DELETE FROM User WHERE UserID=#{id}"
|
28
|
+
@client.query(query)
|
29
|
+
end
|
30
|
+
|
31
|
+
# возвращает запись об пользователе по заданному id.
|
32
|
+
def get(id)
|
33
|
+
query = "SELECT * FROM User WHERE UserID=#{id}"
|
34
|
+
result = @client.query(query).first
|
35
|
+
if result
|
36
|
+
User.new(result[:'UserID'], result[:'FirstName'], result[:'LastName'], result[:'FatherName'])
|
37
|
+
else
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# возвращает список пользователей с учетом фильтра по наличию отчества и сортировки, позволяет задавать количество элементов на странице и номер страницы.
|
43
|
+
def get_list(page_size, page_num, sort_field, sort_direction, has_father_name = nil)
|
44
|
+
offset = (page_num - 1) * page_size
|
45
|
+
query = "SELECT * FROM User"
|
46
|
+
|
47
|
+
if has_father_name == true
|
48
|
+
query += " WHERE FatherName IS NOT NULL"
|
49
|
+
elsif has_father_name == false
|
50
|
+
query += " WHERE FatherName IS NULL"
|
51
|
+
end
|
52
|
+
|
53
|
+
query += " ORDER BY #{sort_field} #{sort_direction} LIMIT #{page_size} OFFSET #{offset}"
|
54
|
+
results = @client.query(query)
|
55
|
+
|
56
|
+
users = []
|
57
|
+
results.each do |result|
|
58
|
+
users << User.new(result[:'UserID'], result[:'FirstName'], result[:'LastName'], result[:'FatherName'])
|
59
|
+
end
|
60
|
+
|
61
|
+
users
|
62
|
+
end
|
63
|
+
|
64
|
+
# возвращает количество записей об пользователях в базе данных.
|
65
|
+
def count
|
66
|
+
query = "SELECT COUNT(*) FROM User"
|
67
|
+
result = @client.query(query).first
|
68
|
+
|
69
|
+
result[:'COUNT(*)']
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
require_relative '../user/ui/user_list_view'
|
5
|
+
require_relative '../manager/ui/manager_list_view'
|
6
|
+
require_relative '../task/ui/task_list_view'
|
7
|
+
require_relative 'tab_students'
|
8
|
+
|
9
|
+
|
10
|
+
class MainWindow
|
11
|
+
include Glimmer
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@view_tab_students = TabStudentsView.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
window('Задания', 1000, 600) {
|
19
|
+
tab {
|
20
|
+
tab_item('Пользователи') {
|
21
|
+
UserListView.new.create
|
22
|
+
}
|
23
|
+
tab_item('Менеджеры') {
|
24
|
+
ManagerListView.new.create
|
25
|
+
}
|
26
|
+
tab_item('Задания') {
|
27
|
+
TaskListView.new.create
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
require './lib/controllers/tab_students_controller'
|
5
|
+
|
6
|
+
class TabStudentsView
|
7
|
+
include Glimmer
|
8
|
+
|
9
|
+
ITEMS_PER_PAGE = 20
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@controller = TabStudentsController.new(self)
|
13
|
+
@current_page = 1
|
14
|
+
@total_count = 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_create
|
18
|
+
@controller.on_view_created
|
19
|
+
@controller.refresh_data(@current_page, ITEMS_PER_PAGE)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Метод наблюдателя datalist
|
23
|
+
def on_datalist_changed(new_table)
|
24
|
+
arr = new_table.to_2d_array
|
25
|
+
arr.map { |row| row[3] = [row[3][:value], contact_color(row[3][:type])] }
|
26
|
+
@table.model_array = arr
|
27
|
+
end
|
28
|
+
|
29
|
+
def update_student_count(new_cnt)
|
30
|
+
@total_count = new_cnt
|
31
|
+
@page_label.text = "#{@current_page} / #{(@total_count / ITEMS_PER_PAGE.to_f).ceil}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def contact_color(type)
|
35
|
+
case type
|
36
|
+
when 'telegram'
|
37
|
+
'#00ADB5'
|
38
|
+
when 'email'
|
39
|
+
'#F08A5D'
|
40
|
+
when 'phone'
|
41
|
+
'#B83B5E'
|
42
|
+
else
|
43
|
+
'#000000'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def create
|
48
|
+
root_container = horizontal_box {
|
49
|
+
# Секция 1
|
50
|
+
vertical_box {
|
51
|
+
stretchy false
|
52
|
+
|
53
|
+
form {
|
54
|
+
stretchy false
|
55
|
+
|
56
|
+
@filter_last_name_initials = entry {
|
57
|
+
label 'Фамилия И. О.'
|
58
|
+
}
|
59
|
+
|
60
|
+
@filters = {}
|
61
|
+
fields = [[:git, 'Гит'], [:email, 'Почта'], [:phone, 'Телефон'], [:telegram, 'Телеграм']]
|
62
|
+
|
63
|
+
fields.each do |field|
|
64
|
+
@filters[field[0]] = {}
|
65
|
+
|
66
|
+
@filters[field[0]][:combobox] = combobox {
|
67
|
+
label "#{field[1]} имеется?"
|
68
|
+
items ['Не важно', 'Есть', 'Нет']
|
69
|
+
selected 0
|
70
|
+
|
71
|
+
on_selected do
|
72
|
+
if @filters[field[0]][:combobox].selected == 1
|
73
|
+
@filters[field[0]][:entry].read_only = false
|
74
|
+
else
|
75
|
+
@filters[field[0]][:entry].text = ''
|
76
|
+
@filters[field[0]][:entry].read_only = true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
}
|
80
|
+
|
81
|
+
@filters[field[0]][:entry] = entry {
|
82
|
+
label field[1]
|
83
|
+
read_only true
|
84
|
+
}
|
85
|
+
end
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
# Секция 2
|
90
|
+
vertical_box {
|
91
|
+
@table = refined_table(
|
92
|
+
table_editable: false,
|
93
|
+
filter: lambda do |row_hash, query|
|
94
|
+
utf8_query = query.force_encoding("utf-8")
|
95
|
+
row_hash['Фамилия И. О'].include?(utf8_query)
|
96
|
+
end,
|
97
|
+
table_columns: {
|
98
|
+
'#' => :text,
|
99
|
+
'Фамилия И. О' => :text,
|
100
|
+
'Гит' => :text,
|
101
|
+
'Контакт' => :text_color
|
102
|
+
}
|
103
|
+
)
|
104
|
+
|
105
|
+
@pages = horizontal_box {
|
106
|
+
stretchy false
|
107
|
+
|
108
|
+
button("<") {
|
109
|
+
stretchy true
|
110
|
+
|
111
|
+
on_clicked do
|
112
|
+
@current_page = [@current_page - 1, 1].max
|
113
|
+
@controller.refresh_data(@current_page, ITEMS_PER_PAGE)
|
114
|
+
end
|
115
|
+
|
116
|
+
}
|
117
|
+
@page_label = label("...") { stretchy false }
|
118
|
+
button(">") {
|
119
|
+
stretchy true
|
120
|
+
|
121
|
+
on_clicked do
|
122
|
+
@current_page = [@current_page + 1, (@total_count / ITEMS_PER_PAGE.to_f).ceil].min
|
123
|
+
@controller.refresh_data(@current_page, ITEMS_PER_PAGE)
|
124
|
+
end
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
# Секция 3
|
130
|
+
vertical_box {
|
131
|
+
stretchy false
|
132
|
+
|
133
|
+
button('Добавить') { stretchy false }
|
134
|
+
button('Изменить') { stretchy false }
|
135
|
+
button('Удалить') { stretchy false }
|
136
|
+
button('Обновить') {
|
137
|
+
stretchy false
|
138
|
+
|
139
|
+
on_clicked {
|
140
|
+
@controller.refresh_data(@current_page, ITEMS_PER_PAGE)
|
141
|
+
}
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
on_create
|
146
|
+
root_container
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = 'papaSquidLib'
|
3
|
+
spec.version = '0.1.0'
|
4
|
+
spec.authors = ['KiTTeNqz']
|
5
|
+
spec.email = 'mrxameleonx@mail.ru'
|
6
|
+
spec.summary = 'papaSquidLib system'
|
7
|
+
spec.description = 'Simple ToDo app'
|
8
|
+
spec.homepage = 'https://github.com/KiTTeNqz/papaSquidLib'
|
9
|
+
spec.license = 'MIT'
|
10
|
+
|
11
|
+
spec.files = Dir.glob("**/*")
|
12
|
+
spec.require_paths = ['lib']
|
13
|
+
|
14
|
+
spec.add_dependency 'win32api'
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/models/manager'
|
3
|
+
|
4
|
+
class ManagerTest < Minitest::Test
|
5
|
+
def setup
|
6
|
+
@manager = Manager.new(1, 'John Doe', 'johndoe@example.com', '89054037715')
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_valid_manager_creation
|
10
|
+
assert_equal 1, @manager.id
|
11
|
+
assert_equal 'John Doe', @manager.name
|
12
|
+
assert_equal 'johndoe@example.com', @manager.email
|
13
|
+
assert_equal '89054037715', @manager.phone
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_manager_creation_with_invalid_name
|
17
|
+
assert_raises(ArgumentError) { Manager.new(1, nil, 'johndoe@example.com', '+79054037715') }
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_manager_creation_with_invalid_email
|
21
|
+
assert_raises(ArgumentError) { Manager.new(1, 'John Doe', 'invalidemail', '89054037715') }
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_manager_creation_with_invalid_phone
|
25
|
+
assert_raises(ArgumentError) { Manager.new(1, 'John Doe', 'johndoe@example.com', '123456') }
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require './lib/state_holders/list_state_notifier'
|
3
|
+
require_relative '../lib/logger'
|
4
|
+
class TestListStateNotifier < Minitest::Test
|
5
|
+
def setup
|
6
|
+
@notifier = ListStateNotifier.new
|
7
|
+
LoggerHolder.instance.level = Logger::DEBUG
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_items_initialized_as_empty_array
|
11
|
+
assert_equal [], @notifier.items
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_set_all_sets_items_and_notifies_listeners
|
15
|
+
listener = MiniTest::Mock.new
|
16
|
+
listener.expect(:update, nil, [[1, 2, 3]])
|
17
|
+
@notifier.add_listener(listener)
|
18
|
+
|
19
|
+
@notifier.set_all([1, 2, 3])
|
20
|
+
|
21
|
+
assert_equal [1, 2, 3], @notifier.items
|
22
|
+
listener.verify
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_add_adds_item_and_notifies_listeners
|
26
|
+
listener = MiniTest::Mock.new
|
27
|
+
listener.expect(:update, nil, [@notifier.items])
|
28
|
+
@notifier.add_listener(listener)
|
29
|
+
|
30
|
+
@notifier.add(4)
|
31
|
+
|
32
|
+
assert_equal [4], @notifier.items
|
33
|
+
listener.verify
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_get_returns_correct_item
|
37
|
+
@notifier.set_all([1, 2, 3])
|
38
|
+
|
39
|
+
assert_equal 2, @notifier.get(1)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_delete_removes_item_and_notifies_listeners
|
43
|
+
@notifier.set_all([1, 2, 3])
|
44
|
+
listener = MiniTest::Mock.new
|
45
|
+
listener.expect(:update, nil, [@notifier.items])
|
46
|
+
@notifier.add_listener(listener)
|
47
|
+
|
48
|
+
@notifier.delete(2)
|
49
|
+
|
50
|
+
assert_equal [1, 3], @notifier.items
|
51
|
+
listener.verify
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_replace_replaces_item_and_notifies_listeners
|
55
|
+
@notifier.set_all([1, 2, 3])
|
56
|
+
listener = MiniTest::Mock.new
|
57
|
+
listener.expect(:update, nil, [@notifier.items])
|
58
|
+
@notifier.add_listener(listener)
|
59
|
+
|
60
|
+
@notifier.replace(2, 4)
|
61
|
+
|
62
|
+
assert_equal [1, 4, 3], @notifier.items
|
63
|
+
listener.verify
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_add_listener_adds_listener
|
67
|
+
listener = MiniTest::Mock.new
|
68
|
+
|
69
|
+
@notifier.add_listener(listener)
|
70
|
+
|
71
|
+
assert_includes @notifier.instance_variable_get(:@listeners), listener
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_delete_listener_removes_listener
|
75
|
+
listener = MiniTest::Mock.new
|
76
|
+
@notifier.add_listener(listener)
|
77
|
+
|
78
|
+
@notifier.delete_listener(listener)
|
79
|
+
|
80
|
+
refute_includes @notifier.instance_variable_get(:@listeners), listener
|
81
|
+
end
|
82
|
+
end
|
data/test/task_test.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/models/task'
|
3
|
+
|
4
|
+
class TaskTest < Minitest::Test
|
5
|
+
def setup
|
6
|
+
@task = Task.new(1, 2, 3)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_valid_task_creation
|
10
|
+
assert_equal 1, @task.task_id
|
11
|
+
assert_equal 2, @task.user_id
|
12
|
+
assert_equal 3, @task.manager_id
|
13
|
+
assert_equal Time.now.strftime("%Y-%m-%d"), @task.date
|
14
|
+
assert_nil @task.description
|
15
|
+
assert_equal 'Undone', @task.completed
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_task_creation_with_custom_date
|
19
|
+
custom_date = '2023-05-20'
|
20
|
+
task = Task.new(1, 2, 3, custom_date)
|
21
|
+
assert_equal custom_date, task.date
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_task_creation_with_description
|
25
|
+
description = 'Task description'
|
26
|
+
task = Task.new(1, 2, 3, nil, description)
|
27
|
+
assert_equal description, task.description
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_task_creation_with_completed_status
|
31
|
+
completed = 'Done'
|
32
|
+
task = Task.new(1, 2, 3, nil, nil, completed)
|
33
|
+
assert_equal completed, task.completed
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_task_creation_with_invalid_task_id
|
37
|
+
assert_raises(ArgumentError) { Task.new(nil, 2, 3) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_task_creation_with_invalid_user_id
|
41
|
+
assert_raises(ArgumentError) { Task.new(1, nil, 3) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_task_creation_with_invalid_manager_id
|
45
|
+
assert_raises(ArgumentError) { Task.new(1, 2, nil) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_task_creation_with_invalid_completed_status
|
49
|
+
assert_raises(ArgumentError) { Task.new(1, 2, 3, nil, nil, 'Invalid') }
|
50
|
+
end
|
51
|
+
end
|
data/test/user_test.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/models/user'
|
3
|
+
|
4
|
+
class UserTest < Minitest::Test
|
5
|
+
def setup
|
6
|
+
@user = User.new(1, 'John', 'Doe', 'Smith')
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_valid_user_creation
|
10
|
+
assert_equal 1, @user.user_id
|
11
|
+
assert_equal 'John', @user.first_name
|
12
|
+
assert_equal 'Doe', @user.last_name
|
13
|
+
assert_equal 'Smith', @user.father_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_user_creation_without_father_name
|
17
|
+
user = User.new(1, 'John', 'Doe')
|
18
|
+
assert_nil user.father_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_user_creation_with_invalid_user_id
|
22
|
+
assert_raises(ArgumentError) { User.new(nil, 'John', 'Doe') }
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_user_creation_with_invalid_first_name
|
26
|
+
assert_raises(ArgumentError) { User.new(1, nil, 'Doe') }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_user_creation_with_invalid_last_name
|
30
|
+
assert_raises(ArgumentError) { User.new(1, 'John', nil) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_user_creation_with_long_name
|
34
|
+
long_name = 'x' * 51
|
35
|
+
assert_raises(ArgumentError) { User.new(1, long_name, 'Doe') }
|
36
|
+
assert_raises(ArgumentError) { User.new(1, 'John', long_name) }
|
37
|
+
assert_raises(ArgumentError) { User.new(1, long_name, 'Doe', 'Smith') }
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: papaSquidLib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- KiTTeNqz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-05-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: win32api
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Simple ToDo app
|
28
|
+
email: mrxameleonx@mail.ru
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- Gemfile
|
34
|
+
- Gemfile.lock
|
35
|
+
- lib/controllers/tab_students_controller.rb
|
36
|
+
- lib/data_sources/db_client.rb
|
37
|
+
- lib/db_config/config.yaml
|
38
|
+
- lib/db_config/library_config.yaml
|
39
|
+
- lib/db_config/migrations/create_db.sql
|
40
|
+
- lib/db_config/migrations/create_tables.sql
|
41
|
+
- lib/db_config/mock_data/mock_data.sql
|
42
|
+
- lib/logger.rb
|
43
|
+
- lib/main.rb
|
44
|
+
- lib/manager/controllers/manager_input_form_controller_create.rb
|
45
|
+
- lib/manager/controllers/manager_input_form_controller_edit.rb
|
46
|
+
- lib/manager/controllers/manager_list_controller.rb
|
47
|
+
- lib/manager/manager_db_data_source.rb
|
48
|
+
- lib/manager/ui/manager_input_form.rb
|
49
|
+
- lib/manager/ui/manager_list_view.rb
|
50
|
+
- lib/models/manager.rb
|
51
|
+
- lib/models/student.rb
|
52
|
+
- lib/models/student_base.rb
|
53
|
+
- lib/models/student_short.rb
|
54
|
+
- lib/models/task.rb
|
55
|
+
- lib/models/user.rb
|
56
|
+
- lib/papaSquidLib/version.rb
|
57
|
+
- lib/papa_squid_lib.rb
|
58
|
+
- lib/repositories/adapters/db_source_adapter.rb
|
59
|
+
- lib/repositories/adapters/file_source_adapter.rb
|
60
|
+
- lib/repositories/containers/data_list.rb
|
61
|
+
- lib/repositories/containers/data_list_student_short.rb
|
62
|
+
- lib/repositories/containers/data_table.rb
|
63
|
+
- lib/repositories/data_sources/db_data_source.rb
|
64
|
+
- lib/repositories/data_sources/file_data_source.rb
|
65
|
+
- lib/repositories/data_sources/transformers/data_transformer_base.rb
|
66
|
+
- lib/repositories/data_sources/transformers/data_transformer_json.rb
|
67
|
+
- lib/repositories/data_sources/transformers/data_transformer_yaml.rb
|
68
|
+
- lib/repositories/student_repository.rb
|
69
|
+
- lib/state_holders/list_state_notifier.rb
|
70
|
+
- lib/task/controllers/task_input_form_controller_create.rb
|
71
|
+
- lib/task/controllers/task_input_form_controller_edit.rb
|
72
|
+
- lib/task/controllers/task_list_controller.rb
|
73
|
+
- lib/task/task_db_data_source.rb
|
74
|
+
- lib/task/ui/task_input_form.rb
|
75
|
+
- lib/task/ui/task_input_form_factory.rb
|
76
|
+
- lib/task/ui/task_list_view.rb
|
77
|
+
- lib/user/controllers/user_input_form_controller_create.rb
|
78
|
+
- lib/user/controllers/user_input_form_controller_edit.rb
|
79
|
+
- lib/user/controllers/user_list_controller.rb
|
80
|
+
- lib/user/ui/user_input_form.rb
|
81
|
+
- lib/user/ui/user_list_view.rb
|
82
|
+
- lib/user/user_db_data_source.rb
|
83
|
+
- lib/views/main_window.rb
|
84
|
+
- lib/views/tab_students.rb
|
85
|
+
- papaSquidLib.gemspec
|
86
|
+
- test/manager_test.rb
|
87
|
+
- test/state_notifier_test.rb
|
88
|
+
- test/task_test.rb
|
89
|
+
- test/user_test.rb
|
90
|
+
homepage: https://github.com/KiTTeNqz/papaSquidLib
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubygems_version: 3.4.10
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: papaSquidLib system
|
113
|
+
test_files: []
|