class CanvasFaker::Functionality
Public Class Methods
new(canvas_url, token, tools = [])
click to toggle source
# File lib/canvas_faker/functionality.rb, line 10 def initialize(canvas_url, token, tools = []) @api = LMS::Canvas.new(canvas_url, token) @canvas_url = canvas_url @tools = tools @cli ||= HighLine.new end
Public Instance Methods
add_students_to_course(account_id, course_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 27 def add_students_to_course(account_id, course_id) students = create_users(account_id) enroll_user_in_course(students, course_id) end
delete_course()
click to toggle source
# File lib/canvas_faker/functionality.rb, line 32 def delete_course account_id = get_account_id courses = course_list(account_id) course = @cli.ask("Delete which course? ex.. 2", Integer) @api.proxy( "CONCLUDE_COURSE", { id: courses[course]["id"], event: "delete" } ) puts "Deleted #{courses[course]['name']}" end
delete_course_by_id(course_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 53 def delete_course_by_id(course_id) @api.proxy( "CONCLUDE_COURSE", { id: course_id, event: "delete" } ) puts "Deleted course with id: #{course_id}" end
get_quizzes(course_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 45 def get_quizzes(course_id) a = @api.proxy( "LIST_QUIZZES_IN_COURSE", { course_id: course_id } ) puts "QUIZ::: #{a}" end
make_assignments_in_course(course_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 63 def make_assignments_in_course(course_id) num_of_assignments = @cli.ask("How many assignments?", Integer) create_assignments_in_course(course_id, num_of_assignments) end
setup_course()
click to toggle source
# File lib/canvas_faker/functionality.rb, line 17 def setup_course account_id = get_account_id courses = course_list(account_id) course_id = create_course(account_id, courses)["id"] students = create_users(account_id) enroll_user_in_course(students, course_id) make_assignments_in_course(course_id) install_lti_tool_to_course(course_id) end
Private Instance Methods
course_list(account_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 88 def course_list(account_id) courses = @api.proxy( "LIST_ACTIVE_COURSES_IN_ACCOUNT", { account_id: account_id } ) courses.each_with_index do |course, index| puts "#{index}. #{course['name']}, id: (#{course['id']})" end courses end
create_assignments_in_course(course_id, num_of_assignments)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 70 def create_assignments_in_course(course_id, num_of_assignments) (1..num_of_assignments).map do food = Faker::Pokemon.name payload = { assignment: { name: "All about #{food}", published: true } } @api.proxy( "CREATE_ASSIGNMENT", { course_id: course_id }, payload ).tap { |assignment| puts "Creating #{assignment['name']} in your course." } end puts "Added #{num_of_assignments} assignments to your course" end
create_course(account_id, courses)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 120 def create_course(account_id, courses) existing_course_names = courses.map { |course| course["name"] } course_name = @cli.ask "Name your new course." if should_create_course?(existing_course_names, course_name) payload = { course: { name: course_name, # sis_course_id: course_id, } } course = @api.proxy( "CREATE_NEW_COURSE", { account_id: account_id }, payload ) puts "#{@canvas_url}/courses/#{course['id']}" course else index = existing_course_names.find_index("#{course_name}") courses[index] end end
create_users(account_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 143 def create_users(account_id) num_students = @cli.ask( "How many students do you want in your course?", Integer ) (1..num_students).map do user_first_name = Faker::Name.first_name user_last_name = Faker::Name.last_name full_name = "#{user_first_name}#{user_last_name}" email = Faker::Internet.safe_email(full_name) payload = { user: { name: "#{user_first_name} #{user_last_name}", short_name: user_first_name, sortable_name: "#{user_last_name}, #{user_first_name}", terms_of_use: true, skip_registration: true, avatar: { url: Faker::Avatar.image } }, pseudonym: { unique_id: "#{email}", password: "asdfasdf" } } @api.proxy( "CREATE_USER", { account_id: account_id }, payload ).tap { |stud| puts "#{stud['name']} creating." } end end
enroll_user_in_course(students, course_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 177 def enroll_user_in_course(students, course_id) students.each do |student| payload = { enrollment: { user_id: student["id"], type: "StudentEnrollment", enrollment_state: "active" } } @api.proxy( "ENROLL_USER_COURSES", { course_id: course_id }, payload ) puts "Enrolled #{student['name']} into your course_id #{course_id}" end end
get_account_id()
click to toggle source
# File lib/canvas_faker/functionality.rb, line 99 def get_account_id accounts = @api.all_accounts # gets the accounts accounts.each_with_index do |account, index| puts "#{index}. #{account['name']}" end answer = @cli.ask("Which account? ex.. 2", Integer) accounts[answer]["id"] end
install_lti_tool_to_course(course_id)
click to toggle source
# File lib/canvas_faker/functionality.rb, line 195 def install_lti_tool_to_course(course_id) return if @tools.empty? # Taken from canvas documentation, below. # https://canvas.instructure.com/doc/api/external_tools.html @tools.each_with_index do |tool, index| puts "#{index}. #{tool[:app][:lti_key]}" end tool_index = @cli.ask("Which tool do you want to add to your course?", Integer) tool = tools[tool_index] payload = { name: "#{tool[:app][:lti_key]}", privacy_level: "public", consumer_key: "#{tool[:app][:lti_key]}", shared_secret: "#{tool[:app][:lti_secret]}", config_type: "by_xml", config_xml: "#{tool[:config]}" } @api.proxy( "CREATE_EXTERNAL_TOOL_COURSES", { course_id: course_id }, payload ) end
should_create_course?(existing_course_names, course_name)
click to toggle source
Returns true or false
# File lib/canvas_faker/functionality.rb, line 109 def should_create_course?(existing_course_names, course_name) if existing_course_names.include?(course_name) use_old_course = @cli.ask "That course already exists, want to use it? [y/n]" if use_old_course == "y" || use_old_course == "yes" return false end return true end return true end