class OneRoster::Client
Attributes
api_url[RW]
app_id[RW]
app_secret[RW]
app_token[RW]
authenticated[R]
logger[RW]
oauth_strategy[RW]
staff_username_source[RW]
username_source[RW]
vendor_key[RW]
Public Class Methods
configure() { |client| ... }
click to toggle source
# File lib/one_roster/client.rb, line 16 def self.configure client = new yield(client) if block_given? client end
new(oauth_strategy = 'oauth')
click to toggle source
# File lib/one_roster/client.rb, line 11 def initialize(oauth_strategy = 'oauth') @authenticated = false @oauth_strategy = oauth_strategy end
Public Instance Methods
authenticate()
click to toggle source
# File lib/one_roster/client.rb, line 103 def authenticate return if authenticated? if oauth_strategy == 'oauth2' response = token fail ConnectionError, response.raw_body unless response.success? set_auth_headers(response.raw_body, response.headers['set-cookie']) else response = connection.execute(TEACHERS_ENDPOINT, :get, limit: 1) fail ConnectionError, response.raw_body unless response.success? end @authenticated = true end
authenticated?()
click to toggle source
# File lib/one_roster/client.rb, line 121 def authenticated? @authenticated end
classrooms(course_codes = [])
click to toggle source
# File lib/one_roster/client.rb, line 38 def classrooms(course_codes = []) authenticate oneroster_classes = classes terms_hash = terms.each_with_object({}) { |term, terms| terms[term.uid] = term } courses = courses(course_codes, oneroster_classes) oneroster_classes.each_with_object([]) do |oneroster_class, oneroster_classes| course = courses.find { |course| course.uid == oneroster_class.course_uid } next unless course term = terms_hash[oneroster_class.term_id] oneroster_classes << Types::Classroom.new( 'id' => oneroster_class.uid, 'name' => oneroster_class.title, 'course_number' => course.course_code, 'period' => oneroster_class.period, 'grades' => oneroster_class.grades, 'subjects' => oneroster_class.subjects, 'term_name' => term&.name, 'term_start_date' => term&.start_date, 'term_end_date' => term&.end_date ) end end
connection()
click to toggle source
# File lib/one_roster/client.rb, line 125 def connection @connection ||= Connection.new(self, oauth_strategy) end
courses(course_codes = [], oneroster_classes = classes)
click to toggle source
# File lib/one_roster/client.rb, line 77 def courses(course_codes = [], oneroster_classes = classes) authenticate class_course_numbers = oneroster_classes.map(&:course_uid) courses = Paginator.fetch( connection, COURSES_ENDPOINT, :get, Types::Course, client: self ).force parse_courses(courses, course_codes, class_course_numbers) end
enrollments(classroom_uids = [])
click to toggle source
# File lib/one_roster/client.rb, line 93 def enrollments(classroom_uids = []) authenticate enrollments = parse_enrollments(classroom_uids) p "Found #{enrollments.values.flatten.length} enrollments." enrollments end
set_auth_headers(token, cookie)
click to toggle source
# File lib/one_roster/client.rb, line 133 def set_auth_headers(token, cookie) connection.set_auth_headers(token['access_token'], cookie) end
terms()
click to toggle source
# File lib/one_roster/client.rb, line 67 def terms authenticate endpoint = OneRoster::ACADEMIC_SESSIONS_ENDPOINT type = Types::Term Paginator.fetch(connection, endpoint, :get, type, client: self).force end
token()
click to toggle source
# File lib/one_roster/client.rb, line 129 def token connection.execute("#{api_url}/token", :post) end
Private Instance Methods
parse_courses(courses, course_codes, course_numbers)
click to toggle source
# File lib/one_roster/client.rb, line 155 def parse_courses(courses, course_codes, course_numbers) courses.select do |course| in_course_numbers = course_numbers.include?(course.uid) if course_codes.any? course_codes.include?(course.course_code) && in_course_numbers else in_course_numbers end end end
parse_enrollments(classroom_uids = [])
click to toggle source
# File lib/one_roster/client.rb, line 139 def parse_enrollments(classroom_uids = []) enrollments = Paginator.fetch( connection, ENROLLMENTS_ENDPOINT, :get, Types::Enrollment, client: self ).force enrollments.each_with_object(teacher: [], student: []) do |enrollment, enrollments| next if classroom_uids.any? && !classroom_uids.include?(enrollment.classroom_uid) enrollments[enrollment.role.to_sym] << enrollment if enrollment.valid? end end