From: rafaelmfranca@... Date: 2016-04-21T04:09:51+00:00 Subject: [ruby-core:75065] [Ruby trunk Feature#12306] Implement String #blank? #present? and improve #strip and family to handle unicode Issue #12306 has been updated by Rafael Fran��a. > Your examples don't seem reasonable. Both are real examples, being used in a lot of applications for years, so they are reasonable. > Validating mail address is a hard job. "@@@" is not only whitespaces but is it a valid email address? Indeed, but I was not entering in the merit of email address validation. The validation is a simple check to raise argument error if the email address (or any other field not only email address) is blank. Perhaps I could link to the places were the method is used instead of were it is defined so you can see that it is reasonable: https://github.com/mikel/mail/blob/df48a05a7fb5a4271e6df12da7afb26a53494a18/lib/mail/check_delivery_params.rb#L5 https://github.com/mikel/mail/blob/df48a05a7fb5a4271e6df12da7afb26a53494a18/lib/mail/fields/content_disposition_field.rb#L41 https://github.com/mikel/mail/blob/df48a05a7fb5a4271e6df12da7afb26a53494a18/lib/mail/fields/mime_version_field.rb#L24 > Is "' || 1=1" a valid username? Not it is not, but username was only one example. That validation (that is real and is being used in a lot of application) can be used to any attribute, from usernames to comments body. In fact, this same application that we are using to track Ruby's issues is using `String#blank?`: https://github.com/redmine/redmine/search?utf8=%E2%9C%93&q=validates_presence_of ---------------------------------------- Feature #12306: Implement String #blank? #present? and improve #strip and family to handle unicode https://bugs.ruby-lang.org/issues/12306#change-58189 * 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: