Class: MyUW::Schedule
- Inherits:
-
Object
- Object
- MyUW::Schedule
- Defined in:
- lib/myuw/schedule.rb
Overview
Synopsis
The Schdule class is responsible for querying a student’s currently registered schedule.
Instance Attribute Summary collapse
-
#courses ⇒ Object
readonly
Returns the value of attribute courses.
-
#myuw ⇒ Object
Returns the value of attribute myuw.
Instance Method Summary collapse
- #credits(force = false) ⇒ Object
- #get_courses(schedule) ⇒ Object
- #get_credits(schedule) ⇒ Object
-
#initialize(myuw = nil) ⇒ Schedule
constructor
A new instance of Schedule.
- #schedule(force = false) ⇒ Object
Constructor Details
#initialize(myuw = nil) ⇒ Schedule
Returns a new instance of Schedule.
9 10 11 12 |
# File 'lib/myuw/schedule.rb', line 9 def initialize(myuw=nil) @myuw ||= myuw @courses = nil end |
Instance Attribute Details
#courses ⇒ Object (readonly)
Returns the value of attribute courses.
7 8 9 |
# File 'lib/myuw/schedule.rb', line 7 def courses @courses end |
#myuw ⇒ Object
Returns the value of attribute myuw.
6 7 8 |
# File 'lib/myuw/schedule.rb', line 6 def myuw @myuw end |
Instance Method Details
#credits(force = false) ⇒ Object
14 15 16 17 18 |
# File 'lib/myuw/schedule.rb', line 14 def credits(force=false) return @credits if @credits && !force schedule(true) @credits end |
#get_courses(schedule) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/myuw/schedule.rb', line 37 def get_courses(schedule) courses = schedule.search("//table[@border=1 and @cellpadding=3]//tr[@bgcolor='#d0d0d0'][2]/following-sibling::*//td[@align='center']/parent::*") raise InvalidPageError.new(schedule, "No courses were found") if courses.empty? data_order = [:sln, :course, :type, :credits, :title, :days, :time, :location, :instructor] @courses = [] courses.each do |course| data = course.search('td') raise InvalidPageError(schedule, "Something strange happening, found courses but no course data") if data.empty? course_info = {} i = 0 data.each do |datum| break if data_order[i].nil? course_info[data_order[i]] = datum.inner_text.strip.gsub("\302\240", "") i += 1 end @courses.push(course_info) end end |
#get_credits(schedule) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/myuw/schedule.rb', line 61 def get_credits(schedule) credits = schedule.search("//table[@border=1 and @cellpadding=3]//tr[@bgcolor='#d0d0d0'][2]/following-sibling::*//td[@colspan=4]") raise InvalidPageError.new(schedule, "No credit row was found") if credits.empty? credits_text = credits[0].inner_text.strip.gsub("\302\240", "") raise InvalidPageError.new(schedule, "Credit row in different syntax") unless credits_text =~ /^Total credits: (.+?)$/ @credits = $1.to_f end |
#schedule(force = false) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/myuw/schedule.rb', line 20 def schedule(force=false) raise NotLoggedInError.new("User must be logged in to fetch SLN data") unless @myuw.logged_in? # Return the schedule if we precached it at some point # unless we're forcing it return @courses if @courses && !force # Grab the schedule page schedule_page = @myuw.browser.get("https://sdb.admin.washington.edu/students/uwnetid/schedule.asp") # Grab the info out of it get_courses schedule_page # Grab the credits get_credits schedule_page end |