Class: Tableau::Timetable

Inherits:
Object
  • Object
show all
Defined in:
lib/tableau/timetable.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(timetable_name) ⇒ Timetable

Create a new Timetable, with a Timetable Name and Student Set ID



7
8
9
10
# File 'lib/tableau/timetable.rb', line 7

def initialize(timetable_name)
  @name = name || "Timetable"
  @modules = Array.new
end

Instance Attribute Details

#modulesObject

Returns the value of attribute modules.



4
5
6
# File 'lib/tableau/timetable.rb', line 4

def modules
  @modules
end

#nameObject

Returns the value of attribute name.



4
5
6
# File 'lib/tableau/timetable.rb', line 4

def name
  @name
end

Instance Method Details

#add_module(module_code) ⇒ Object

Adds a Module to the Timetable via the Parser



18
19
20
21
# File 'lib/tableau/timetable.rb', line 18

def add_module(module_code)
  @module = Tableau::ModuleParser.new(module_code).parse
  @modules << @module if @module
end

#add_modules(modules) ⇒ Object

Mass-adds an array of modules objects to the timetable



24
25
26
# File 'lib/tableau/timetable.rb', line 24

def add_modules(modules)
  modules.each { |mod_code| add_module(mod_code) }
end

#class_for_time(day, time) ⇒ Object

Returns the class at the given day & time



51
52
53
54
55
# File 'lib/tableau/timetable.rb', line 51

def class_for_time(day, time)
  cfd = self.classes_for_day(day)
  cfd.each { |c| return c if c.time == time }
  nil
end

#classes_for_day(day) ⇒ Object

Returns an array of the given day’s classes



39
40
41
42
43
44
45
46
47
48
# File 'lib/tableau/timetable.rb', line 39

def classes_for_day(day)
  classes = Tableau::ClassArray.new

  @modules.each do |mod|
    cfd = mod.classes_for_day(day)
    cfd.each { |cl| classes << cl } if cfd
  end

  classes.count > 0 ? classes : nil
end

#conflictsObject

Returns an array of time conflicts found in the timetable



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/tableau/timetable.rb', line 90

def conflicts
  conflicts = Tableau::ClassArray.new

  (0..4).each do |day|
    days_classes = self.classes_for_day(day)
    next if !days_classes || days_classes.count == 0

    # get the last element index
    last = days_classes.count - 1

    for i in 0..last
      i_c = days_classes[i]
      time_range = i_c.time..(i_c.time + 3600 * i_c.duration)

      for j in (i+1)..last
        if time_range.cover?(days_classes[j].time)
          conflicts << [days_classes[i], days_classes[j]]
        end
      end
    end
  end
  conflicts # return the conflicts
end

#earliest_classObject

Returns the earliest class on the timetable



70
71
72
73
74
75
76
77
# File 'lib/tableau/timetable.rb', line 70

def earliest_class
  earliest_classes = Tableau::ClassArray.new
  @modules.each { |m| earliest_classes << m.earliest_class }

  earliest = earliest_classes.first
  earliest_classes.each { |c| earliest = c if c.time < earliest.time }
  earliest
end

#latest_classObject

Returns the latest class on the timetable



80
81
82
83
84
85
86
87
# File 'lib/tableau/timetable.rb', line 80

def latest_class
  latest_classes = Tableau::ClassArray.new
  @modules.each { |m| latest_classes << m.latest_class }

  latest = latest_classes.first
  latest_classes.each { |c| latest = c if c.time > latest.time }
  latest
end

#module_for_code(mod_code) ⇒ Object

Return the Tableau::Module that matches a given code



64
65
66
67
# File 'lib/tableau/timetable.rb', line 64

def module_for_code(mod_code)
  @modules.each { |m| return m if m.module_id == mod_code } if @modules
  nil
end

#module_for_name(module_name) ⇒ Object

Returns the module with given Module Code



58
59
60
61
# File 'lib/tableau/timetable.rb', line 58

def module_for_name(module_name)
  modules.each { |m| return m if m.name }
  nil
end

#push_module(mod) ⇒ Object

Pushes an existing module into the timetable



13
14
15
# File 'lib/tableau/timetable.rb', line 13

def push_module(mod)
  @modules << mod
end

#remove_class(rem_class) ⇒ Object

Removes a class from the timetable



29
30
31
32
33
34
35
36
# File 'lib/tableau/timetable.rb', line 29

def remove_class(rem_class)
  @modules.each do |m|
    if m.name == rem_class.name
      m.classes.delete(rem_class)
      break
    end
  end
end