# Contribution **Thank you in advance for your contribution!** Please read [Auth0's contribution guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md) before beginning work on your contribution here. ## Environment setup The best way we've found to develop gems locally is by using a local setting for your Bundler config. First, checkout the project locally: ```bash $ pwd /PROJECT_ROOT/ $ mkdir vendor # if one does not exist $ echo "/vendor/" >> .gitignore $ git clone git@github.com:auth0/omniauth-auth0.git vendor/omniauth-auth0 Cloning into 'vendor/omniauth-auth0'... ``` Now, run the following command in your project root directory: ```bash $ bundle config --local local.omniauth-auth0 /PROJECT_ROOT/vendor/omniauth-auth0 You are replacing the current local value of local.omniauth-auth0, which is currently nil $ bundle config Settings are listed in order of priority. The top value will be used. local.omniauth-auth0 Set for your local app (/PROJECT_ROOT/.bundle/config): "/PROJECT_ROOT/vendor/omniauth-auth0" ``` Finally, add or change the gem include to add a `github:` param: ```ruby source 'https://rubygems.org' # ... # OmniAuth strategy for authenticating with Auth0 gem 'omniauth-auth0', github: 'auth0/omniauth-auth0' #.. ``` Now you should be able to make changes locally and have them reflected in your test app. Keep in mind you'll need to restart your app between changes. [Great explanation for why this setup works well](https://rossta.net/blog/how-to-specify-local-ruby-gems-in-your-gemfile.html). ## Testing Tests should be added for additional or modified functionality and all tests should run successfully before submitting a PR. ### Adding tests All new tests should be added to the `/spec/omniauth` directory. Testing resources, like JSON fixtures, should be added to the `/spec/resources` directory. ### Running tests Running tests is as simple as: ```bash $ bundle exec rake spec ``` ## Documentation Documentation for this gem is primarily done at the code level. All new methods should include a docblock at least. ## Code quality tools Code quality is enforced across the entire gem with Rubocop: ```bash $ bundle exec rake rubocop ```