In keeping with our tradition of Rails Rumble Gem Teardown posts, we’d like to thank the Red Miners team for putting together this fantastic post. Don’t forget to check out their entry, Gemsavvy, which placed 8th overall!
Welcome to the Gem Teardown for the 2015 Rails Rumble. For background, the Rails Rumble is a competition where teams have 48 hours to build a Rails app from scratch. Teams compete for fame and sweet prizes provided by the Rails Rumble sponsors. The contest wrapped up and the winners have been announced. Congratulations to everyone who participated!
The Rails Rumble organizers - especially Tom Mango - were kind enough to collect Gemfiles from the teams and provide them to us for some analysis. They did a similar writeup last year except that this year, the first analysis was made by the Rails app we made during the Rails Rumble!
First, let’s introduce you to the Gemsavvy project.
Gemsavvy
Basically, you create a community - let’s say Rails Rumble - then start a survey - let’s say 2015 Gem Teardown - and ask your fellow members to upload their Gemfile. Gemsavvy will analyse all gems used by your community and propose graphs based on gems usage among different categories (ie Background Jobs, Search Engines, etc.). Plus, it will show you the Outsiders, these gems that are quite popular on Github but only used by few people from your community.
The purpose of this analysis is to discover trendy gems and create exchanges among members of a community. These exchanges could even lead to lightning talks in local Ruby User Groups.
Red Miners
As you may have guessed, your humble authors for this writeup are the members of Red Miners competitor team: Anthony Laibe working for Smart Pension, Kevin Disneur, Michael Fatoki-Bello working for Arena Flowers and Cecile Veneziani freelancer and Rails teacher.
In 48 hours, we pushed 264 commits, merged 102 pull requests, closed 62 issues on Trello and last but not least, there were only 4 hours without anyone committing on the repository.
Gem Analysis
We analyzed 128 Gemfiles. Read on to learn how the Rails Rumble teams were able to create such amazing apps over one weekend.
Web frameworks / Database adapters / Web servers
What a first surprise! Someone built a project with cuba, a micro framework.
Concerning Sinatra and its 10.4% of usage, some - like us - might have just installed it in order to have a web interface to sidkeiq.
But obviously the most popular web framework is still Ruby on Rails with 88.1% of usage.
Rails Rumble used Heroku for deployment this year again. So most teams used PostgreSQL (80.9%), the Heroku default. Note that 5 teams made the choice to use MySQL. We’re quite surprised to note that 22 teams have sqlite in their Gemfiles. We can only suppose that some might have forgotten to remove it or that some really used it.
It’s really interesting to have a look at charts like web servers because all of these projects are quite old and well used.
Here again we can see that the defacto puma proposed by Heroku is widely used.
Now, the interesting part is the distribution usage between passenger, thin and unicorn. We can clearly guess which one is the oldest.
Authentication / Authorization
Ok there’s no discussion here. Devise with its 65.2% is the most used authentication gem.
But we must say that we were quite surprised to discover that some teams used other gems such as clearance, sorcery and even authlogic.
Looks like in the authorization world no one clearly stood out after the retirement of cancan even if here Pundit seems to be the most used one.
Only 16% of the teams did use a different template engine than the standard ERB.
52.4% are (still) using haml compared to 33.3% using (the awesome) slim.
Note that few used tilt and markerb.
It seems that a lot of people are (still) using the standard form helpers provided by Ruby on Rails. For the other ones, simple_form is widely used. It can be used in combination with cocoon to easily handle dynamic nested forms.
Only 14% of the teams needed file upload. Paperclip and then carrierwave are the most used ones. Shout out to the new comers dragonfly and refile.
Kaminari with 73.3% of usage is the defacto pagination gem since few years.
It’s interesting to see that will_paginate is still used by some projects.
New entry in the gem teardown, the searching category. 4% of projects did use a search engine.
We can say that the Rails community adopted elasticsearch.
Background jobs / Scheduling
24% of projects used background jobs. sidekiq is clearly the most used one.
It’s interesting to see that here delayed jobs is more used than resque.
Only 4% projects needed scheduling. Among them 60% used whenever. The last 40% was shared by resque-scheduler and rufus-scheduler.
CSS / Assets
Note that Materialize was not tagged but we’ve done the math for you.
Here are the stats: 32% for bootstrap, 10% for bourbon and also 10% for materialize.
And no less than 31 gems from Rails Assets!
Configuration management / State machines
We can notice that dotenv is widely more used than figaro.
On the other hand, it’s quite surprising to see that settingslogic is still used while it hasn’t been updated for 3 years.
Only 3% of projects used state machines. It looks like that the community hasn’t chosen yet its state machine between aasm and state_machine.
Admin interfaces / Exception notification
Another category that is surprising. Only 7% of projects did install an administration interface while it’s a convenient way to have an overview of what’s happening on the app during the Rails Rumble judging week.
While rails_admin is an easy option (everything working out of the box), at Red Miners, we prefer the configuration required by activeadmin. Thus we took time to tweak it during the hackathon.
Only 14% of projects configured an exception notification system. 3 trackers where used: 1 open source simple mailing gem named exception_notification and 2 free-tier services. Among them rollbar was clearly the most used but also the least beautiful. That said, compared to airbrake, rollbar offers a wider retention period.
Geocoding & Maps / Graphing
7% of projects used maps or geocoding and one of them used the PostGIS adapter.
3% integrated graphs with a preference to chartkick.
API / HTTP Clients
What an unexpected stat! More than 7 different APIs where used!
The most used ones where GitHub and Facebook.
But there were also Amazon Product Advertising, Bitly, Ebay, Linkedin and Twitter.
This section is quite interesting. It looks like we have more than 5 HTTP client gems.
httparty and rest-client appear to be the most famous.
Note that mechanize allows you to follow redirections, links plus fill and submit forms.
Code metrics / Tests
Even during a stressing event such as a hackathon, some took time to pay attention to quality and installed simplecov, rubocop and coveralls.
Again that’s really surprising to discover that 5% of projects do have a unit testing framework in their Gemfile even though it doesn’t permit us to know if these framework were really used.
Here there is no clear preference on whether rspec or minitest.
Outsiders
As we mentioned above, Gemsavvy is not only a per category analyzer. It also extracts interesting gems. We’ve extracted some here:
- chewy - High-level Elasticsearch Ruby framework based on the official elasticsearch-ruby client.
- email_spec - Collection of RSpec/MiniTest matchers and Cucumber steps for testing email in a ruby app using ActionMailer or Pony.
- jazz_hands - Pry-based enhancements for the default Rails 3 and 4 consoles.
- mutant-rspec - Mutation testing for Ruby.
- seedbank - Gives your Rails seed data a little structure.
Red Miners’ Choice
Finally, we’d like to use our editor’s pen to highlight some of the awesome gems that were used for the contest. Definitely check them out:
- config - Easiest way to add multi-environment yaml settings to Rails, Sinatra, Pandrino and other ruby projects.
- enumerize - Enumerated attributes with I18n and ActiveRecord/Mongoid support.
- foreman - Manage Procfile-based applications.
- high_voltage - Easily include static pages in your Rails app.
- materialize-sass - Materialize Sass version for Rails Asset Pipeline.
- mechanize - Mechanize is a ruby library that makes automated web interaction easy.
- reform - Form objects decoupled from models.
- slim - The templating language.
Hope you’ve discovered fun facts about rumblers and discovered new gems. Spread the word in your Ruby groups and find more gems and categories on the survey!