A Ruby on Rails application that allows citizens to "adopt" civic infrastructure, such as fire hydrants.
Ruby HTML CSS JavaScript
Pull request Compare This branch is 201 commits ahead, 577 commits behind codeforamerica:master.
Failed to load latest commit information.
app Forgot to interpolate Google Apps config Aug 11, 2016
bin Using Config Spartan for email configuration Jul 2, 2016
config switching googlemaps api version Aug 5, 2016
db Adding model relationships around events May 8, 2016
doc first commit Feb 14, 2011
lib Finished rake tasks for importing/replacing tree data May 10, 2015
log Remove .gitkeep files Dec 2, 2013
public Changed tagline background to be green May 21, 2014
script first commit Feb 14, 2011
spec Improving display of Events, addresses #35 Jul 3, 2016
test Testing users_controller using rspec -- straight transfer of controll… Apr 24, 2016
vendor/assets Remove .gitkeep files Dec 2, 2013
.gitignore Making Adopt-A-Tree 12 factor again Aug 3, 2016
.rspec Setup testing stuff. Nov 11, 2014
.rubocop.yml Update rubocop to version 0.21.0 May 20, 2014
.ruby-gemset define a gemset (for rvm) Apr 23, 2014
.ruby-version Updated Ruby to 2.2.0 Feb 8, 2015
.travis.yml Setting up Travis CI DB again Aug 3, 2016
Capfile Adding Capistrano and appropriate plugins Jun 25, 2016
Gemfile Making Adopt-A-Tree 12 factor again Aug 3, 2016
Gemfile.lock Making Adopt-A-Tree 12 factor again Aug 3, 2016
Guardfile Setup testing stuff. Nov 11, 2014
LICENSE.md Add periods Apr 28, 2011
Procfile Replace thin with puma Apr 22, 2012
README.md Updating Travis/Code Climate URLs to be for the OTC repo Sep 28, 2016
Rakefile Update rails to version 4.1.0 Apr 10, 2014
config.ru Update rails dependency to version 4.0.1 Dec 2, 2013
screenshot.png Updating the screenshot May 21, 2015



Build Status Code Climate Test Coverage

Beautify your street by watering a tree.



See It Online

Production is at http://adoptatree.brewingabetterforest.com/

Stage is at http://adoptatree-mpls-stage.opentwincities.org/

Code of Conduct

As an Open Twin Cities project, the Open Twin Cities Code of Conduct is in effect regarding online and offline project activities.

Open Twin Cities is dedicated to a harassment-free community for everyone. Be kind to one another. Do not insult or put down other community members. Behave civilly.


System Dependencies

Mac OS X

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git postgres node 

Note in the above we are fetching Homebrew to handle system dependencies.


sudo apt-get install git postgresql libpq-dev nodejs nodejs-legacy npm libffi-dev


sudo yum install git postgresql-server postgresql-devel nodejs npm libffi-devel patch 
sudo postgresql-setup initdb && sudo systemctl enable postgresql.service && sudo service postgresql start

Prep the Database

Mac OS X

First, open another terminal and start the database:

postgres -D /usr/local/var/postgres

Then, create the adopta database user

createuser -d adopta


sudo -u postgres createuser -d adopta

As superuser, edit:

  • /etc/postgresql/{version number}/main/pg_hba.conf in Ubuntu/Debian, or
  • /var/lib/pgsql/data/pg_hba.conf in Fedora

Find one of these lines:

local   all             postgres                                peer
local   all             all                                     peer

and add the following line right above it:

local   all             adopta                                  trust

Now, save and restart Postgres:

sudo service postgresql restart


PhantomJS is used by tests

npm install -g phantomjs


rbenv and it's pluggins are installed via Git. Below are commands to run in OS X or Linux for installing rbenv and a couple of useful plugins.

(Note that some systems use ~/.bash_profile instead of ~/.bashrc. Running ls -a ~ | egrep '(.bash_profile|.bashrc)' should tell you which one to use.)

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash

Get the Repo

git clone https://github.com/ballPointPenguin/adopt-a-tree.git
cd adopt-a-tree

Install the Ruby

First, find out what version of Ruby Adopt-a-Tree runs in

rbenv version

Then, install whatever version of Ruby the above command just returned. This part might take some time.

rbenv install <version number> -k

Install Gems and Create the Adopt-A-Tree Database

gem install bundler
bundle install
bundle exec rake db:create
bundle exec rake db:schema:load
bundle exec rake db:seed

Additional Installation Resources

In case you have trouble with the above installation steps, you might want to refer to the Adopt-a-Hydrant Wiki for detailed instructions on installation. You can also post a question to the Open Twin Cities Google Group.


rails server

Importing More Trees

Once or twice a year, the Minneapolis Park Board sends us a shapefile full of trees to upload to Adopt-A-Tree. Here is the process for putting those on the site:

  1. Upload the shapefile to Open Twin Cities' Open Data Portal
  2. Download a JSON version of the file from Open Twin Cities' Open Data Portal
  3. Copy the JSON file to the Adopt-A-Tree server, using user ubuntu. Bill has keys.
  4. Log into the Adopt-A-Tree server using user ubuntu
  5. Back up the database using pg_dump adopta_production > SOMEFILENAME. You'll need to change users.
  6. Open a rails console for production.
  7. Delete all trees that have not been adopted Thing.where(user_id: nil).destroy_all
  8. Exit the console, run rake db:trees:list_fields on the JSON file (see below)
  9. run rake db:trees:import. Be sure RAILS_ENV=production.
  10. Open a production rails console again and verify the trees have been imported.
  11. Restart Adopt-A-Tree if the process died during the import.

