2011-05-05 9 views
5

¿Rails tiene una .blank? método que devolverá verdadero si un Objeto está vacío? o nil ?. El código real para esto se puede encontrar here. Cuando intento en 1.9.2 para duplicar esto haciendo:¿Duplicar .blank? en Ruby estándar

class Object 

    def blank? 
    respond_to?(:empty?) ? empty? : !self 
    end 

end 

Llamar a "" .blank? devuelve true pero llamando a "" .blank? devuelve falso cuando según rails documentation una cadena de espacio en blanco debe evaluar a verdadero para .blank? Antes busqué el código que originalmente escribí:

class Object 

    def blank? 
    !!self.empty? || !!self.nil? 
    end 

end 

y tuve los mismos resultados. ¿Qué me estoy perdiendo?

Respuesta

12

Se olvida de esto - https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/blank.rb#L95

class String 
    # A string is blank if it's empty or contains whitespaces only: 
    # 
    # "".blank?     # => true 
    # " ".blank?    # => true 
    # " something here ".blank? # => false 
    # 
    def blank? 
    self !~ /\S/ 
    end 
end 
+0

+1 Niza referencia al archivo 'blank.rb'. Solo estaba cavando eso yo mismo ... – Peter

+0

¡Gracias! Eso es lo que obtengo por no tener acceso a grep en este momento. Te marcaré como la respuesta lo antes posible. –

0

Las cadenas no se clasifican como empty? si están llenos de espacios única

>> " ".empty? 
=> false 

Por lo tanto, es posible que desee crear también

class String 
    def blank? 
    strip.empty? 
    end 
end 

Pero piense detenidamente sobre esto: parche de mono como este es peligroso, especialmente si otros módulos usarán su código.

+0

Tendrá esto en cuenta para el futuro. Ahora mismo estoy aprendiendo más sobre Ruby y jugando con .blank? en IRB. –

1

La clase String anula la implementación de Objectblank? en la implementación de los carriles:

class String 

    def blank? 
    # Blank if this String is not composed of characters other than whitespace. 
    self !~ /\S/ 
    end 

end