Genshin/GAKUEngine

View on GitHub
README.md

Summary

Maintainability
Test Coverage
[![Gem Version](https://badge.fury.io/rb/gaku.svg)](http://badge.fury.io/rb/gaku)
[![Build Status](https://travis-ci.org/GAKUEngine/gaku.svg)](https://travis-ci.org/GAKUEngine/gaku)
[![Code Climate](https://codeclimate.com/github/GAKUEngine/gaku.svg)](https://codeclimate.com/github/GAKUEngine/gaku)
[![Gitter chat](https://badges.gitter.im/GAKUEngine/gaku.svg)](https://gitter.im/GAKUEngine/gaku)
GAKU Engine [学エンジン]
========================
GAKU Engine, or just "GAKU" for short is the "GenSou Academic Karte Unification Engine". The gaku 
character 「学」 means "Learning", so saying GAKU Engine is roughly equivalent to saying 
"Learning Engine".

GAKU is a modular, extendable, Open Source school and student management system built on Rails.

GAKU is currently under heavy development
-----------------------------------------
We do not currently recommend anyone use it in a production environment.

License
-------
This software is dual licensed under the GNU GPL version 3 and the AGPL version 3.   
Separate licenses are available upon consultation. Please contact info@gakuengine.com for details.

What does it do?
----------------
GAKU Engine is a full school and student management solution including student, staff, syllabus, 
course, class, exam management and more. It has a full grading system and offers template-able 
printable reports. Functionality can be enhanced with extensions and can be integrated with 
external services and clients using the API. 

GAKU Engine is also:
* Completely Open Source, Free as in Freedom, licensed under the GPL v3 and AGPL v3.
* It only uses Free Open Source components and does not rely on commercial components.
* There are no per-seat licenses.
* It's Rails based, so it's easily modifiable and extendable.
* It is multi-locale.

Requirements
------------
Full installation:
* A newer version of Ruby and a user account that can install Gems
* A newer version of postgresql and postgresql-contrib

Docker instance:
* A newer version of Ruby and a user account that can install Gems
* Docker and docker-compose

New Installation
----------------
*work in progress*

### Install the 'gaku' gem and command
```shell
gem install gaku
```

### Create a GAKU installation
```shell
gaku install MySchoolName
```
*Replace MySchoolName with your school name or the name you want for your GAKU installation.*  
*Please avoid using spaces and special characters in your installation name.*

Manual Installation
-------------------
0. Create a Rails app using PostgreSQL as your database and configure your config/database.yml
1. Add the following to your Gemfile: ```gem 'gaku'``` and run ```bundle install```
2. Run the GAKU install generator with ```bundle exec rails g gaku:install```

Updating
--------
To update a GAKU Engine installation, cd into your installation directory and:
1. Update your bundle with ```bundle update```
2. Update by running the install generator again with ```bundle exec rails g gaku:install```

Developer Information
=====================
There are several ways to work on GAKU Engine itself. We recommend creating an installation 
and pointing the Gemfile entires to a locally cloned repository. In this case we do not use 
Docker, so you'll need to run servers locally. First off, let's clone the repository. If 
you are intent on submitting a patch it may be a good idea to fork the repository in advance 
and clone your fork, but you can always fork later and push to your fork before you submit a 
pull/merge request.  
  
To make things easy, we recommend cloning the repository in the same path that your installation 
is contained in, and the remainder of this guide will assume this layout:
```shell
git clone git@github.com:GAKUEngine/gaku.git
```
  
If you don't have an existing installation or want to create a separate development installation 
then we recommend cloning the repository first, then running the gaku command from within the 
cloned repository.
```shell
cd gaku
gem install bundler
bundle install
bundle exec bin/gaku new ../GakuSample
```

Then, cd to the directory of the installation you'll use for testing (GakuSample if you followed 
the above setup step) and edit the Gemfile, changing the following entires as shown:
```
gem 'gaku', path: '../gaku'
```

Testing
-------
Testing does not use a sample app like above, instead there is a self contained test app and 
specs are run directly against this.  
  
Each component of GAKU Engine has its own set of tests. Core functionality is found in core, 
Front End functionality is forund in frontend, etc. Generally you'll want to run tests in core, 
so the example here is for core.
  
Change to core engine:
```shell
cd core
```
  
Initialize the test app
```shell
bundle exec rake test_app
```
  
Run specs:
```
rspec
```

Working on OS X
---------------
Development on OS X is almost as trivial as Linux if you are willing to install a package 
manager like HomeBrew, a full [managed] version of Ruby (we recommend using RVM), and 
Docker Desktop for Mac. Basically, all you need to do is install any development dependencies 
which mostly ammount to postgresql and anything needed to run Rails (which Ruby Gems can 
basically do for you if you are using a compatible package manager). Aside from this, working on 
OS X is essentially the same as working on Linux.

Working on Windows
------------------
Windows isn't a very comfortable platoform to work on due to lack of a consolidated/standard 
shared environemnt and tools. To work on Windows we recommend the following:
1. An installation of MSYS2. This can be the installation that comes with the Ruby 
  installer/dev kit.
2. An installation of Docker or Docker toolbox.
3. An installation of PostgreSQL. Depending on how you install PostgreSQL the pg gem 
  installation may be difficult - know that we can't provide assistance for this.
4. Docker toolbox and Postgre added to your path in MSYS2. Basically add something like 
  this to your .bashrc or .zshrc or the rc file for your shell of choice: 
  ```PATH=$PATH:/c/Program\ Files/Docker\ Toolbox/:/c/PostgreSQL/pg11/bin/```  
  * This example uses Docker Toolbox and BigSQL Postgre for Windows. If you have a different 
    Docker and Postgre installation replace the above with the path to where you have 
    docker(.exe), docker-compose(.exe) installed and where you have pg_config(.exe) and 
    psql(.exe) installed.  
      
    **NOTE** Even with the path set installation of the pg gem fails on some systems. We aren't 
    quite sure why this is, but installing manually with the --with-pg-dir option seems to 
    consistently work. EG: ```gem install pg -- --with-pg-dir=/c/PostgreSQL/pg11/```
5. Ruby - either installed and accessable from within MSYS2 from the Ruby for Windows Installer 
  or installed with ```pacman -S ruby``` within a standalone MSYS2 installation.
6. You will need the basics for building Rails native extensions. A rough installation command 
  would be something like: 
  ```pacman -S libxml2 libxml2-devel zlib zlib-devel libxslt libxslt-devel libffi libffi-devel``` 
  and set bundler to use native libraries: 
  ```bundle config build.nokogiri --use-system-libraries```
7. Clone this repository, and run bundler. If any gems fail to install you may need to 
  install additional tools or adjust your environment variables. Windows is very difficult 
  to create a standard installation procedure on, so this may be easier said than done.
8. Start Docker (EG: run the QuickStart terminal) if it's not started already, then Run 
  ```./bin/gaku container start```. If you get an error about named pipes you'll probably have 
  to run the container from the Docker terminal (which should be using your installation of MSYS2).
9. Once the container has started once, you should be able to start it as many times and use it as 
  you like. Specifically, it should be usable for development on Windows and for developing 
  and testing clients or tools that run on Windows or are Windows native.

!NOTE!
When running specs on Windows, specfy where your GAKU directory is by prefixing commands with 
GAKU_PATH="/path/to/gaku", replacing the path here with the actual path to the cloned GAKU 
directory. The gaku container command maintains an information file about the IP and port 
the docker container is running on in tmp/container_info, and apps should read this file 
to set up their connections accordingly.

Development
===========
Status
------
Development has been resumed, but not full time. We are currently actively seeking funding, 
and current development efforts are targeted at providing an MVP [Minimum Viable Product] 
to seek full funding with buiness partners looking to utilize GAKU Engine to provide their 
own services. If you would be looking to provide GAKU Engine as your own service or to sponsor 
GAKU Engine development please contact us at info@gakuengine.com.  
  
If you are an OSS developer looking to contribute to GAKU Engine please contact 
info@gakuengine.com for tasks and guiance. You will be fully credited for your work, and we 
will absolutely do our best to compensate you for your work.  
  
Pull requests are very welcome! Please try to follow these simple rules:
* Please create a feature branch for every separate change you make.
* Open a pull-request early for any new features to get feedback.
* Make sure your patches are well tested. All specs must pass.
* Run [rubocop](http://github.com/bbatsov/rubocop) to ensure no style guide issues.

Core Team
=========
* [Rei Kagetsuki](http://github.com/Kagetsuki)
* [Georgi Tapalilov](http://github.com/tapalilov)
* [Yukiharu Nakaya](http://github.com/snowsunny)

Contributors
============
[https://github.com/GAKUEngine/gaku/contributors](http://github.com/GAKUEngine/gaku/contributors)

Code of Conduct
===============
We welcome anyone. We will not exclde people from this project based on their identity, 
preferences, political affiliation, opinions, or how they chose to express themselves on any 
media. If you write good code we're happy to have you as a contributor.