When running rails or rake, you'll need to prepend RAILS_ENV=production bundle exec

Rake Tasks

Three rake tasks are available to help you import additional trees to the database, or to replace all tree data, from a GeoJSON file provided by Socrata.

To view a list of the names and indices of all fields in a file, run rake db:trees:list_fields[PATH_TO_GEOJSON]. PATH_TO_GEOJSON can be relative or absolute.

$ rake db:trees:list_fields[db/trees.json]
0 - :sid
1 - :id
2 - :position
64 - x
65 - y
66 - species

For the import and replace tasks, you're going to need to know the column indices for the 'id' (not :id), 'uniqueid', 'x', 'y', and 'species' columns.

To import additional trees into the database from a GeoJSON files, run rake db:trees:import[PATH_TO_GEOJSON,ID_INDEX,UNIQUEID_INDEX,X_INDEX,Y_INDEX,SPECIES_INDEX]:

rake db:trees:import[db/trees.json,8,9,64,65,66]

To completely replace the trees currently in the databse with the trees contained in a GeoJSON file, run rake db:trees:replace[PATH_TO_GEOJSON,ID_INDEX,UNIQUEID_INDEX,X_INDEX,Y_INDEX,SPECIES_INDEX]:

rake db:trees:replace[db/trees.json,8,9,64,65,66]


Assuming you have SSH keys setup properly, deploy via:

cap stage deploy
cap production deploy

Accessing Admin View

Based on Raleigh's Adopt-A-Hydrant installation notes.

  1. First, signup through the site.
  2. Then open a terminal and start the rails console - rails console.
  3. List all users - User.all
  4. Find your user id in the list. For this example, assume it is '1'.
  5. Search for your user - a=User.find(1)
  6. Set the admin flag on your user - a.admin = true
  7. Save your user - a.save
  8. Go back to your browser, and visit localhost:3000/admin

How to Contribute Code

So you want to help out on Adopt-A-Tree? You're awesome, and we're happy to help you be as awesome as possible.

In the spirit of free software, everyone is encouraged to help improve this project. So ways to contribute code include:

  • by writing specifications/tests
  • by writing code (no patch is too small: fix typos, add comments, clean up inconsistent whitespace)
  • by forking and sending pull requests
  • by refactoring code

The Basics

First things first, there are a few things you should be familiar with:

  • The Command Line. Depending on your computer and the tools you use, you might use the command line a little or a lot. Either way, it helps to know how to use it a bit.
  • Git and GitHub. Adopt-A-Tree uses these tools to manage our collaborative coding. If you've never used git or GitHub before, you can search the Internet and find a lot of good resources. You can also checkout these couple of tutorials to get started:

Don't worry if you're not comfortable with all of these things. Working on a project like Adopt-A-Tree is a great way to learn.

The Process

Are you ready to contribute? Well, here's how:

  1. Fork the repository.
  2. Clone your fork to your computer
  3. Get it running on your computer. There are a couple of tutorials for installing on Linux (https://github.com/codeforamerica/adopt-a-hydrant/wiki/Adopta-Install-Notes), and the process is pretty similar for OS X.
  4. Find an issue and start working on it at https://github.com/ballPointPenguin/adopt-a-tree/issues
    • Be sure to make comments and ask questions on the issues.
    • We've prioritized issues into milestones, so please checkout the milestones to see what should get done next.
  5. Create a topic branch.
  6. Add specs for your unimplemented feature or bug fix.
  7. Run bundle exec rake test. If your specs pass, return to step 6.
  8. Implement your feature or bug fix.
  9. Run bundle exec rake test. If your specs fail, return to step 8.
  10. Run open coverage/index.html. If your changes are not completely covered by your tests, return to step 6.
  11. Add, commit, and push your changes.
  12. Submit a pull request.

Meetups and Getting Help

Open Twin Cities holds lots of events that everybody is welcome to. Our monthly meetups in Minneapolis and St. Paul are great places to come discuss Adopt-A-Tree, ask questions, and get some help.

We also have online ways to discuss and ask questions about Adopt-A-Tree. Join the Open Twin Cities Google Group to discuss Adopt-A-Tree with civic technologists all around the Twin Cities. You can also pose questions and submit problems and ideas though the issues on GitHub. And feel free to email questions and ideas to contact@opentwincities.org.

Additional Ways to Contribute

Here are some non-coding ways you can contribute:

Submitting an Issue or Bug

We use the GitHub issue tracker to track bugs and features. Before submitting a bug report or feature request, check to make sure it hasn't already been submitted. When submitting a bug report, please include a Gist that includes a stack trace and any details that may be necessary to reproduce the bug, including your gem version, Ruby version, and operating system. Ideally, a bug report should include a pull request with failing specs.

Google Analytics

If you have a Google Analytics account you want to use to track visits to your deployment of this app, just set your ID and your domain name as environment variables:

heroku config:set GOOGLE_ANALYTICS_ID=your_id
heroku config:set GOOGLE_ANALYTICS_DOMAIN=your_domain_name

An example ID is UA-12345678-9, and an example domain is adoptahydrant.org.

Supported Ruby Version

This library aims to support and is tested against Ruby version 2.1.0.

If something doesn't work on this version, it should be considered a bug.

This library may inadvertently work (or seem to work) on other Ruby implementations, however support will only be provided for the version above.

If you would like this library to support another Ruby version, you may volunteer to be a maintainer. Being a maintainer entails making sure all tests run and pass on that implementation. When something breaks on your implementation, you will be personally responsible for providing patches in a timely fashion. If critical issues for a particular implementation exist at the time of a major release, support for that Ruby version may be dropped.


Copyright (c) 2014 Code for America. See LICENSE for details.