mvcStudentXD 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -0
  3. data/Gemfile +22 -24
  4. data/README.md +35 -3
  5. data/{mvcStudentXD/lib → lib}/mvcStudentXD/version.rb +1 -1
  6. data/mvcStudentXD.gemspec +38 -0
  7. metadata +40 -92
  8. data/Gemfile.lock +0 -101
  9. data/Lab1/arr1_3.txt +0 -1
  10. data/Lab1/lb1_1.rb +0 -19
  11. data/Lab1/lb1_2.rb +0 -28
  12. data/Lab1/lb1_3.rb +0 -46
  13. data/Lab1/lb1_4.rb +0 -82
  14. data/Lab2/1Class.jpg +0 -0
  15. data/Lab2/Web/main.rb +0 -89
  16. data/Lab2/Web/views/add.html +0 -168
  17. data/Lab2/Web/views/main.html +0 -233
  18. data/Lab2/data_storage/students1.txt +0 -1
  19. data/Lab2/data_storage/studentsRead.json +0 -36
  20. data/Lab2/data_storage/studentsRead.txt +0 -3
  21. data/Lab2/data_storage/studentsRead.yaml +0 -26
  22. data/Lab2/data_storage/studentsWrite.json +0 -42
  23. data/Lab2/data_storage/studentsWrite.txt +0 -4
  24. data/Lab2/data_storage/studentsWrite.yaml +0 -31
  25. data/Lab2/examples/Strategy.rb +0 -38
  26. data/Lab2/examples/adapter.rb +0 -30
  27. data/Lab2/examples/database.rb +0 -15
  28. data/Lab2/examples/observer_example.rb +0 -51
  29. data/Lab2/examples/pattern_pattern.rb +0 -44
  30. data/Lab2/examples/site_example.rb +0 -21
  31. data/Lab2/examples/views/about.erb +0 -11
  32. data/Lab2/examples/views/contact.erb +0 -15
  33. data/Lab2/examples/views/index.erb +0 -11
  34. data/Lab2/main.rb +0 -6
  35. data/Lab2/main_window.rb +0 -31
  36. data/Lab2/student_input_form.rb +0 -71
  37. data/Lab2/tab_students.rb +0 -157
  38. data/Lab2/test/student_test.rb +0 -91
  39. data/mvcStudentXD/Gemfile +0 -22
  40. data/mvcStudentXD/Gemfile.lock +0 -97
  41. data/mvcStudentXD/README.md +0 -35
  42. data/mvcStudentXD/bin/console +0 -11
  43. data/mvcStudentXD/bin/setup +0 -8
  44. data/mvcStudentXD/mvcStudentXD-1.2.0.gem +0 -0
  45. data/mvcStudentXD/mvcStudentXD.gemspec +0 -15
  46. data/mvcStudentXD/pkg/mvcStudentXD-0.1.0.gem +0 -0
  47. data/mvcStudentXD/pkg/mvcStudentXD-1.0.1.gem +0 -0
  48. data/mvcStudentXD/pkg/mvcStudentXD-1.1.1.gem +0 -0
  49. data/mvcStudentXD/test/student_test.rb +0 -91
  50. data/mvcStudentXD/test/test_helper.rb +0 -6
  51. data/mvcStudentXD/test/test_mvcStudentXD.rb +0 -13
  52. /data/{mvcStudentXD/CHANGELOG.md → CHANGELOG.md} +0 -0
  53. /data/{mvcStudentXD/CODE_OF_CONDUCT.md → CODE_OF_CONDUCT.md} +0 -0
  54. /data/{mvcStudentXD/Rakefile → Rakefile} +0 -0
  55. /data/{mvcStudentXD/lib → lib}/mvcStudentXD.rb +0 -0
  56. /data/{mvcStudentXD/lib → lib}/source/adapters/student_list_adapter.rb +0 -0
  57. /data/{mvcStudentXD/lib → lib}/source/containers/Data_list.rb +0 -0
  58. /data/{mvcStudentXD/lib → lib}/source/containers/Data_list_student_short.rb +0 -0
  59. /data/{mvcStudentXD/lib → lib}/source/containers/Data_table.rb +0 -0
  60. /data/{mvcStudentXD/lib → lib}/source/controllers/student_edit_form_controller.rb +0 -0
  61. /data/{mvcStudentXD/lib → lib}/source/controllers/student_input_form_controller.rb +0 -0
  62. /data/{mvcStudentXD/lib → lib}/source/controllers/student_list_controller.rb +0 -0
  63. /data/{mvcStudentXD/lib → lib}/source/converters/Converter.rb +0 -0
  64. /data/{mvcStudentXD/lib → lib}/source/converters/Converter_json.rb +0 -0
  65. /data/{mvcStudentXD/lib → lib}/source/converters/Converter_txt.rb +0 -0
  66. /data/{mvcStudentXD/lib → lib}/source/converters/Converter_yaml.rb +0 -0
  67. /data/{mvcStudentXD/lib → lib}/source/database/scripts/create_table.sql +0 -0
  68. /data/{mvcStudentXD/lib → lib}/source/database/scripts/insert_data.sql +0 -0
  69. /data/{mvcStudentXD/lib → lib}/source/database/student_list_db.rb +0 -0
  70. /data/{mvcStudentXD/lib → lib}/source/database/students_db.rb +0 -0
  71. /data/{mvcStudentXD/lib → lib}/source/model/Student.rb +0 -0
  72. /data/{mvcStudentXD/lib → lib}/source/model/StudentBase.rb +0 -0
  73. /data/{mvcStudentXD/lib → lib}/source/model/Student_short.rb +0 -0
  74. /data/{mvcStudentXD/lib → lib}/source/repositories/Student_list.rb +0 -0
  75. /data/{mvcStudentXD/lib → lib}/source/repositories/student_list_adv.rb +0 -0
  76. /data/{mvcStudentXD/lib → lib}/source/util/LoggerHolder.rb +0 -0
  77. /data/{mvcStudentXD/sig → sig}/mvcStudentXD.rbs +0 -0
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Printer
4
- def print(text)
5
- puts text
6
- end
7
- end
8
-
9
- class Display
10
- def display(text)
11
- puts text
12
- end
13
- end
14
-
15
- class DisplayAdapter
16
- def initialize(display)
17
- @display = display
18
- end
19
-
20
- def print(text)
21
- @display.display(text)
22
- end
23
- end
24
-
25
- printer = Printer.new
26
- display = Display.new
27
- adapter = DisplayAdapter.new(display)
28
-
29
- printer.print("Hello, world!") # выводит "Hello, world!"
30
- adapter.print("Hello, world!") # также выводит "Hello, world!"
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Database
4
- @@instance = nil
5
-
6
- def self.instance
7
- @@instance ||= Database.new
8
- end
9
-
10
- def execute
11
- print("Establishing connection...")
12
- end
13
-
14
- private_class_method :new
15
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Класс Наблюдаемый объект
4
- class Subject
5
- attr_reader :state, :observers
6
-
7
- def initialize(state)
8
- @state = state
9
- @observers = []
10
- end
11
-
12
- def add_observer(observer)
13
- observers << observer
14
- end
15
-
16
- def remove_observer(observer)
17
- observers.delete(observer)
18
- end
19
-
20
- def notify_observers
21
- observers.each do |observer|
22
- observer.update(self)
23
- end
24
- end
25
-
26
- def update_state(state)
27
- @state = state
28
- notify_observers
29
- end
30
- end
31
-
32
- # Класс Наблюдатель
33
- class Observer
34
- def update(subject)
35
- puts "Subject has updated state to: #{subject.state}"
36
- end
37
- end
38
-
39
- # Создаем объекты Наблюдаемый объект и Наблюдатель
40
- subject = Subject.new("initial state")
41
- observer = Observer.new
42
-
43
- # Добавляем наблюдателя к наблюдаемому объекту
44
- subject.add_observer(observer)
45
-
46
- # Обновляем состояние наблюдаемого объекта
47
- subject.update_state("new state")
48
-
49
- # Результат выполнения:
50
- # Subject has updated state to: new state
51
-
@@ -1,44 +0,0 @@
1
- class Pat
2
- attr_accessor :a, :b
3
-
4
- def initialize(a, b)
5
- self.a = a
6
- self.b = b
7
- end
8
-
9
- def sum_alg
10
- a+b
11
- end
12
-
13
- def mult_alg
14
- a*b
15
- end
16
-
17
- def minus_alg
18
- a-b
19
- end
20
-
21
- def alg
22
- sum_alg+mult_alg+minus_alg
23
- end
24
- end
25
-
26
- class PatInhetit1 < Pat
27
- def sum_alg
28
- a+b+2
29
- end
30
- end
31
-
32
- class PatInhetit2 < Pat
33
- def mult_alg
34
- a*b*3
35
- end
36
- end
37
-
38
- pat = Pat.new(4, 2)
39
- pat1 = PatInhetit1.new(4, 2)
40
- pat2 = PatInhetit2.new(4, 2)
41
-
42
- puts(pat.alg)
43
- puts(pat1.alg)
44
- puts(pat2.alg)
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'sinatra'
4
- require_relative '../main_window'
5
-
6
- get '/' do
7
- erb :index
8
- end
9
-
10
- get '/about' do
11
- erb :about
12
- end
13
-
14
- get '/contact' do
15
- erb :contact
16
- end
17
-
18
- get '/uni' do
19
- MainWindow.new.create.show
20
- end
21
-
@@ -1,11 +0,0 @@
1
- <!-- about.erb -->
2
- <!DOCTYPE html>
3
- <html>
4
- <head>
5
- <title>Привет! Это мой сайт-визитка</title>
6
- </head>
7
- <body>
8
- <h1>О нас</h1>
9
- <p>Компания ЕКота занимается всем, что может принести вред.</p>
10
- </body>
11
- </html>
@@ -1,15 +0,0 @@
1
- <!-- contact.erb -->
2
- <!DOCTYPE html>
3
- <html>
4
- <head>
5
- <title>Контакты</title>
6
- </head>
7
- <body>
8
- <h1>Связь с нами</h1>
9
- <p>Скорее всего, мы сами вас найдём, но если нет:</p>
10
- <ul>
11
- <li>Почта: info@mywebsite.com</li>
12
- <li>Мобильный: 123-456-7890</li>
13
- </ul>
14
- </body>
15
- </html>
@@ -1,11 +0,0 @@
1
- <!-- index.erb -->
2
- <!DOCTYPE html>
3
- <html>
4
- <head>
5
- <title>Домашняя страница</title>
6
- </head>
7
- <body>
8
- <h1>Добро пожаловать в обитель зла</h1>
9
- <p>Я сейчас смотрю Твин Пикс</p>
10
- </body>
11
- </html>
data/Lab2/main.rb DELETED
@@ -1,6 +0,0 @@
1
- require 'mysql2'
2
- require 'mvcStudentXD'
3
- require_relative 'main_window'
4
-
5
- MainWindow.new.create.show
6
- LoggerHolder.instance.level = Logger::DEBUG
data/Lab2/main_window.rb DELETED
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'mvcStudentXD'
4
- require 'sinatra'
5
- require 'thin'
6
- require 'glimmer-dsl-libui'
7
- require_relative 'tab_students'
8
-
9
- class MainWindow
10
- include Glimmer
11
-
12
- def initialize
13
- @view_tab_students = TabStudents.new
14
- end
15
-
16
- def create
17
- window('Универ', 600, 300) {
18
- tab {
19
- tab_item('Студенты') {
20
- @view_tab_students.create
21
- }
22
-
23
- tab_item('Вкладка 2') { }
24
- tab_item('Вкладка 3') { }
25
- }
26
- }
27
- end
28
- end
29
-
30
- main_window = MainWindow.new.create
31
- main_window.show
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'glimmer-dsl-libui'
4
- require_relative '../mvcStudentXD/lib/student_input_form_controller'
5
- require_relative 'model/StudentBase'
6
- require 'win32api'
7
-
8
- class StudentInputForm
9
- include Glimmer
10
-
11
- def initialize(controller,existing_student = nil)
12
- @existing_student = existing_student.to_hash unless existing_student.nil?
13
- @controller = controller
14
- @entries = {}
15
- end
16
-
17
- def on_create
18
- @controller.on_view_created
19
- end
20
-
21
- def create
22
- @root_container = window('Универ', 300, 150) {
23
- resizable false
24
-
25
- vertical_box {
26
- @student_form = form {
27
- stretchy false
28
-
29
- fields = [[:last_name, 'Фамилия', false], [:first_name, 'Имя', false], [:parental_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
- text @existing_student[field[0]] unless @existing_student.nil?
35
-
36
- read_only field[2] unless @existing_student.nil?
37
- }
38
- end
39
- }
40
-
41
- button('Сохранить') {
42
- stretchy false
43
-
44
- on_clicked {
45
- values = @entries.transform_values { |v| v.text.force_encoding("utf-8").strip }
46
- values.transform_values! { |v| v.empty? ? nil : v}
47
- @controller.process_fields(values)
48
- @controller.refresh
49
- }
50
- }
51
- }
52
- }
53
- on_create
54
- @root_container
55
- end
56
-
57
- def set_value(field, value)
58
- return unless @entries.include?(field)
59
- @entries[field].text = value
60
- end
61
-
62
- def make_readonly(*fields)
63
- fields.each do |field|
64
- @entries[field].read_only = true
65
- end
66
- end
67
-
68
- def close
69
- @root_container.destroy
70
- end
71
- end
data/Lab2/tab_students.rb DELETED
@@ -1,157 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # frozen_string_literal: true
4
- require 'glimmer-dsl-libui'
5
- require_relative '../mvcStudentXD/lib/student_list_controller'
6
- require_relative '../mvcStudentXD/lib/b'
7
-
8
- class TabStudents
9
- include Glimmer
10
- STUDENTS_PER_PAGE = 20
11
-
12
- def initialize
13
- @controller = StudentListController.new(self)
14
- @current_page = 1
15
- @total_count = 0
16
- end
17
-
18
- def on_create
19
- @controller.on_view_created
20
- @controller.refresh_data(@current_page, STUDENTS_PER_PAGE)
21
- end
22
-
23
- # Метод наблюдателя datalist
24
- def on_datalist_changed(new_table)
25
- arr = new_table.to_2d_array
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 / STUDENTS_PER_PAGE.to_f).ceil}"
32
- end
33
-
34
- def create
35
- root = horizontal_box {
36
- # Секция 1
37
- vertical_box {
38
- stretchy false
39
-
40
- form {
41
- stretchy false
42
-
43
- @filter_last_name_initials = entry {
44
- label 'ФИО'
45
- }
46
-
47
- @filters = {}
48
- fields = [[:git, 'Github'], [:email, 'Почта'], [:phone, 'Телефон'], [:telegram, 'Телеграм']]
49
-
50
- fields.each do |field|
51
- @filters[field[0]] = {}
52
-
53
- @filters[field[0]][:combobox] = combobox {
54
- label "#{field[1]}?"
55
- items ['Не важно', 'Есть', 'Нет']
56
- selected 0
57
-
58
- on_selected do
59
- if @filters[field[0]][:combobox].selected == 1
60
- @filters[field[0]][:entry].read_only = false
61
- else
62
- @filters[field[0]][:entry].text = ''
63
- @filters[field[0]][:entry].read_only = true
64
- end
65
- end
66
- }
67
-
68
- @filters[field[0]][:entry] = entry {
69
- label field[1]
70
- read_only true
71
- }
72
- end
73
- }
74
- }
75
-
76
- # Секция 2
77
- vertical_box {
78
- @table = refined_table(
79
- table_editable: false,
80
- filter: lambda do |row_hash, query|
81
- utf8_query = query.force_encoding("utf-8")
82
- row_hash['Фамилия И. О'].include?(utf8_query)
83
- end,
84
- table_columns: {
85
- '#' => :text,
86
- 'Фамилия И. О' => :text,
87
- 'Гит' => :text,
88
- 'Контакт' => :text,
89
- },
90
- per_page: STUDENTS_PER_PAGE
91
- )
92
-
93
- @pages = horizontal_box {
94
- stretchy false
95
-
96
- button("<") { stretchy true }
97
- button("<") {
98
- stretchy true
99
-
100
- on_clicked do
101
- @current_page = [@current_page - 1, 1].max
102
- @controller.refresh_data(@current_page, STUDENTS_PER_PAGE)
103
- end
104
-
105
- }
106
- @page_label = label("...") { stretchy false }
107
- button(">") { stretchy true }
108
- button(">") {
109
- stretchy true
110
-
111
- on_clicked do
112
- @current_page = [@current_page + 1, (@total_count / STUDENTS_PER_PAGE.to_f).ceil].min
113
- @controller.refresh_data(@current_page, STUDENTS_PER_PAGE)
114
- end
115
- }
116
- }
117
- }
118
-
119
- # Секция 3
120
- vertical_box {
121
- stretchy true
122
-
123
- button('Добавить') {
124
- stretchy false
125
-
126
- on_clicked {
127
- @controller.show_modal_add()
128
- }
129
- }
130
- button('Изменить') {
131
- stretchy false
132
-
133
- on_clicked {
134
- @controller.show_modal_edit(@current_page, STUDENTS_PER_PAGE, @table.selection) unless @table.selection.nil?
135
- }
136
- }
137
- button('Удалить') {
138
- stretchy false
139
-
140
- on_clicked {
141
- @controller.delete_selected(@current_page, STUDENTS_PER_PAGE, @table.selection) unless @table.selection.nil?
142
- @controller.refresh_data(@current_page, STUDENTS_PER_PAGE)
143
- }
144
- }
145
- button('Обновить') {
146
- stretchy false
147
- on_clicked{
148
- @controller.refresh_data(@current_page, STUDENTS_PER_PAGE)
149
- }
150
- }
151
- }
152
- }
153
- on_create
154
- root
155
- end
156
-
157
- end
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'minitest/autorun'
3
- require 'json'
4
- require_relative '../../mvcStudentXD/lib/model/Student'
5
-
6
- class StudentTest < Minitest::Test
7
- def setup
8
- @student = Student.new(
9
- 'Лукашев',
10
- 'Алексей',
11
- 'Андреевич',
12
- id: 10,
13
- phone: '89099997499',
14
- telegram: '@lehadrilla',
15
- email: 'leha@gmail.com',
16
- git: '@netuOnNeftyanik'
17
- )
18
- end
19
-
20
- def teardown
21
- # Do nothing
22
- end
23
-
24
- def test_student_init_all_params_correct
25
- assert @student.last_name == 'Лукашев'
26
- assert @student.first_name == 'Алексей'
27
- assert @student.parental_name == 'Андреевич'
28
- assert @student.id == 10
29
- assert @student.phone == '89099997499'
30
- assert @student.telegram == '@lehadrilla'
31
- assert @student.email == 'leha@gmail.com'
32
- assert @student.git == '@netuOnNeftyanik'
33
- end
34
-
35
- def test_student_empty_options
36
- Student.new('Сергеев', 'Сергей', 'Сергеевич')
37
- end
38
-
39
- def test_student_short_contact
40
- short_contact = @student.get_short_contact
41
-
42
-
43
- assert short_contact[:type] == :telegram
44
- assert short_contact[:val] == '@lehadrilla'
45
- end
46
-
47
- def test_student_has_contacts
48
- assert @student.valid_cont? == true
49
- end
50
-
51
- def test_student_set_contacts
52
- stud = Student.new('Орфов', 'Орф', 'Орфович')
53
- stud.set_contacts(phone: '89097768999', telegram: '@kasha', email: 'kasha@gmail.com')
54
-
55
- assert stud.phone == '89097768999'
56
- assert stud.telegram == '@kasha'
57
- assert stud.email == 'kasha@gmail.com'
58
- end
59
-
60
- def test_student_get_short_fio
61
- assert @student.get_short_fio == 'fio:Лукашев А. А.'
62
- end
63
-
64
-
65
- def test_student_from_and_to_hash
66
- test_hash = {
67
- last_name: 'Жанов',
68
- first_name: 'Жан',
69
- parental_name: 'Жанович',
70
- id: 5,
71
- phone: '87776665544',
72
- telegram: '@abv',
73
- email: 'abv@mail.ru',
74
- git: '@abvG'
75
- }
76
-
77
-
78
- stud = Student.from_hash(test_hash)
79
-
80
- assert stud.last_name == 'Жанов'
81
- assert stud.first_name == 'Жан'
82
- assert stud.parental_name == 'Жанович'
83
- assert stud.id == 5
84
- assert stud.phone == '87776665544'
85
- assert stud.telegram == '@abv'
86
- assert stud.email == 'abv@mail.ru'
87
- assert stud.git == '@abvG'
88
-
89
- assert stud.to_hash == test_hash
90
- end
91
- end
data/mvcStudentXD/Gemfile DELETED
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in mvcStudentXD.gemspec
6
- gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "minitest", "~> 5.0"
11
-
12
- gem "rubocop", "~> 1.21"
13
-
14
- gem "mysql2"
15
-
16
- gem "glimmer-dsl-libui", '~> 0.7.4'
17
-
18
- gem 'win32api'
19
-
20
- gem 'sinatra', '~> 3.0', '>= 3.0.6'
21
-
22
- gem 'thin', '~> 1.8', '>= 1.8.2'
@@ -1,97 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- mvcStudentXD (1.1.2)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- array_include_methods (1.4.0)
10
- ast (2.4.2)
11
- chunky_png (1.4.0)
12
- color (1.8)
13
- daemons (1.4.1)
14
- equalizer (0.0.11)
15
- eventmachine (1.2.7)
16
- facets (3.1.0)
17
- glimmer (2.7.3)
18
- array_include_methods (~> 1.4.0)
19
- facets (>= 3.1.0, < 4.0.0)
20
- glimmer-dsl-libui (0.7.5)
21
- chunky_png (~> 1.4.0)
22
- color (~> 1.8)
23
- equalizer (= 0.0.11)
24
- glimmer (~> 2.7.3)
25
- libui (~> 0.1.2.pre)
26
- os (>= 1.0.0, < 2.0.0)
27
- perfect-shape (~> 1.0.7)
28
- rouge (>= 3.26.0, < 4.0.0)
29
- super_module (~> 1.4.1)
30
- json (2.6.3)
31
- libui (0.1.2.pre-x64-mingw)
32
- matrix (0.4.2)
33
- method_source (1.0.0)
34
- minitest (5.18.0)
35
- mustermann (3.0.0)
36
- ruby2_keywords (~> 0.0.1)
37
- mysql2 (0.5.5)
38
- os (1.1.4)
39
- parallel (1.23.0)
40
- parser (3.2.2.1)
41
- ast (~> 2.4.1)
42
- perfect-shape (1.0.7)
43
- equalizer (>= 0.0.11, < 1.1.0)
44
- matrix (>= 0.4.2, < 1.1.0)
45
- rack (2.2.7)
46
- rack-protection (3.0.6)
47
- rack
48
- rainbow (3.1.1)
49
- rake (13.0.6)
50
- regexp_parser (2.8.0)
51
- rexml (3.2.5)
52
- rouge (3.30.0)
53
- rubocop (1.50.2)
54
- json (~> 2.3)
55
- parallel (~> 1.10)
56
- parser (>= 3.2.0.0)
57
- rainbow (>= 2.2.2, < 4.0)
58
- regexp_parser (>= 1.8, < 3.0)
59
- rexml (>= 3.2.5, < 4.0)
60
- rubocop-ast (>= 1.28.0, < 2.0)
61
- ruby-progressbar (~> 1.7)
62
- unicode-display_width (>= 2.4.0, < 3.0)
63
- rubocop-ast (1.28.1)
64
- parser (>= 3.2.1.0)
65
- ruby-progressbar (1.13.0)
66
- ruby2_keywords (0.0.5)
67
- sinatra (3.0.6)
68
- mustermann (~> 3.0)
69
- rack (~> 2.2, >= 2.2.4)
70
- rack-protection (= 3.0.6)
71
- tilt (~> 2.0)
72
- super_module (1.4.1)
73
- method_source (>= 0.8.2, < 1.1.0)
74
- thin (1.8.2)
75
- daemons (~> 1.0, >= 1.0.9)
76
- eventmachine (~> 1.0, >= 1.0.4)
77
- rack (>= 1, < 3)
78
- tilt (2.1.0)
79
- unicode-display_width (2.4.2)
80
- win32api (0.1.0)
81
-
82
- PLATFORMS
83
- x64-mingw-ucrt
84
-
85
- DEPENDENCIES
86
- glimmer-dsl-libui (~> 0.7.4)
87
- minitest (~> 5.0)
88
- mvcStudentXD!
89
- mysql2
90
- rake (~> 13.0)
91
- rubocop (~> 1.21)
92
- sinatra (~> 3.0, >= 3.0.6)
93
- thin (~> 1.8, >= 1.8.2)
94
- win32api
95
-
96
- BUNDLED WITH
97
- 2.4.12