Download buttons can be difficult to test, especially with Selenium. Depending on browser, user settings and response headers, one of...

makandra dev

TL;DR Most web applications do not require action on this. SameSite=None (old browser default) will continue to work...

When delivering non-public uploaded files (images, documents etc), one has to decide whether and how to do authorization. The...

An alternative of using a multiple assignment for a Regex are named groups. Especially when your Regex becomes more complicates...

When doing some meta-programming magic and you want to do something for all attributes of a class, you may...

In Rails, we usually have a mailer setup like this: class MyMailer < ActionMailer::Base def newsletter mail to: 'receiver@host.tld',

makandra dev

Class-level process definitions are only applied to the original file Versions are generated based on the processed original file...

When restoring a PostgreSQL dump using pg_restore, you usually add the --clean flag to remove any existing data from...

When building an application that sends e-mails to users, you want to avoid those e-mails from being classified...

When projects run for many years, they require special regular maintenance to stay fresh. This kind of maintenance is usually...

It is very common to parse dates from strings. It seems obvious to use Date.parse for this job. However this...

When debugging your application, you will come across objects created by some gem or framework. You don't have the...

makandra dev

Cross-Site Request Forgery (CSRF) is an attack pattern for websites. A CSRF attack is usually relevant in a...

A JavaScript error in an E2E test with Selenium will not cause your test to fail. This may cause you...

Geordi provides a pretty neat way to generate beautiful commit messages according to your stories in Linear: geordi commit

Geordi's cucumber command has a --rerun option that reruns failing tests the given number of times. Usage: geordi cucumber...

Let's say you have a gem which has the following module: # within the imaginary super gem module SuperClient

Most forms have a single submit button that will save the record when pressed. Sometimes a form needs additional submit...

Migrating data from a legacy into a new system can be a surprisingly large undertaking. We have done this a...

In general, the tracker should always be the definitive source of truth of what needs to be done as part...

In a project team for a bigger project people have several roles: Developer: at makandra Project lead: at makandra

At makandra, we've built a few gems over the years. Some of these are quite popular: spreewald (> 1M downloads...

makandra dev

For webpages to load fast it's recommended to optimize images. Ideally an image's file size should be as...

Background information about session storage in Rails Rails has a default mechanism to store the session in the CookieStore. This...