1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

adds a section about booleans in the API guidelines [ci skip]

This commit is contained in:
Xavier Noria 2014-01-26 22:10:05 +01:00
parent 225bcadfed
commit e1e17a55d2

View file

@ -128,6 +128,53 @@ On the other hand, regular comments do not use an arrow:
# polymorphic_url(record) # same as comment_url(record)
```
Booleans
--------
In predicates and flags prefer documenting boolean semantics over exact values.
When "true" or "false" are used as defined in Ruby use regular font. The
singletons `true` and `false` need fixed-width font. Please avoid terms like
"truthy", Ruby defines what is true and false in the language, and thus those
words have a technical meaning and need no substitutes.
As a rule of thumb, do not document singletons unless absolutely necessary. That
prevents artificial constructs like `!!` or ternaries, allows refactors, and the
code does not need to rely on the exact values returned by methods being called
in the implementation.
For example:
```markdown
`config.action_mailer.perform_deliveries` specifies whether mail will actually be delivered and is true by default
```
the user does not need to know which is the actual default value of the flag,
and so we only document its boolean semantics.
An example with a predicate:
```ruby
# Returns true if the collection is empty.
#
# If the collection has been loaded
# it is equivalent to <tt>collection.size.zero?</tt>. If the
# collection has not been loaded, it is equivalent to
# <tt>collection.exists?</tt>. If the collection has not already been
# loaded and you are going to fetch the records anyway it is better to
# check <tt>collection.length.zero?</tt>.
def empty?
if loaded?
size.zero?
else
@target.blank? && !scope.exists?
end
end
```
The API is careful not to commit to any particular value, the predicate has
predicate semantics, that's enough.
Filenames
---------