DEPRECATED: Shows the availability of pods, desks and meeting rooms for members at the ODI offices
CSS Ruby JavaScript
Switch branches/tags
release-2013-07-04_13-26-35 release-2013-07-04_09-02-11 release-2013-07-04_09-00-40 release-2013-07-04_08-58-53 release-2013-06-28_17-10-40 release-2013-06-26_01-50-21 release-2013-06-21_08-06-05 release-2013-06-19_07-59-38 release-2013-06-19_01-39-22 release-2013-06-12_07-33-20 release-2013-06-12_05-38-05 release-2013-06-05_07-35-31 release-2013-06-05_07-24-06 release-2013-05-29_13-39-44 release-2013-05-29_07-53-41 release-2013-05-29_01-20-06 release-2013-05-24_16-32-42 release-2013-05-22_01-23-15 release-2013-05-15_08-46-45 release-2013-05-15_01-17-18 release-2013-05-10_08-43-56 release-2013-05-09_10-00-23 release-2013-05-09_09-42-38 release-2013-05-09_08-14-40 release-2013-05-08_01-21-09 release-2013-05-07_07-39-32 release-2013-05-03_13-00-12 release-2013-05-03_10-30-36 release-2013-04-29_10-06-07 release-2013-04-26_14-09-56 release-2013-04-26_08-13-21 release-2013-04-25_19-21-13 release-2013-04-19_08-03-29 release-2013-04-19_07-40-15 release-2013-04-18_15-49-49 release-2013-04-18_15-44-09 release-2013-04-18_08-57-56 release-2013-04-18_08-43-58 release-2013-04-15_14-19-44 release-2013-04-15_12-59-30 release-2013-04-15_12-57-56 release-2013-04-15_11-18-17 release-2013-04-15_10-26-02 release-2013-04-08_14-46-37 release-2013-04-08_13-01-05 release-2013-04-08_12-49-14 release-2013-04-08_12-43-21 release-2013-04-08_12-01-36 release-2013-04-08_11-58-55 release-2013-04-08_10-35-00 release-2013-04-08_08-27-47 release-2013-04-07_19-04-24 release-2013-04-05_10-14-55 release-2013-04-05_10-11-32 release-2013-04-04_15-04-43 release-2013-04-04_14-43-26 release-2013-04-04_13-54-05 release-2013-04-04_13-31-10 release-2013-04-04_09-51-39 release-2013-04-02_16-12-52 master-2014-05-09_16-17-31 master-2014-05-09_16-05-11 master-2014-05-09_14-50-26 master-2014-05-09_14-31-26 master-2014-02-26_11-04-34 master-2014-02-26_08-24-31 master-2014-02-20_16-03-33 master-2014-02-12_08-19-34 master-2014-02-05_09-40-37 master-2014-01-29_10-34-54 master-2014-01-22_08-47-48 master-2014-01-17_11-46-01 master-2014-01-08_08-52-41 master-2014-01-02_10-52-37 master-2014-01-02_10-27-58 master-2013-12-18_09-27-37 master-2013-12-11_09-07-10 master-2013-12-04_08-49-42 master-2013-11-27_11-17-01 master-2013-11-26_13-34-29 master-2013-11-20_09-36-52 master-2013-11-13_08-53-16 master-2013-11-06_09-16-26 master-2013-10-30_08-53-29 master-2013-10-16_07-31-05 master-2013-10-09_08-20-25 master-2013-10-02_08-36-07 master-2013-09-25_07-11-57 master-2013-09-18_07-10-25 master-2013-09-13_08-38-52 master-2013-09-11_07-06-55 master-2013-09-04_07-16-19 master-2013-08-21_08-36-20 master-2013-08-14_07-31-15 master-2013-08-09_16-41-13 master-2013-08-09_16-22-48 master-2013-08-07_07-25-26 master-2013-07-31_07-33-22 master-2013-07-24_06-00-26 master-2013-07-17_07-38-17
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Build Status Dependency Status Coverage Status Code Climate License Badges

Office Calendar

Shows the availability of pods, desks and meeting rooms for members at the ODI offices


This code is open source under the MIT license. See the file for full details.

Setting up the Google Apps API

This is rather a brittle process, and there's a few steps that need to be followed for everything to work. It's documented here, but I'll spell it out here too:

  • Set up a new project in the Google API console, this needs to have access to the Google Calendar API
  • Set up a service account, download the private key (and put it in the root of the Rails project), and copy and paste the public key fingerprint into the appropriate place in the .env file
  • Copy the service account email address, put it in the appropriate place in the .env file too, and also put an email address (which will need to be a domain admin) that the service account will act on behalf of in the GAPPS_USER_EMAIL entry. You will also need to put their pasword too, but hopefully this step will go away in future
  • With the service account email still in your clipboard, add the service account to your team (under 'team' in the API console), and make them an owner.
  • Go back to the 'API Access' section, and copy the service account Client ID, now go to your domain admin section (in the format{YOUR DOMAIN})
  • Go to 'Advanced tools', and choose 'Manage third party OAuth access'
  • Paste the Client ID into the box marked 'Client name', and enter, (comma seperated, or it won't work!) into the API scopes box. Click 'Authorize'
  • Erm
  • That's it


We use Poltergeist for some of the testing (because Javascript), so you'll need to make sure phantom.js is installed on your machine. You can do this as follows:


  • Homebrew: brew install phantomjs
  • MacPorts: sudo port install phantomjs
  • Manual install: Download this


  • Download the 32 bit or 64 bit binary.
  • Extract the tarball and copy bin/phantomjs into your PATH

Manual compilation

Do this as a last resort if the binaries don't work for you. It will take quite a long time as it has to build WebKit.

(See also the PhantomJS building guide.)