Skip to content

`FetchBoolean` linter!

Compare
Choose a tag to compare
@smudge smudge released this 21 Mar 17:47
· 20 commits to main since this release
2199c04

This release includes a new FetchBoolean rule that applies to both controller params and any ENV fetch that seems to expect a boolean but does not cast the string value (resulting in a truthy return value even for falsey strings), contributed by @ivangreene!

In Ivan's words:


This is a mistake I've made at least twice now. Basically, query params like ?should_do_something=false will result in the value of string 'false' when fetched from a params object.

# Sending '?should_do_something=false' results in string 'false' here!
should_do_something = params.fetch(:should_do_something, false)

The only way that they can be falsey is if they are omitted from the request and default to false. This is also an issue where we are expecting exactly true and not just any truthy value. The solution is to cast them explicitly

# Always an actual boolean value
should_do_something = ActiveModel::Type::Boolean.new.cast(params.fetch(:should_do_something, false))