class Object

Public Instance Methods

blank?() click to toggle source

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
presence() click to toggle source

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
present?() click to toggle source

An object is present if it’s not blank?.

# File lib/active_support/core_ext/object/blank.rb, line 19
def present?
  !blank?
end
try(*a) { |self| ... } click to toggle source

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