/loot

An implementation of some of the core MS Money features in Ruby on Rails

Primary LanguageTypeScriptMIT LicenseMIT

Service Status
GitHub Build Status
Code Climate Code Climate
Code Climate Test Coverage
Snyk (npm) Known Vulnerabilities
Snyk (Gemfile) Known Vulnerabilities

Description

Loot is a web-based personal finance management application. Its main goal is to reproduce the core functionality of Microsoft Money 2008, for the web.

Rails on the backend (JSON API); Angular.js + Bootstrap on the frontend

Getting Started

  1. Clone the repository (git clone git://github.com/scottohara/loot.git) and switch to it (cd loot)
  2. Install the server-side dependencies (bundle config --local path vendor/bundle && bundle install) (path vendor/bundle ensures that gems are installed locally in the project)
  3. Install the client-side dev dependencies (npm install) (Note: you should have ./node_modules/.bin in your shell path; so that locally installed packages are preferred over globally installed ones)
  4. (Optional) Configure database.yml (uses postgres by default)
  5. (Optional) Export your existing MS Money data (see below)
  6. Initialise the database (rake db:setup, or if you have no data to import rake db:create && rake db:migrate)
  7. Configure environment variables for the username and password to login as (export LOOT_USERNAME=user && export LOOT_PASSWORD=pass)
  8. Start the database server and app server in dev mode (npm start)
  9. Browse to http://localhost:8080/index.html and login using the credentials configured at step #8

Exporting MS Money data

To get data out of MS Money and into Loot, I'm using the excellent Sunriise project to access the underlying data from my *.mny file, and export it as a set of CSV files.

  1. Download the latest Sunriise build
  2. Launch the executable JAR file
  3. Choose the "MS Money file viewer" option
  4. File -> Open -> {your *.mny file}
  5. File -> Export DB -> To CSV
  6. Save to ~/Documents/sunriise/csv
  7. Run the importer (rake db:seed)

(Note: this import tool has been tested using my MS Money file only. YMMV.)

Building

npm run build

Running Tests

Frontend specs are implemented using mocha+chai+sinon.

Two npm scripts are available to run the frontend test suite:

  1. npm run test:bdd watches for any file changes and runs the full test suite (without code coverage)
  2. npm run test:coverage performs a single full test suite run, including instanbul code coverage reporting. Summary coverage reports are written to stdout, and detailed HTML reports are available in /loot/coverage/index.html

Backend specs are implemented using RSpec:

  1. Ensure the database server is running (e.g. npm run db)
  2. Run the RSpec rake task (bundle exec rake spec). To run specific specs, use RSpec filtering (fdescribe, fit, xdescribe, xit)

Integration tests are implemented using Cypress:

  1. Start the database server and app server in test mode, and launch Cypress (npm run test:e2e)
  2. Optionally run Cypress in headless mode (cypress run --browser chrome)

Code Quality

Frontend checks are implemented using eslint:

  1. npm run lint

Backend checks are implemented using rubocop:

  1. bundle exec rubocop

Deployment (Staging/Production)

Before deploying, you should first create an annotated tag (e.g. git tag -am "Version 1.00" v1.00).

Then run:

  • npm run deploy:staging to deploy to the staging app
  • npm run deploy:production to deploy to the production app