Class: PCR::Course

Inherits:
Object
  • Object
show all
Includes:
Comparable, Resource
Defined in:
lib/classes/course.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Resource

#set_attrs

Constructor Details

#initialize(path, semester) ⇒ Course

Returns a new instance of Course.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/classes/course.rb', line 12

def initialize(path, semester)
  #TODO: Don't need to pass in semester
  @path, @semester = path, semester

  # Hit api
  json = PCR.get_json(path)

  # List of sections
  @sections = json['result']['sections']['values'].map do |section|
    Section.new(section['path'])
  end

  # Assign attrs
  attrs = %w(aliases credits description history id name reviews 
             retrieved valid version)
  set_attrs(attrs, json)
end

Instance Attribute Details

#aliasesObject (readonly)

Returns the value of attribute aliases.



8
9
10
# File 'lib/classes/course.rb', line 8

def aliases
  @aliases
end

#creditsObject (readonly)

Returns the value of attribute credits.



8
9
10
# File 'lib/classes/course.rb', line 8

def credits
  @credits
end

#descriptionObject (readonly)

Returns the value of attribute description.



8
9
10
# File 'lib/classes/course.rb', line 8

def description
  @description
end

#historyObject (readonly)

Returns the value of attribute history.



8
9
10
# File 'lib/classes/course.rb', line 8

def history
  @history
end

#idObject (readonly)

Returns the value of attribute id.



8
9
10
# File 'lib/classes/course.rb', line 8

def id
  @id
end

#nameObject (readonly)

Returns the value of attribute name.



8
9
10
# File 'lib/classes/course.rb', line 8

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path.



8
9
10
# File 'lib/classes/course.rb', line 8

def path
  @path
end

#retrievedObject (readonly)

Returns the value of attribute retrieved.



8
9
10
# File 'lib/classes/course.rb', line 8

def retrieved
  @retrieved
end

#reviewsObject (readonly)

Returns the value of attribute reviews.



8
9
10
# File 'lib/classes/course.rb', line 8

def reviews
  @reviews
end

#sectionsObject (readonly)

Returns the value of attribute sections.



8
9
10
# File 'lib/classes/course.rb', line 8

def sections
  @sections
end

#semesterObject (readonly)

Returns the value of attribute semester.



8
9
10
# File 'lib/classes/course.rb', line 8

def semester
  @semester
end

#validObject (readonly)

Returns the value of attribute valid.



8
9
10
# File 'lib/classes/course.rb', line 8

def valid
  @valid
end

#versionObject (readonly)

Returns the value of attribute version.



8
9
10
# File 'lib/classes/course.rb', line 8

def version
  @version
end

Instance Method Details

#<=>(other) ⇒ Object



30
31
32
33
34
# File 'lib/classes/course.rb', line 30

def <=>(other)
  #TODO: Throw error if not same course
  return year <=> other.year unless year == other.year
  season <=> other.season
end

#average(metric) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/classes/course.rb', line 36

def average(metric)
  # Aggregate ratings across all sections
  total, num = 0, 0
  #TODO: inject
  self.sections.each do |section|
    section.reviews.each do |review|
      total += review.send(metric).to_f
      num += 1
    end
  end

  # Return average value across all sections
  (total / num)
end

#seasonObject



55
56
57
# File 'lib/classes/course.rb', line 55

def season
  @semester[4]
end

#yearObject



51
52
53
# File 'lib/classes/course.rb', line 51

def year
  @semester[0..3].to_i
end