Skip to content
Generate my PDF resume with Ruby
Branch: master
Clone or download
Latest commit 923e799 Jun 23, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.bundle Upgrade to Ruby 2.3.1 Apr 29, 2016
.circleci Run CircleCI commands with sudo Feb 3, 2019
bin Get rid of generated license finder python file Jul 20, 2017
doc Add GPL-3.0+ license to whitelist Jul 24, 2017
lib First pass at upgrading to Ruby 2.6.3 Apr 23, 2019
pitch/assets Bring config files back to root directory so that server doesn't need… Jul 5, 2017
resources Fix outdated links May 10, 2019
spec First pass at upgrading to Ruby 2.6.3 Apr 23, 2019
.bettercodehub.yml Add bettercodehub config Aug 22, 2018
.codebeatsettings Fix error in codebeatsettings [ci skip] Jan 26, 2017
.codeclimate.yml Update gems and disable Rubocop check on Code Climate until they upgr… Feb 9, 2019
.coveralls.yml Add Coveralls config Mar 19, 2017
.gitignore Ignore any GitPitch files in the top level directory Jul 5, 2017
.hound.yml Add Hound configuration Oct 22, 2016
.pullreview.yml Minor pullreview config change to see if it works Mar 19, 2017
.reek.yml Update reek to version 5 Jul 20, 2018
.rspec Downgrade RSpec and get rid of legacy_formatters Aug 11, 2014
.rubocop.yml Update gems and Rubocop config Jun 22, 2019
.scrutinizer.yml First pass at upgrading to Ruby 2.6.3 Apr 23, 2019
.simplecov Put simplecov filter back in Jun 30, 2018
.yardopts Add LICENSE to list of yardopts Apr 1, 2017 Bump version Nov 13, 2015
Gemfile First pass at upgrading to Ruby 2.6.3 Apr 23, 2019
Gemfile.lock Update gems and Rubocop config Jun 22, 2019
Guardfile Have reek ignore the generated resume.rb file Jan 8, 2018
LICENSE.txt Update copyright on license Feb 4, 2018 Bring config files back to root directory so that server doesn't need… Jul 5, 2017
PITCHME.yaml Bring config files back to root directory so that server doesn't need… Jul 5, 2017 Update README Jun 23, 2019
Rakefile Extract out rake tasks from the main Rakefile to lib/tasks Mar 20, 2017
appveyor.yml Revert appveyor back to Ruby 2.5 Apr 23, 2019
resume.gemspec Update gems and Rubocop config Jun 22, 2019


Build Status Build Status Build Status Build Status Build Status Build Status Build Status
Code Quality Code Climate Codebeat Badge Scrutinizer Status
Code Coverage Code Climate Coverage Codecov Coverage Coveralls Coverage Scrutinizer Coverage Documentation Status
Other Hakiri Status Known Vulnerabilities GitPitch Made with Ruby

This is a Ruby command line interface (CLI) application that generates my resume. I made it in order to teach myself a bit about the Ruby PDF generation library Prawn. Railscast #153 is also a good resource for learning about it.

Text is deliberately obfuscated in the JSON files that contain the resume content with Base64 to ensure people generate the PDF in order to be able to read anything.


git clone
cd resume
bundle install


  • Ruby 2.6.3
  • i18n, Prawn and Prawn-Table (if you don't have the specific versions of the gems, you will be prompted to install them)
  • RSpec, if you want to run the tests


Generate Resume

Generate the resume in the following languages:

🇬🇧 bin/resume
🇮🇹 bin/resume -l it
🇯🇵 bin/resume -l ja

Help: bin/resume -h


Run the tests:


Coverage Report

View the Simplecov test coverage report:

open coverage/index.html


Generate the YARD documentation:


One Sheet Resume

Generate the "one sheet" version of the resume (the whole app and specs in a single file called resume.rb).


If I sent my resume to you directly, it would have been generated from this rake task:

bin/rake resume

Generate One Sheet

The resume PDF can be generated from the one sheet in a similar way as the CLI app:

🇬🇧 ruby resume.rb
🇮🇹 ruby resume.rb -l it
🇯🇵 ruby resume.rb -l ja

One Sheet Specs

The specs can also be run directly on the one sheet resume:

rspec resume.rb

Delete Assets

If there are ever any errors or issues related to the downloading of remote assets that cause the resume to not be able to be generated, you can run the following rake task to delete all resume-related assets from the local tmpdir:

bin/rake resume:delete_assets

Related Resources


  • It doesn't seem possible yet in Prawn to make an embedded image a clickable link. Until support is possible (if ever), I've simply pulled in images from Dropbox and overlaid a transparent text link on top to simulate clicking an image. More discussion on this issue is at this StackOverflow thread.


Using Ruby Packer, an executable can be created for the resume. However, this is very experimental, doesn't really work properly, and is only documented here as an interesting curiosity.

Install Ruby Packer

Follow the instructions on the repository's README file. I'll focus on the MacOS installation instructions.

In the resume directory, perform the following:

brew install squashfs
curl -L | gunzip > rubyc
chmod +x rubyc

Generate resume first

Before attempting to do anything with any executable, make sure that you've generated the resume in your target language already so that image and font assets are stored in your local tmp folder and no further connections need to be made in order to fetch them. This is because of an open issue regarding SSL with Enclose.IO's Ruby executable.

If this issue gets solved, maybe the executable can be used to go fetch assets as well.

Generate and run resume executable

As of this writing, Enclose.IO's Ruby executable only goes up to version 2.4.1. Therefore, we will have to override the specified Ruby version with an ENV variable when generating and running the resume executable.

Generate executable (here named resume.out):

CUSTOM_RUBY_VERSION="2.4.1" ./rubyc bin/resume -o resume.out

Run resume executable:

🇬🇧 CUSTOM_RUBY_VERSION="2.4.1" ./resume.out
🇮🇹 CUSTOM_RUBY_VERSION="2.4.1" ./resume.out -l it
🇯🇵 CUSTOM_RUBY_VERSION="2.4.1" ./resume.out -l ja

So, yes, more of a curiosity here than anything really useful.


Stack Overflow

You can’t perform that action at this time.