Saltar al contenido

Ruby: Cómo convertir un string a booleano

Te recomendamos que revises esta solución en un ambiente controlado antes de pasarlo a producción, saludos.

Si usa Rails 5, puede hacer ActiveModel::Type::Boolean.new.cast(value).

En Rails 4.2, utilice ActiveRecord::Type::Boolean.new.type_cast_from_user(value).

El comportamiento es ligeramente diferente, como en Rails 4.2, el true valor y false se comprueban los valores. En Rails 5, solo false los valores están marcados, a menos que los valores sean nulos o coincidan con un false valor, se supone que es true. Los valores falsos son los mismos en ambas versiones:

FALSE_VALUES = [false, 0, "0", "f", "F", "false", "FALSE", "off", "OFF"]

Rieles 5 Fuente: https://github.com/rails/rails/blob/5-1-stable/activemodel/lib/active_model/type/boolean.rb

def true?(obj)
  obj.to_s.downcase == "true"
end

Con frecuencia he usado este patrón para extender el comportamiento central de Ruby para que sea más fácil lidiar con la conversión de tipos de datos arbitrarios a valores booleanos, lo que hace que sea realmente fácil lidiar con diferentes parámetros de URL, etc.

class String
  def to_boolean
    ActiveRecord::Type::Boolean.new.cast(self)
  end
end

class NilClass
  def to_boolean
    false
  end
end

class TrueClass
  def to_boolean
    true
  end

  def to_i
    1
  end
end

class FalseClass
  def to_boolean
    false
  end

  def to_i
    0
  end
end

class Integer
  def to_boolean
    to_s.to_boolean
  end
end

Así que digamos que tienes un parámetro foo que puede ser:

  • un número entero (0 es falsetodos los demás son true)
  • a true booleano (true/false)
  • a string (“true”, “false”, “0”, “1”, “VERDADERO”, “FALSO”)
  • nulo

En lugar de usar un montón de condicionales, puedes simplemente llamar foo.to_boolean y hará el resto de la magia por ti.

En Rails, agrego esto a un inicializador llamado core_ext.rb en casi todos mis proyectos ya que este patrón es muy común.

## EXAMPLES

nil.to_boolean     == false
true.to_boolean    == true
false.to_boolean   == false
0.to_boolean       == false
1.to_boolean       == true
99.to_boolean      == true
"true".to_boolean  == true
"foo".to_boolean   == true
"false".to_boolean == false
"TRUE".to_boolean  == true
"FALSE".to_boolean == false
"0".to_boolean     == false
"1".to_boolean     == true
true.to_i          == 1
false.to_i         == 0

Tienes la opción de añadir valor a nuestro contenido cooperando tu veteranía en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *