From: pschambacher@... Date: 2016-04-21T16:37:38+00:00 Subject: [ruby-core:75071] [Ruby trunk Feature#12306] Implement String #blank? #present? and improve #strip and family to handle unicode Issue #12306 has been updated by Pierre Schambacher. Just my 2 cents here but any time I've been writing a pure ruby application, I ended up including active support or copy-pasting the blank? method. There's a lot of applications of pure ruby code to know if the string that we have is just blank space: parsing a CSV, reading the response from a web request, receive something from a socket, reading a file, ... empty? is not always enough since there's scenarii where having a couple blank spaces make no more sense than nothing at all. I also see the point from Nobu about using regular expressions to validate the input but that's a sword with 2 edges. In theory it's great but in practice having the perfect regular expression is pretty difficult (see http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ for instance). In lots of cases, having "something that's not blank" is just the simplest and surest thing to do. ---------------------------------------- Feature #12306: Implement String #blank? #present? and improve #strip and family to handle unicode https://bugs.ruby-lang.org/issues/12306#change-58195 * Author: Sam Saffron * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Time and again there have been rejected feature requests to Ruby core to implement `blank` and `present` protocols across all objects as ActiveSupport does. I am fine with this call and think it is fair. However, for the narrow case of String having `#blank?` and `#present?` makes sense. - Provides a natural extension over `#strip`, `#lstrip` and `#rstrip`. `(" ".strip.length == 0) == " ".blank?` - Plays nicely with ActiveSupport, providing an efficient implementation in Ruby core: see: https://github.com/SamSaffron/fast_blank, implementing blank efficiently requires a c extension. However, if this work is to be done, `#strip` and should probably start dealing with unicode blanks, eg: ``` irb(main):008:0> [0x3000].pack("U") => "���" irb(main):009:0> [0x3000].pack("U").strip.length => 1 ``` So there are 2 questions / feature requests here 1. Can we add blank? and present? to String? 2. Can we amend strip and family to account for unicode per: https://github.com/SamSaffron/fast_blank/blob/master/ext/fast_blank/fast_blank.c#L43-L74 -- https://bugs.ruby-lang.org/ Unsubscribe: