Class: Meibo::Classroom

Inherits:
Object
  • Object
show all
Includes:
DataModel
Defined in:
lib/meibo/classroom.rb

Constant Summary collapse

TYPES =
{
  homeroom: "homeroom",
  scheduled: "scheduled"
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DataModel

#deconstruct, #deconstruct_keys, included, #lineno, #to_a, #to_csv, #to_h

Constructor Details

#initialize(sourced_id:, title:, course_sourced_id:, class_type:, school_sourced_id:, term_sourced_ids:, status: nil, date_last_modified: nil, grades: [], class_code: nil, location: nil, subjects: [], subject_codes: [], periods: [], **extension_fields) ⇒ Classroom

Returns a new instance of Classroom.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/meibo/classroom.rb', line 58

def initialize(sourced_id:, title:, course_sourced_id:, class_type:, school_sourced_id:, term_sourced_ids:, status: nil, date_last_modified: nil, grades: [],
               class_code: nil, location: nil, subjects: [], subject_codes: [], periods: [], **extension_fields)
  raise SubjectsAndSubjectCodesLengthNotMatch unless subjects.is_a?(Array) && subject_codes.is_a?(Array) && subjects.size == subject_codes.size

  @sourced_id = sourced_id
  @status = status
  @date_last_modified = date_last_modified
  @title = title
  @grades = grades
  @course_sourced_id = course_sourced_id
  @class_code = class_code
  @class_type = class_type
  @location = location
  @school_sourced_id = school_sourced_id
  @term_sourced_ids = term_sourced_ids
  @subjects = subjects
  @subject_codes = subject_codes
  @periods = periods
  @extension_fields = extension_fields
end

Class Method Details

.parse(csv) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/meibo/classroom.rb', line 45

def self.parse(csv)
  return to_enum(:parse, csv) unless block_given?

  _parse(csv).with_index(1) do |row, line|
    yield new(**row.to_h)
  rescue SubjectsAndSubjectCodesLengthNotMatch
    index = attribute_names.index(:subjects)
    field = row[index]
    field_info = CSV::FieldInfo.new(index, line, :subjects, false)
    raise InvalidDataTypeError.new(field: field, field_info: field_info)
  end
end

Instance Method Details

#collectionObject



79
80
81
# File 'lib/meibo/classroom.rb', line 79

def collection
  Meibo.current_roster.classes
end

#courseObject



91
92
93
# File 'lib/meibo/classroom.rb', line 91

def course
  Meibo.current_roster.courses.find(course_sourced_id)
end

#enrollmentsObject



103
104
105
# File 'lib/meibo/classroom.rb', line 103

def enrollments
  Meibo.current_roster.enrollments.where(class_sourced_id: sourced_id)
end

#homeroom?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/meibo/classroom.rb', line 83

def homeroom?
  class_type == TYPES[:homeroom]
end

#scheduled?Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/meibo/classroom.rb', line 87

def scheduled?
  class_type == TYPES[:scheduled]
end

#schoolObject



95
96
97
# File 'lib/meibo/classroom.rb', line 95

def school
  Meibo.current_roster.organizations.find(school_sourced_id)
end

#termsObject



99
100
101
# File 'lib/meibo/classroom.rb', line 99

def terms
  term_sourced_ids.map { |term_sourced_id| Meibo.current_roster.academic_sessions.find(term_sourced_id) }
end