LMS Integration: Final Report (GSoC 2021- Ayan Biswas)


This is the final blog report summarizing the work done for 📚 LMS Integration project during Google Summer of Code 2021 🖥.

Get the Code 🎉

Here is the more detailed Phase 1 Report :

LMS Integration: Phase 1 Report (GSoC 2021- Ayan Biswas)

About LMS Integration Project 📚

Currently CircuitVerse have a basic LMS within CircuitVerse to manage assignments. But with the increasing demand for a full-fledged LMS features, it is required to be integrated with publicly available popular LMSs like Moodle/Canvas etc. However individual LMS integration per case to case basis is not possible, so CircuitVerse is looking for a way to integrate with multiple LMSs in a single flow. See the CircuitVerse Wiki and Project Board for more details.

Project Goals 🖥

The major goals of the project are listed below :

  • Integrate CircuitVerse with the LMSs supported by LTI (Learning Tools Interoperability) protocol.
  • Provide a simple and easy to use interface for the LMS users to integrate with CircuitVerse.
  • Provide an automatic grade syncing facility between the LMS and CircuitVerse.

In the video below, I have demonstrated the integration of CircuitVerse with the Moodle LMS. Please watch the video to see the integration in action.

GSoC Final Video

Technical Specifications 👨‍💻

Here is a diagrammatic representation of the LMS Integration Project:


The entire logic of incoming and outgoing requests are handled by the ims-lti gem, which is a Ruby gem that implements the LTI protocol.

This project has two main segments:

1. LTI Tool Provider

See in app/controllers/lti_controller.rb

    @provider = IMS::LTI::ToolProvider.new(

here the provider is specified with the consumer key and shared secret of the LMS and in the next step the entire LTI request is validated.

See in app/controllers/lti_controller.rb

    if [email protected]_request?(request)
        render :launch_error, status: 401

If the request is valid, then corresponding assignment is fetched from the database and proper page is rendered and delivered via iframe to the LMS.

2. Grade Syncing with the LMSs

For the grade pass back service the native LTI protocol is followed, because the ims-lti gem doesn’t support the flow as per our requirements.

So the grade pass back service is implemented as per specifications of IMS-Global, see in lti_score_submission.rb

  def call
    response = oauth_token.post(lis_outcome_service_url, score_body.to_xml, 'Content-Type' => 'application/xml')
    if response.body.match(/\bsuccess\b/)
      puts "score submitted"
      return true
      puts "score submission failed"
      return false

for more information about the grade pass back service please refer Learning Tools Interoperability (LTI) Implementation Guide

New Features Added to CircuitVerse 🎉

The goals are almost achieved. The following features are added to CircuitVerse:

  • The CircuitVerse codebase made LTI (Learning Tools Interoperability) compatible.
  • Necessary credentials can be generated for the LMSs to integrate with CircuitVerse.Updated the assignment creation UI to support the new credentials generation facility.
  • The LMSs can now sync grades with the CircuitVerse platform.
  • Some of the pages like (Groups/Assignments) are made compatible for iframe embed such that they can be accessed from LMS side using LTI protocol.
  • Added documentation for the teachers to connect the assignments with their LMS.
  • Feature flagged the LMS integration feature.


Pull Requests made 🎯

Here are the pull requests made to the CircuitVerse main repository:

Here are the pull requests made to the CircuitVerseDocs repository:

Testing and Documentation 📒

Rspec tests has been added to check the entire LTI integration flow. Please refer to the spec/requests/lti_spec.rb

Here is a glimpse of the testing scenarios of the LMS integration project


The tutorial documentation for the teachers has been also added to the CircuitVerseDocs check the documentation here

Here is a glimpse of the documentation of the LMS integration project


Future Plans 📆

The initial integration of CircuitVerse with the LMS is ready for production use of teachers and students. The next step is to add more features to the platform.Here are some of the future plans :

  • Add dynamic XML configuration support for each assignments for the LMSs to integrate with CircuitVerse.
  • Automatic cron job to sync grades with the LMSs (Checking of grade submission failures if necessary).
  • Integration with non-LTI LMSs (like Google Classroom).

Blog posts written 📝

I have described my entire journey through a series of blogs in my web profile.You can find the links below, please click on the links to read the posts:

  1. My Journey to Google Summer of Code 21 with CircuitVerse and insights on the Proposal for GSoC

  2. GSoC’21 Community Bonding Period @CircuitVerse

  3. GSoC’21 Week 1+2 Experience @CircuitVerse

  4. GSoC’21 Week 3+4 Experience @CircuitVerse

  5. LMS Integration: Phase 1 Report (GSoC 2021- Ayan Biswas)

  6. Learning Tools Interoperability implementation in Ruby on Rails

  7. GSoC’21 Week 7+8 Experience @CircuitVerse

Experience 🏂

Google Summer of Code has been a great experience for me. I have learned a lot from my project and I am very happy with the outcome.Engaging in the beautiful community like CircuitVerse is an excellent opportunity for me, I also want to thank my mentors Aboobacker MK, Satvik Ramaprasad and Shivansh Srivastava for their extreme support and continuous code reviews.

Looking forward to contribute even more to CircuitVerse and the whole Open-source community !

Thank you for reading 🎉 Happy coding 🖥

comments powered by Disqus