README.md
# Coursemology Polyglot [![Build Status](https://travis-ci.org/Coursemology/polyglot.svg?branch=master)](https://travis-ci.org/Coursemology/polyglot)
[![Code Climate](https://codeclimate.com/github/Coursemology/polyglot/badges/gpa.svg)](https://codeclimate.com/github/Coursemology/polyglot) [![Coverage Status](https://coveralls.io/repos/Coursemology/polyglot/badge.svg?branch=master&service=github)](https://coveralls.io/github/Coursemology/polyglot?branch=master) [![Security](https://hakiri.io/github/Coursemology/polyglot/master.svg)](https://hakiri.io/github/Coursemology/polyglot/master) [![Inline docs](http://inch-ci.org/github/coursemology/polyglot.svg?branch=master)](http://inch-ci.org/github/coursemology/polyglot) [![Gem Version](https://badge.fury.io/rb/coursemology-polyglot.svg)](https://badge.fury.io/rb/coursemology-polyglot)
This is the library common between the web application and the evaluator for determining the
programming languages supported in Coursemology.
## Usage
### With Rails
The library works with Railties, so there is no special configuration.
The gem provides a JavaScript asset which can be used to require all Ace modes that are needed by
all concrete languages. In your application manifest, include this:
```javascript
//= require coursemology/polyglot/ace-modes
```
Ensure that Ace is found within the `ace` directory (i.e. `ace/mode-python.js` etc.)
### Without Rails
In your `Gemfile`:
```ruby
gem 'coursemology-polyglot'
```
Then, in your application:
```ruby
Coursemology::Polyglot.eager_load!
```
The Polyglot library needs to be eager loaded so that it knows which languages are defined.
Otherwise, the list of `concrete_languages` will be empty.
## Version 0.3 upgrade
### Breaking changes
Before version 0.3, Coursemology polyglot only supported Java 8, using docker image `coursemology/evaluator-image-java:latest`.
Version 0.3 adds support for Java 11.
To ensure old questions using Java continue to evaluate correctly, you need to run a migration to change Java's record in `polyglot_languages` table in your database.
The SQL command below summarizes the necessary changes, to be run *right before* upgrading to version 3.0:
```
UPDATE polyglot_languages SET type = 'Coursemology::Polyglot::Language::Java::Java8', name = 'Java 8' where type = 'Coursemology::Polyglot::Language::Java';
```
### Updating the gem
You will need the login credentials for `coursemology` to push the updated gem to [rubygems](https://rubygems.org/gems/coursemology-polyglot).
```sh
gem build coursemology-polyglot
gem push coursemology-polyglot-<version>.gem
rm coursemology-polyglot-*.gem
```