class Object
Public Instance Methods
An object is blank if it’s false, empty, or a whitespace string. For example, ”, ‘ ’, nil
, [], and {} are all blank.
This simplifies:
if address.nil? || address.empty?
…to:
if address.blank?
# File lib/active_support/core_ext/object/blank.rb, line 14 def blank? respond_to?(:empty?) ? empty? : !self end
Returns object if it’s present?
otherwise returns nil
. object.presence
is equivalent to object.present? ? object : nil
.
This is handy for any representation of objects where blank is the same as not present at all. For example, this simplifies a common check for HTTP POST/query parameters:
state = params[:state] if params[:state].present? country = params[:country] if params[:country].present? region = state || country || 'US'
…becomes:
region = params[:state].presence || params[:country].presence || 'US'
# File lib/active_support/core_ext/object/blank.rb, line 37 def presence self if present? end
An object is present if it’s not blank?
.
# File lib/active_support/core_ext/object/blank.rb, line 19 def present? !blank? end
Invokes the public method identified by the symbol method
, passing it any arguments and/or the block specified, just like the regular Ruby Object#public_send
does.
Unlike that method however, a NoMethodError
exception will not be raised and nil
will be returned instead, if the receiving object is a nil
object or NilClass
.
If try is called without a method to call, it will yield any given block with the object.
Examples¶ ↑
Without try
@person && @person.name
or
@person ? @person.name : nil
With try
@person.try(:name)
try
also accepts arguments and/or a block, for the method it is trying
Person.try(:find, 1) @people.try(:collect) {|p| p.name}
Without a method argument try will yield to the block unless the receiver is nil.
@person.try { |p| "#{p.first_name} #{p.last_name}" }
# File lib/active_support/core_ext/object/try.rb, line 28 def try(*a, &b) if a.empty? && block_given? yield self else public_send(*a, &b) end end