class TimetableManager
include Contracts ~~~~~~~~~~~~~~~~~~~~~~~~~~
Public Class Methods
new(timetable_reader, date)
click to toggle source
Contract IsA, Any => Any
# File lib/tmis/engine/import/timetable_manager.rb, line 21 def initialize(timetable_reader, date) @reader = timetable_reader @days = {'понедельник' => date, 'вторник' => date + 1, 'среда' => date + 2, 'четверг' => date + 3, 'пятница' => date + 4, 'суббота' => date + 5 } end
Public Instance Methods
save_to_db()
click to toggle source
Contract None => Any
# File lib/tmis/engine/import/timetable_manager.rb, line 27 def save_to_db Database.instance.transaction do create_subgroups (1..4).each{ |n| add(Course, number: n) } Course.all.zip(Course.all).flatten.each_with_index { |c, i| add(Semester, {title: i + 1, course_id: c}) } end end
Private Instance Methods
add(model, options)
click to toggle source
create_studies(data, group, subgroups)
click to toggle source
Contract Hash, Group
, ArrayOf => Any
# File lib/tmis/engine/import/timetable_manager.rb, line 46 def create_studies(data, group, subgroups) data[:days].each do |day| day[:studies].each_with_index do |study, number| if study.size == 1 if (s = study.first[:info][:subgroup]) s = s.to_i if s > 0 && s < 3 Study.create( get_study_options(study[0], day[:name], number.succ, subgroups[s.to_i - 1]) ) else next end else Study.create( get_study_options(study[0], day[:name], number.succ, group) ) end else study.each do |sepstudy| Study.create( get_study_options(sepstudy, day[:name], number.succ, sepstudy[:info][:subgroup] ? subgroups[sepstudy[:info][:subgroup].to_i - 1] : group) ) end end end end end
create_subgroups()
click to toggle source
Contract None => Any
# File lib/tmis/engine/import/timetable_manager.rb, line 37 def create_subgroups @reader.groups.each do |data| group = add(Group, title: data[:title] || "") subgroups = (1..2).map{ |i| add(Subgroup, {group_id: group, number: i}) } create_studies(data, group, subgroups) end end
fix_cabinet(title)
click to toggle source
Contract Or[Num, String] => String
# File lib/tmis/engine/import/timetable_manager.rb, line 107 def fix_cabinet(title) title.is_a?(Float) ? title.ceil.to_s : title.to_s end
get_study_options(study, day, study_number, groupable)
click to toggle source
Contract Hash, String, Pos, Or[Group, Subgroup] => Hash
# File lib/tmis/engine/import/timetable_manager.rb, line 76 def get_study_options(study, day, study_number, groupable) { subject: add(Subject, title: study[:info][:subject]), cabinet: new_cabinet_or_stub(study), lecturer: new_lecturer_or_stub(study), date: @days[day.mb_chars.downcase.to_s.gsub(' ', '')], number: study_number, groupable: groupable } end
new_cabinet_or_stub(study)
click to toggle source
# File lib/tmis/engine/import/timetable_manager.rb, line 98 def new_cabinet_or_stub(study) if study[:cabinet] add(Cabinet, title: fix_cabinet(study[:cabinet])) else Cabinet.where(stub: true).first end end
new_lecturer_or_stub(study)
click to toggle source
# File lib/tmis/engine/import/timetable_manager.rb, line 85 def new_lecturer_or_stub(study) case study[:info][:lecturer][:surname] when nil Lecturer.where(stub: true).first when /#{Settings[:stubs, :lecturer]}/i Lecturer.where(stub: true).first else add(Lecturer, { surname: study[:info][:lecturer][:surname], name: study[:info][:lecturer][:name], patronymic: study[:info][:lecturer][:patronymic] }) end end