Class: Tableau::Timetable
- Inherits:
-
Object
- Object
- Tableau::Timetable
- Defined in:
- lib/tableau/timetable.rb
Instance Attribute Summary collapse
-
#modules ⇒ Object
Returns the value of attribute modules.
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
-
#add_module(module_code) ⇒ Object
Adds a Module to the Timetable via the Parser.
-
#add_modules(modules) ⇒ Object
Mass-adds an array of modules objects to the timetable.
-
#class_for_time(day, time) ⇒ Object
Returns the class at the given day & time.
-
#classes_for_day(day) ⇒ Object
Returns an array of the given day’s classes.
-
#conflicts ⇒ Object
Returns an array of time conflicts found in the timetable.
-
#earliest_class ⇒ Object
Returns the earliest class on the timetable.
-
#initialize(timetable_name) ⇒ Timetable
constructor
Create a new Timetable, with a Timetable Name and Student Set ID.
-
#latest_class ⇒ Object
Returns the latest class on the timetable.
-
#module_for_code(mod_code) ⇒ Object
Return the Tableau::Module that matches a given code.
-
#module_for_name(module_name) ⇒ Object
Returns the module with given Module Code.
-
#push_module(mod) ⇒ Object
Pushes an existing module into the timetable.
-
#remove_class(rem_class) ⇒ Object
Removes a class from the timetable.
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() @name = name || "Timetable" @modules = Array.new end |
Instance Attribute Details
#modules ⇒ Object
Returns the value of attribute modules.
4 5 6 |
# File 'lib/tableau/timetable.rb', line 4 def modules @modules end |
#name ⇒ Object
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 |
#conflicts ⇒ Object
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_class ⇒ Object
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_class ⇒ Object
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 |