Let’s see how to make a ruby gem using the right format and specs,
using the type-on-strap
jekyll-theme gem as an example.
Prepare the gemspec
Find an example of the type-on-strap.gempsec
It’s all straightforward, the only tricky part is to make sure that your gem has everything you need.
To do that I am using this regex:
spec.files = Dir.glob("**/{*,.*}").select do |f|
f.match(%r{^(assets|pages|_(includes|layouts|sass)/|(Gemfile|index.html)((\.(txt|md|markdown)|$)))}i)
end
Here it uses a complex regex to select folder and files from all folder and sub folders.
I could have used a
.reject
to remove some files, or a&
afterend
to add manually a directory/page withDir["file", "directory/**/*"]
.
Check the gem
First to test that the gem gets all the required documents:
# Build the gem
gem build type-on-strap.gemspec
# Unpack the built gem
gem unpack type-on-strap-x.x.gem
You can check in the unpacked gem folder all the files included in your gem.
Run the gem locally
Here I had a jekyll gem, so I updated my Gemfile with the current gem version I wanted to test:
source "https://rubygems.org"
gem "type-on-strap", "1.x.x", path: "." # or gemspec
Then did the usual bundle exec jekyll serve
.
Deploy the gem
Now I want to push the gem online and test it from there.
# Push the gem online
gem push type-on-strap-x.x.gem
# Delete the gem online
gem yank type-on-strap -v x-x
Observe the result on https://rubygems.org/