A quick fix for an annoying (and not very descriptive) error Browsing context has been discarded when setting up Ruby on Rails system tests with Firefox headless.
A new version of my Ruby gem for generating PDF invoices InvoicePrinter is out! This time bringing in a bundled server that can be handy for applications not running on Ruby. Continue reading
Just a quick remainder about what slowed me down today. Continue reading
Next release of InvoicePrinter will include a server with JSON API. That means you will be able to create simple and beautiful PDF invoices in seconds from any tech stack.
We should all strive to handle all possible errors in our programs and display nice error messages to the users, but one can hardly be sure that nothing will ever go wrong. That’s why I believe we should try to embed a debug mode that users can take advantage of when submitting the issue or solving the problem. Luckily this is very simple thing to do. Continue reading
This is a simple example of adding a conditional and partial unique index to Rails applications backed by PostgreSQL.
Tomorrow starts the famous African Ruby conference Rubyfuza in Cape Town and since I am attending I decided I will do a final 1.1 release of InvoicePrinter from South Africa just before everything begins. So here we are, this is a 1.1 “Cape Town” release. Continue reading
Database migrations are the tricky part of any deployment. They make zero-time deploys problematic. They requires special attention since they can break stuff. Some might choose to run migrations automatically, some of us run them manually. But one thing is almost always true; the production code without migrations should not ever run. So how not to run your code without doing migrations first?
Refinements is a Ruby 2.0 answer to monkey patches that can take control of your program without you realizing it. Next time you will be tempted to monkey patch something, think twice and consider using refinements. Continue reading
At work we use ActiveModel::Serializer to serialize ActiveRecord objects into JSON:API-like responses for our APIs. The problem is that ActiveModel::Serializer is clever enough to dasherize our hash keys (so they can be accessed as properties instead of  brackets syntax) and our hash keys are actually real keys that we have to serve untouched. Continue reading