Renalware

Maintainability Test Coverage Gem Version

Renalware uses demographic, clinical, pathology, and nephrology datasets to improve patient care, undertake clinical and administrative audits and share data with external systems.

Technical Overview

renalware-core is a Ruby On Rails engine intended to encapsulate the majority of Renalware's features in a re-usable gem. When a renal unit deploys Renalware, it will create its own host Rails application, and configure it to include the Renalware engine. The host application may be extremely thin, adding no custom features other than site-specific configuration, or it may include Ruby, HTML and JavaScript to override or augment renalware-core's features.

While the engine is intended to be deployed inside a host application in production, it can be run stand-alone in a local development environment (or indeed deployed in a limited way to somewhere like Heroku) by employing the dummy host application that ships inside the engine. This dummy app (in ./spec/dummy) allows a developer to quickly mount the engine, and is used also used Rails integration tests (which is why it is in the ./spec folder)

There are other optional renalware gems which can also be included in the host application, for example renalware-ukrdc which enables sending data to the UKRDC.

Stack

  • Ruby 2.x
  • Ruby on Rails 5
  • Postgres 10.1+

Get up and running locally

An alternative Docker approach will be available shortly

As a Rails developer we assume you are using OS X or Linux (natively or inside a VM on Windows), and have the following installed:

Postgres setup

Set up Postgres user with a password - for development purposes this can be your system login.

sudo su - postgres
psql template1

At the psql prompt run the following (replacing <username> and <password> accordingly):

CREATE USER renalware WITH PASSWORD 'renalware';
ALTER USER renalware WITH SUPERUSER;
ALTER USER renalware WITH LOGIN;

Configure Ruby

Check the ruby declaration at the top of the Gemfile to see which version of Ruby to install using your preferred Ruby version manager. If using rbenv for example:

rbenv install 2.4.1
cd renalware-core
rbenv local 2.4.1

Install app dependencies and seed the database with demo data

gem install bundler --conservative
bundle exec rake db:setup

Run the server

$ bin/web

Note bin/web starts a sever in the spec/dummy directory. Just executing rails server will not work.

Visit http://localhost:3000

Login in one of the demo users (in order of role permissiveness):

  • superkch
  • kchdoc
  • kchnurse
  • kchguest

They all share the password renalware

Alternatively you can use foreman to start to the web server and the background workers all together (see the Procfile) and tail the development log to see the output:

bundle exec foreman start
tail -f spec/dummy/log/developments.log

Running background jobs

Some work goes on in the background, for example the processing of HL7 messages.

To start background job processing in development:

bin/delayed_job run

Run bin/delayed_job for other options.

delayed_job logs to its own log. To see the output:

tail -f spec/dummy/log/delayed_job.log

Running tests

Install chromedriver

MacOS

  • Install Chrome
  • Download chromedriver from eg here
  • Unzip and place in location in your PATH eh /usr/local/bin
  • If you have chromedriver errors it maybe your installed version of Chrome is not compatible your chromedriver version. In this case check your versions with:
chromedriver -v
chrome -v

and consult the driver release notee eg for 2.38 to check compatibility

Ubuntu

sudo curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
sudo echo "deb [arch=amd64]  http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
sudo apt-get -y update
sudo apt-get -y install google-chrome-stable

Download latest chromedriver from wget https://chromedriver.storage.googleapis.com/index.html e.g.

wget https://chromedriver.storage.googleapis.com/81.0.4044.69/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/bin/chromedriver
sudo chown root:root /usr/bin/chromedriver
sudo chmod +x /usr/bin/chromedriver

RSpec unit and integration tests

bundle exec rspec

Cucumber acceptance tests

Run domain tests which bypass the UI:

bundle exec cucumber

Run web tests exercising the UI:

bundle exec cucumber TEST_DEPTH=web --profile rake_web

Test coverage reports can be found in coverage/

Code Quality

Code quality can be analyzed using by running codeclimate analyze. To setup CodeClimate locally read the setup instructions:

https://github.com/codeclimate/codeclimate

Deploying

To a server

Please note the deployment scripts are under development

Please see the renalware-provisioning repo.

To a Vagrant VM

Follow these instructions and deploy using capistrano:

cap vagrant deploy

Heroku

Just push app.json in the project root defines the deployment steps for Heroku so you should be able to just create

General notes

Engine migrations

config.active_record.schema_format = :sql in application.rb is used the engine uses Postgres views and functions which are not properly supported in a schema.rb

Creating scenic views

As we are an engine this is the workaround for now.

  bundle exec spec/dummy/bin/rails generate scenic:view my_view_name

Then copy the new files from spec/dummy/db/views and spec/dummy/db/migrations to ./db/views and ./db/migrations

Throttling login attempts

rack-attack is configured to throttle login attempts. Only 10 attempts per username as permitted in any one minute in an attempt to thwart login attacks.

Test Configuration

RSpec is configured to silence backtrace from third-party gems. This can be configured in .rspec with --backtrace which will display the full backtrace.

Debugging

The awesome_print gem is available for improved inspection formatting, for example:

Rails.logger.ap @variable

To make awesome_print the default formatter in irb, add the following to ~/.irbrc

require "awesome_print"
AwesomePrint.irb!

Docker - WIP!

docker build -t renalware .
docker-compose run web rake db:create
docker-compose run web rake app:db:create

Browser testing

Browserstack logo