Bike registration that works: online, powerful, free.
Registering a bike only takes a few minutes and gives cyclists a permanent record linked to their identity that proves ownership in the case of a theft.
We're an open source project. Take a gander through our code, report bugs, or download it and run it locally.
-
Ruby 2.5.1 (we use RVM)
-
Node 10.13.0 & yarn (We use nvm to manage our node version)
-
PostgreSQL >= 9.6
-
Imagemagick (railscast)
-
Sidekiq, which requires Redis. The RailsCast on Resque is a good resource for getting up and running with Redis.
-
If you turn on caching locally: Dalli (railscast - you will need to install and start memcached
/usr/local/bin/memcached
) -
Requires 1gb of ram (or at least more than 512mb)
This explanation assumes you're familiar with developing Ruby on Rails applications.
-
bin/setup
sets up the application and seeds:- Three test user accounts: admin@example.com, member@example.com, user@example.com (all have password
please12
) - Gives user@example.com 50 bikes
- Three test user accounts: admin@example.com, member@example.com, user@example.com (all have password
-
./start
start the server.- start is a bash script. It starts redis in the background and runs foreman with the dev procfile. If you need/prefer something else, do that. If your "something else" isn't running at localhost:3001, change the appropriate values in Procfile_development and .env
-
Go to localhost:3001
Toggle in development | command | default |
---|---|---|
Spring | bin/rake dev:spring |
disabled |
Caching | bin/rake dev:cache |
disabled |
letter_opener | bin/rake dev:letter_opener |
enabled |
We use RSpec and Guard for testing.
-
Run the test suite continuously in the background with
bin/guard
(watches for file changes/saves and runs those specs) -
You may have to manually add the
fuzzystrmatch
extension, which we use for near serial searches, to your databases. The migration should take care of this but sometimes doesn't. Open the databases in postgres (psql bikeindex_development
andpsql bikeindex_test
) and add the extension.CREATE EXTENSION fuzzystrmatch;
We use parallel_tests
to run the test suite in parallel. By default, this will spawn one process per CPU in your computer.
-
Run all the tests in parallel with
bin/rake parallel:spec
-
Run
bin/rake parallel:prepare
to synchronize the test db schema after migrations (rather thandb:test:prepare
). -
Run specific files or test directories with
bin/parallel_rspec <FILES_OR_FOLDERS>
-
Run Guard with parallelism
bin/guard -G Guardfile_parallel
We use the following tools to automate code formatting and linting:
EditorConfig ensures whitespace consistency. See the Download a Plugin section of the EditorConfig docs to find a plugin appropriate to your editor.
Rufo is an opinionated Ruby formatter we use to maintain consistent style with minimum configuration. See the Editor support section of the project README to find a suitable editor plugin.
RuboCop is configured to ignore Ruby style and layout (deferring to Rufo) and focus on code complexity, performance, and suggested best practices.
To run it from the command line, issue bin/rubocop
, optionally passing
a specific file(s). For a performance boost, you can also start a rubocop daemon
with bundle exec rubocop-daemon start
, in which case you'd lint with
bundle exec rubocop-daemon exec
.
See the Editor integration section of the rubocop docs to find an appropriate plugin for on-the-fly linting.
ESlint is configured to run on project JavaScript. To run it, issue yarn lint
.
In general, we recommend installing and running the app without Vagrant for local development
If, however, you would prefer to have a virtual environment, this repository contains a Vagrantfile which is used to automatically set up and configure a virtual local (Ubuntu Xenial) development environment with all of the required dependencies preinstalled.
-
A computer that supports hardware virtualization (Intel VT-x/AMD-V)
-
Vagrant
-
VirtualBox
-
At least 1.5GB of free memory
Run vagrant up
to start the virtual machine. Upon first run, it will run various provisioning scripts to install all of the required packages, configure PostgreSQL, and run all of the Ruby commands to initalize a local Bike Index dev environment. Port 3001 is forwarded locally for testing. Be warned, it will take around a half hour or longer (depending on your internet connection) on first run to download additional Vagrant dependencies and to provision the dev environment. You may observe some informational warning messages during the initial setup which you can safely ignore. vagrant halt
to shutdown the VM. Subsequent startups will take considerably less time after the initial run.
If the initial provisioning fails for any reason, try running vagrant provision
and see if running the provisioner again completes without error. If not, please try to troubleshoot/google issues as much as possible before filing an issue. Many Vagrant related errors/issues have already been solved and are documented between Stackoverflow and Github. If you run in to an issue you're unable to solve, be sure to include all relevant stdout messages and errors.
Have a bug or a feature request? Open a new issue.
Keep track of development and community news.
- Follow @bikeindex on Twitter.
- Read the Bike Index Blog.
Open a Pull request!
Don't wait until you have a finished feature before before opening the PR, unfinished pull requests are welcome! The earlier you open the pull request, the earlier it's possible to discuss the direction of the changes.
Once the PR is ready for review, request review from the relevant person.
If your pull request contains Ruby patches or features, you must include relevant rspec tests.
... and go hard